この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Linuxにおける利用が急速に増えている「Berkeley Packet Filter(BPF)」について、基礎から応用まで幅広く紹介する連載「Berkeley Packet Filter(BPF)入門」。今回から数回にわたり、BPFの代表的な応用先の一つであるトレーシングに焦点を当て、その動作と利用方法を解説していこうと思います。今回はLinuxにおけるトレーシングの基礎を説明します。
トレーシングとは
まず、そもそも「トレーシング」とは何でしょうか。字義的には「跡を追う」という意味ですが、転じて一般には「イベント発生の記録」を意味します。例えばHTTPサーバを考えると、イベントとしてはコネクションの接続や切断、あるいはクライアントからのデータの受信などがあります。ソフトウェアのバグの調査やパフォーマンス改善には、こうしたイベントの発生情報の取得が必要不可欠です。
Linuxカーネルにはシステムやアプリケーションをトレーシングするための機構が複数備わっており、それらをBPFから利用できるようになっています。
BPFを利用したトレーシングの概要
これまでの連載で説明してきたように、BPFプログラムは特定のイベントに応じて呼び出され、処理を行います。そこで、トレースしたいイベントにBPFプログラムをひも付け、イベント発生時にそのBPFプログラムから記録を取ればトレーシングができることになります。イベントの記録はBPFマップを利用するか、あるいはヘルパー関数経由から追記専用のバッファーにデータを書き込むことで行います。ユーザーは記録したデータにシステムコール経由でアクセスすることができます。
以下にBPFによるトレーシングの概略図を示します。
この方法には以下のような特徴・利点があります。
- イベントの記録がカーネル内で完結する
- 記録するイベントデータのフィルタリング処理や整形処理がBPFプログラムから可能
- BPFプログラムを変更することで、トレース処理が容易に変更可能
BPFにひも付けられるイベント(を提供する機能)としては、主に以下のものがあります。
- Tracepoints
- kprobe、kretprobe
- uprobe、uretprobe
- perf event
BPFでトレースを行う場合、BPFのプログラム作成方法に加え、どのようなイベントが利用可能であるかも知る必要があります。以下で、それぞれのイベントの概要を説明します。
なお、これらの機能はいずれも(e)BPF登場前からLinuxで開発されてきた機能であり、BPF固有のものではありません。BPF以外にも例えば自分でカーネルモジュールを書いてそこからこれらの機能を利用することができます。
Tracepoints
関連記事
Copyright © ITmedia, Inc. All Rights Reserved.
"レーシング" - Google ニュース
April 14, 2020 at 03:00AM
https://ift.tt/2VrolBr
BPFを使ったLinuxにおけるトレーシングの基礎知識 - @IT
"レーシング" - Google ニュース
https://ift.tt/2Tf6dv9
Shoes Man Tutorial
Pos News Update
Meme Update
Korean Entertainment News
Japan News Update
Bagikan Berita Ini
0 Response to "BPFを使ったLinuxにおけるトレーシングの基礎知識 - @IT"
Post a Comment