Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ftrace を使ったコンテナ内デバッグの準備/container-debug-using-f...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kenta Tada
September 24, 2019
Programming
12k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ftrace を使ったコンテナ内デバッグの準備/container-debug-using-ftrace
Kenta Tada
September 24, 2019
More Decks by Kenta Tada
See All by Kenta Tada
eBPFの未来に向けた課題
kentatada
0
170
Beyond_the_Limits_of_eBPF__A_Journey_Through_OS_Technologies.pdf
kentatada
0
120
eBPF Updates (March 2025)
kentatada
0
390
CNCJ で考える OSPO ステージ2
kentatada
0
180
Security_for_introducing_eBPF
kentatada
0
400
cgroup v2 support in Kubeadm
kentatada
0
450
Keynote_ The State of eBPF in Japan
kentatada
0
180
eBPF Japan Meetup のご紹介
kentatada
0
660
eBPF_technologies_with_container
kentatada
0
880
Other Decks in Programming
See All in Programming
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
140
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
700
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
120
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
高専キャリア LT 発表内容
crysta1221
6
5.6k
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.9k
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
430
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
130
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
440
Featured
See All Featured
New Earth Scene 8
popppiees
3
2.5k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Building an army of robots
kneath
306
46k
Ethics towards AI in product and experience design
skipperchong
2
370
So, you think you're a good person
axbom
PRO
2
2.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
210
Making Projects Easy
brettharned
120
6.7k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Transcript
R&D Center System Technology Development Division Base System Development Department
Copyright 2019 Sony Corporation ftrace を使ったコンテナ内デバッグの準備 Kenta Tada R&D Center Sony Corporation
About me ⚫System Software Engineer ⚫低レイヤな仕事をしています。
本日のアジェンダ ⚫strace や GDB を使えない or 使いたくない環境でコンテ ナ内のアプリケーションをデバッグしたい。
ptrace ベースのデバッグツール(strace、 GDB)の課題 ⚫(特に組み込みでは)仕組み上、重たい。 ⚫システムグローバルな情報が取れない。 • (コンテナ内のアプリケーション起因で)カーネル側に影響 を与える問題の解析が出来ない。 • 例
: dentry キャッシュの増大化 https://qiita.com/kentaost/items/a2e882d2978fba9e17d3
そこで ftrace ⚫ftrace とは • カーネル内に組み込まれているトレーシング機構 • カーネル内関数やシステムコールの呼び出しを含む様々 な情報をカーネル内リングバッファに取得し続ける。
ftrace だと何を取得できるの? ⚫たとえば • カーネル内関数の呼び出し • カーネル内関数のコールグラフ •最大の割り込み禁止区間 •システムコールの呼び出し ←
今日はこれをコンテナ内で 取得してみる …
まずはコンテナ外で ftrace を使う
ftrace によるシステムコールトレース設定(not コンテナ環境) ⚫tracefs のマウント • 本スライドでは /sys/kernel/debug/tracing にマウント ⚫システムコールイベントをトレース対象にする
• /sys/kernel/debug/tracing/events/syscalls の中からシステム コール毎に enable ⚫PIDを限定 • # echo [PID] > /sys/kernel/debug/tracing/set_event_pid • 動作中のプロセスではなく、起動時から取得するに は?? → 次ページで説明 ⚫トレーススタート • # echo 1 > /sys/kernel/debug/tracing/tracing_on
プロセス起動時からトレースする ⚫set_event_pid に指定する PID がプログラム実行前にわ かれば良い。 → 解析対象プログラムを最後に exec するラッパースクリ
プトを作成して、 exec 前に ftrace の設定をすれば OK
コンテナ外のシステムコールトレースの例 : ls コマンド
コンテナ内で ftrace を使うには?
runC のおさらい ⚫runC • 低レイヤコンテナランタイム ⚫runC でコンテナを立ち上げるには • config.json •
コンテナの rootfs
ftrace 環境を config.json に書く時の懸念点 ⚫tracefs のマウント → 懸念点1 : ftrace
のリングバッファはシステムグローバ ル ⚫システムコールイベントをトレース対象にする ⚫PIDを限定 ⚫トレーススタート → 懸念点2 : pid namespace を分割していたら(普通してい る)どうしよう??
懸念点1 : ftrace のリングバッファや設定について ⚫通常 ftrace のリングバッファはシステムグローバル • トレーススタートタイミングは、コンテナ毎に異なる。 •
コンテナAとコンテナBが共に ftrace を使うと、両方のログ が混合される。 –コンテナ側にリングバッファを見せる場合、機微情報等 が入ってたりすると困る。 ⚫コンテナの中で ftrace の設定をいじられたくない • コンテナ内からリングバッファのサイズを変更したり、 トレース対象の PID を変更できてしまう。
懸念点1 : 解決案 ⚫通常 ftrace のリングバッファはシステムグローバル • ftrace にはリングバッファを分割する機能がある(ftrace instances)。
–instances ディレクトリ(例 : /sys/kernel/debug/tracing/instances) で mkdir すると専用のバッファが出来る。 –例 : /sys/kernel/debug/tracing/instances/containerA • コンテナ毎にリングバッファを作成して、コンテナ毎の ユーザに chown して bind mount ⚫コンテナの中でftraceの設定をいじられたくない • bind mount の単位をファイルレベルに細かくする
懸念点2 : pid namespace 分割問題 ⚫ホスト上の PID を set_event_pid に指定する必要がある。
懸念点2 : 解決案 ⚫ホスト上の PID を set_event_pid に指定する必要がある。 • runC
は自身を exec してコンテナの init process になる。 • runC の preStart にて、将来コンテナの中で動く PID (runc init)を探してその PIDを set_event_pid に指定するスクリプ トを実行する。 "hooks": { "prestart": [ { "path": "/hookpath/set_ftrace.sh", "args": [ "set_ftrace.sh" ] } ] },
コンテナ内のシステムコールトレースの例 : ls コマンド
デモ : 実際にコンテナ内からログを出してみる
今後の課題 ⚫preStart から実際に exec されるまでにトレースされる情 報がログに入ってしまう。 • そもそも preStart でやるべきことでもない気がする。
→ preExec 的なものが欲しいなあ・・・ ⚫どのファイルが読めなくてエラーになってるか知りた い。 → (参考) kprobes で表示可能 https://events.linuxfoundation.org/wp-content/uploads/2017/12/oss-eu-2018- fun-with-dynamic-trace-events_steven-rostedt.pdf ⚫ログのシステムコールのエラーメッセージが欲しい。
コンテナ内で ftrace を使うには? ⚫ftrace instances をコンテナ単位で割り当てる ⚫runC の preStart で将来コンテナの中で動く
PID を取得 し、その PID を ftrace の set_event_pid に設定する まとめ
SONYはソニー株式会社の登録商標または商標です。 各ソニー製品の商品名・サービス名はソニー株式会社またはグループ各社の登録商標または商標です。その他の製品および会社名は、各社の商号、登録商標または商標です。