Copyright © 2012 NTT DATA Corporation perfを使ったPostgreSQLの解析 〜~前編 2012年年9⽉月29⽇日(⼟土)
Agenda u 前編 1. はじめに 2. プロファイリングとは? 3. perfとは 4. perfの仕組み 5. perfと他のパフォーマンス解析ツールとの⽐比較 6. perfの導⼊入と使い⽅方 7. perfを使ってみよう 8. まとめ Copyright © 2012NTT DATA Corporation 2
Agenda u 後編 1. 前編の復復習 2. perfを使ったプロファイリングの流流れ 3. PostgreSQLをプロファイリングしてみよう 4. perfの使いどころ 5. まとめ Copyright © 2012NTT DATA Corporation 3
1. はじめに Copyright © 2012 NTT DATA Corporation 4
あらためまして⾃自⼰己紹介 ⽒氏名 Copyright © 2012 NTT DATA Corporation 5 Copyright © 2011 NTT DATA CORPORATION NTTデータ 基盤システム事業本部 システム⽅方式技術ビジネスユニット 江川 ⼤大地 所属 やっていたこと 年年代やったこと -‐‑‒2009歴史のお勉強(⼤大学時代) 2009-‐‑‒2011Webシステム開発(Javaなど) 2011-‐‑‒現在PostgreSQL関係 近況 沖縄に⾏行行ってました。 Twitter @daiti0804
本⽇日のお題 お題perfを使ったPostgreSQLの解析(前編) 今⽇日説明 することperfの仕組みや使い⽅方 Copyright © 2012 NTT DATA Corporation 6
参考資料料 n 本⽇日の講演に当たって参考にした資料料等 n perf ソースコード ̶— [Linuxカーネルソースのルート]/tools/perf配下 n perf ドキュメント ̶— [Linuxカーネルソースのルート]/tools/perf/Documentation n perf wiki ̶— https://perf.wiki.kernel.org/index.php/Main_̲Page n 『Linuxカーネル Hacks ―パフォーマンス改善、開発効率率率向上、省省電⼒力力化のためのテクニック』 ⾼高橋 浩和 (監修), 池⽥田 宗広, ⼤大岩 尚宏, 島本 裕志, ⽵竹部 晶雄, 平松 雅⺒巳 (著) Copyright © 2012NTT DATA Corporation 7
2. プロファイリングとは? Copyright © 2012 NTT DATA Corporation 8
トラブルシューティングとは? 障害発⽣生解析対処 現状把握切切り分け原因特定暫定対処根本解決 障害を避けるた めに暫定的な対 処を実施する。 運⽤用中に取得し た情報や顧客か らのヒアリング を通して、実際 に何が起きてい るのかを把握す る。 運⽤用中に取得し た情報や、シス テムのログ、シ ステムが出すそ の他の情報を元 に、どこに問題 があるのかを特 定する。 問題がなぜ起き たのか、どう いった処理理が原 因かを特定する。 同様の障害が発 ⽣生しないように 根本的な対処を ⾏行行う。 Copyright © 2012 NTT DATA Corporation 9
トラブルシューティングとは? 障害発⽣生解析対処 現状把握切切り分け原因特定暫定対処根本解決 障害を避けるた めに暫定的な対 処を実施する。 運⽤用中に取得し た情報や顧客か らのヒアリング を通して、実際 に何が起きてい るのかを把握す る。 運⽤用中に取得し た情報や、シス テムのログ、シ ステムが出すそ の他の情報を元 に、どこに問題 があるのかを特 定する。 問題がなぜ起き たのか、どう いった処理理が原 因かを特定する。 同様の障害が発 ⽣生しないように 根本的な対処を ⾏行行う。 perfを使うタイミング Copyright © 2012 NTT DATA Corporation 10
解析とは? n 解析とは ̶— ログやエラーメッセージなどシステムから得られる情報から、何が起きている かを把握し、どこに問題があるのかを特定し、その原因を突き⽌止めること。 n なぜ解析をするのか ̶— やみくもに対策を打っても、弾があたらないため。原因を特定することで、適 切切な対策を打つために実施する。 n 解析⼿手法の例例 ̶— ログ解析 ̶— プロファイリング Copyright © 2012 NTT DATA Corporation 11
プロファイリングとは n プロファイリングとは ̶— プログラムのどの部分がボトルネックとなって処理理に時間がかかっているのか など、障害の原因を特定すること。 Copyright © 2012 NTT DATA Corporation 12
3. perfとは Copyright © 2012 NTT DATA Corporation 13
perfとは n perf(Performance Counters for Linux)とは? - Linuxカーネル上の統合パフォーマンスツール - イベント数計測にCPUに内蔵されているレジスタを使⽤用 - perf tools (ツールの集合体、サブコマンド群) n イベントとは?? - perfの計測対象 Copyright © 2012 NTT DATA Corporation 14
イベントの分類 分類説明具体例例 Hardware eventプロッセサで計測されるイ ベント。 cpu-‐‑‒cycles, cache-‐‑‒missesなど Software eventカーネルのカウンタで計測 されるイベント。 cpu-‐‑‒clock, page-‐‑‒faultsなど Hardware cache event プロッセサで計測されるイ ベント。 L1-‐‑‒dcache-‐‑‒load-‐‑‒misses, branch-‐‑‒loadsなど Tracepoint eventカーネルの処理理を記録する ためにカーネルに埋め込ま れたトレースポイント。 sched:sched_̲stat_̲runtime, syscalls:sys_̲enter_̲socket など Copyright © 2012 NTT DATA Corporation 15
プロファイラとしてありたい姿 WHAT DO WE CARE? • The Linux Performance Events Subsystem provides a low overhead way to measure the workloads of a single application or the full system • Itʼ’s at least an order of magnitude faster than an instrumenting profiler • It provides far more information compared to statistical profiler Roberto A. Vitillo (ローレンス・バークレー国⽴立立研究所)の“Future computing in particle physics”カンファレンスにおける講演資料料「PERFORMANCE TOOLS DEVELOPMENTS」 (2011年年6⽉月16⽇日)より。 Copyright © 2012 NTT DATA Corporation 16
プロファイラとしてありたい姿 § 低いオーバヘッド - 解析対象のシステムは既に何らかのオーバヘッドが発⽣生している ことが多い。そこにさらに負荷がかかるツールを使おうとしても、 ツールが動かなかったり、システムがダウンする可能性もある。 § 多くの情報 - トラブルの原因はいっぱい考えられるから。 § ⾒見見やすい表⽰示(多くの情報の中から取捨選択が可能) - なにがどう書いてあるのか分からないと、トラブルの原因が表⽰示 されていても⾒見見落落とす可能性もある。 Copyright © 2012 NTT DATA Corporation 17
perfについて〜~その他 § いつLinuxカーネルに統合されたの? - Linuxカーネル 2.6.31 § 誰が作ったの? - Ingo Molnar⽒氏が中⼼心となって開発が進められた。 § メンテナは? - Ingo Molnar⽒氏(Red Hat) - Arnaldo Carvelho de Melo⽒氏(Red Hat) Copyright © 2012 NTT DATA Corporation 18
4. perfの仕組み Copyright © 2012 NTT DATA Corporation 19
perfのフロー 〜~イベントの指定 ユーザ# perf stat XX カーネル “perf_̲event_̲open”( システムコール)で処 理理を依頼 Software eventの場合 カウンタ レジスタに取得するイベントを設定 Hardware event の場合 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタ Copyright © 2012 NTT DATA Corporation 20
perfのフロー 〜~データの保存 ユーザ# perf stat XX カーネル Software eventの場合 カウンタ レジスタから値を取得。 Hardware event の場合 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタ Copyright © 2012 NTT DATA Corporation 21
perfのフロー 〜~データの保存 ユーザ# perf stat XX 加⼯工して値を返す。 カーネル カウンタ レジスタから値を取得。 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタ Copyright © 2012 NTT DATA Corporation 22
perfの仕組み perfでは、perf_̲event_̲openというシステムコールを利利⽤用し てカーネルから値を取ってきている。 ■ include/linux/syscalls.h より : : asmlinkage long sys_̲perf_̲event_̲open( struct perf_̲event_̲attr _̲_̲user *attr_̲uptr, pid_̲t pid, int cpu, int group_̲fd, unsigned long flags); : : ■ tools/perf/perf.h より : : sys_̲perf_̲event_̲open(struct perf_̲event_̲attr *attr, pid_̲t pid, int cpu, int group_̲fd, unsigned long flags) { attr-‐‑‒size = sizeof(*attr); return syscall(_̲_̲NR_̲perf_̲event_̲open, attr, pid, cpu, group_̲fd, flags); } : : Copyright © 2012 NTT DATA Corporation 23
5. perfと他のパフォーマンス解析ツールとの⽐比較 Copyright © 2012 NTT DATA Corporation 24
解析ツールってどんなものがある? § 解析ツール - Oprofile - ftrace - System tap - … Copyright © 2012 NTT DATA Corporation 25
他のツールとの⽐比較 perfOprofileSystemTap オーバヘッド低低スクリプト次第 (漏漏れなく追跡する) 情報量量多中多 情報の取捨選択可能可能可能 Copyright © 2012 NTT DATA Corporation 26
他のツールとの⽐比較 perfOprofileSystemTap オーバヘッド低低⾼高 (漏漏れなく追跡する) 情報の取捨選択可能可能不不可能 動的監視可能不不可能可能 指向性中 (システム全体も処理理 個別のプロファイリ ングも可能) 低 (システム全体のプロ ファイリング向き) ⾼高 (アドホックなプロ ファイリング向き) 危険性低低⾼高 (スクリプト暴暴⾛走の可 能性) Copyright © 2012 NTT DATA Corporation 27
6. perfの導⼊入と使い⽅方 Copyright © 2012 NTT DATA Corporation 28
今回の講演に当たって使⽤用した環境 ソフトウェア名バージョン備考 Ubuntu12.04 Linux kernel3.2.0 VirtualBox4.1.22仮想化ソフト VirtualBox n VirtualBox上のサーバ OS:Ununtu 12.04 カーネル:Linux kernel3.2.0 Macbook Air Copyright © 2012 NTT DATA Corporation 29
【参考】perfがサポートされているかの確認 § カーネルバージョンの確認 - Linux kernel 2.6以上でサポートされている ※コマンドによっては、より新しいバージョンのみにしか対応していないものもある。 § コンフィギュアオプションの確認 - CONFIG_̲PERF_̲xxxx というオプションが 有効になっていれば、perf がサポートされている。 ※コンフィギュアオプションの確認⽅方法 /boot配下の” config-‐‑‒カーネルバージョン-‐‑‒generic-‐‑‒pae”ファイルを確認。 Copyright © 2012NTT DATA Corporation 30
perfの導⼊入 n perfをインストールするには、以下の2つの⽅方法がある。 1. apt-‐‑‒get, yumを使う⽅方法 2. ソースからインストールする⽅方法 Copyright © 2012 NTT DATA Corporation 31
perfの導⼊入〜~1.apt-‐‑‒getによるインストール § 準備 - linux-‐‑‒tools-‐‑‒commonが必要 Copyright © 2012 NTT DATA Corporation 32
perfの導⼊入〜~1.apt-‐‑‒getによるインストール § perfのインストール - 以下のコマンドを⼊入⼒力力 # sudo apt-‐‑‒get install linux-‐‑‒tools-‐‑‒3.2.0-‐‑‒30 : 以下のパッケージが新たにインストールされます: linux-‐‑‒tools-‐‑‒3.2.0-‐‑‒30 : linux-‐‑‒tools-‐‑‒3.2.0-‐‑‒30 (3.2.0-‐‑‒30.48)を設定しています... : Copyright © 2012 NTT DATA Corporation 33
perfの導⼊入〜~2.ソースからのインストール § 準備 - libdw-‐‑‒dev or elfutils-‐‑‒libelf-‐‑‒devel が必要 Copyright © 2012 NTT DATA Corporation 34
perfの導⼊入〜~2.ソースからのインストール § perfのインストール - 以下のコマンドを⼊入⼒力力 # sudo apt-‐‑‒get install linux-‐‑‒source : 以下のパッケージが新たにインストールされます: linux-‐‑‒source linux-‐‑‒source-‐‑‒3.2.0 : linux-‐‑‒source-‐‑‒3.2.0を設定しています… : # tar xjf linux-‐‑‒source-‐‑‒3.2.0.tar.bz2 # cd カーネルソースのルート/tools/perf # make # make install Copyright © 2012 NTT DATA Corporation 35
動作確認 § 動作確認 - 以下のコマンドを⼊入⼒力力 # perf list List of pre-‐‑‒defined events (to be used in -‐‑‒e): cpu-‐‑‒cycles OR cycles [Hardware event] stalled-‐‑‒cycles-‐‑‒frontend OR idle-‐‑‒cycles-‐‑‒frontend [Hardware event] stalled-‐‑‒cycles-‐‑‒backend OR idle-‐‑‒cycles-‐‑‒backend [Hardware event] instructions [Hardware event] : : cpu-‐‑‒clock [Software event] task-‐‑‒clock [Software event] : : perfで利利⽤用可能なプロファイルイベントの ⼀一覧が、表⽰示されれば、ok!! Copyright © 2012 NTT DATA Corporation 36
perf の使い⽅方 § perfの使い⽅方 # perf コマンド [オプション] § 代表的なコマンド コマンド説明 perf annotateperf recordで作成したperfのデータを読み込み、 関数で呼び出した命令令レベ ルのトレース結果を表⽰示する。 perf probe新たに動的なトレースポイント(イベント)を定義する。 perf recordイベントの記録を⾏行行う。 perf reportperf recordで記録したイベントをプロンプトに表⽰示する。 perf scriptperf recordで作成したperfのデータを読み込み、 トレース結果を表⽰示する。 perf stat引数に指定したコマンドのパフォーマンスカウンタの値を表⽰示する。 perf topLinuxコマンドの”top”のように動的にシステム監視を⾏行行う。 Copyright © 2012 NTT DATA Corporation 37
イベントの指定 perf では、1回の実⾏行行ごとに単⼀一のもしくは、複数のイベント指定が可能で ある。以下のように、-‐‑‒eオプションに続いて、イベント名を記述する。 n 単⼀一イベント指定 # perf stat -‐‑‒e cycles dd if=/dev/zero of=/dev/null count=100000 n 複数イベント指定 # perf stat -‐‑‒e cycles:uk –e faults dd if=/dev/zero of=/dev/null count=100000 Copyright © 2012 NTT DATA Corporation 38
7. perfを使ってみよう Copyright © 2012 NTT DATA Corporation 39
perf stat perf statは、指定したコマンドのパフォーマンスカウンタの値を表⽰示できる。 perf record/reportと違い、指定したコマンドの総合的な統計情報を得るこ とが可能である。 n こんな時に便便利利 ̶— あるコマンドについて、総合的な(複数のイベントにまたがった)性能測 定情報が知りたい。 ̶— 性能の悪い処理理について、何が原因なのか知りたい。 ̶— 性能改善(暫定対処、本格対処)を⾏行行うにあたっての数値⽬目標を出したい。 Copyright © 2012 NTT DATA Corporation 40
perf stat 〜~オプション § 代表的なオプション コマンド説明 -‐‑‒eイベントを指定する。 -‐‑‒pプロセスIDを指定する。 -‐‑‒tスレッドIDを指定する。 -‐‑‒a全CPU上のプロセスを指定する。 -‐‑‒C特定のCPU上のプロセスを指定する。 -‐‑‒B計測結果にカンマを⼊入れて表⽰示する。(ex.1,000) Copyright © 2012 NTT DATA Corporation 41
perf stat 〜~実⾏行行例例 n perf stat の実⾏行行例例を以下に⽰示す。 # perf stat -‐‑‒B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 レコード⼊入⼒力力 1000000+0 レコード出⼒力力 512000000 バイト (512 MB) コピーされました、 0.433087 秒、 1.2 GB/秒 Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 436.626492 task-‐‑‒clock # 0.957 CPUs utilized 24 context-‐‑‒switches # 0.000 M/sec 0 CPU-‐‑‒migrations # 0.000 M/sec 252 page-‐‑‒faults # 0.001 M/sec not supported cycles not supported stalled-‐‑‒cycles-‐‑‒frontend not supported stalled-‐‑‒cycles-‐‑‒backend not supported instructions not supported branches not supported branch-‐‑‒misses 0.456183302 seconds time elapsed ※ 特にイベント指定しなければ、 perf stat は上記のイベントの集計をする Copyright © 2012 NTT DATA Corporation 42
perf top perf topは、リアルタイムでのプロファイリングが可能にするコマンドであ る。Linuxコマンドの top のように動的にシステム監視を⾏行行うことができる。 n こんな時に便便利利 ̶— システム全体のプロファイリングを⾏行行いたい。 ̶— リアルタイムで監視を⾏行行いたい。 Copyright © 2012 NTT DATA Corporation 43
perf top〜~使⽤用例例 n perf topの実⾏行行例例を以下に⽰示す。 # perf top Copyright © 2012 NTT DATA Corporation 44
perf top〜~オプション § 代表的なオプション コマンド説明 -‐‑‒eイベントを指定する。 -‐‑‒pプロセスIDを指定する。 -‐‑‒tスレッドIDを指定する。 -‐‑‒a全CPU上のプロセスを指定する。 -‐‑‒C特定のCPU上のプロセスを指定する。 Copyright © 2012 NTT DATA Corporation 45
perf record perf report perf recordは、イベントの記録を⾏行行う。記録したデータは、データファイル (デフォルト名はperf.data)として保存される。そのデータファイルは、 perf reportで⾒見見ることができる。 n こんな時に便便利利 ̶— あるコマンドについての動作を詳細に記録したい。 ̶— 怪しい処理理について、詳細に解析したい。 ̶— 性能の悪い処理理について、何が原因なのか知りたい。 Copyright © 2012 NTT DATA Corporation 46
perf report〜~オプション § 代表的なオプション コマンド説明 -‐‑‒eイベントを指定する。 -‐‑‒o出⼒力力ファイル名を指定する(デフォルトは”perf.data”) -‐‑‒pプロセスIDを指定する。 -‐‑‒tスレッドIDを指定する。 -‐‑‒a全CPU上のプロセスを指定する。 -‐‑‒C特定のCPU上のプロセスを指定する。 Copyright © 2012 NTT DATA Corporation 47
perf record〜~オプション § 代表的なオプション コマンド説明 -‐‑‒i⼊入⼒力力ファイル名を指定する(⼊入⼒力力しないとカレンとディレクトリ の”perf.data”を⼊入⼒力力ファイルとする) -‐‑‒spidなどでソートする。 Copyright © 2012 NTT DATA Corporation 48
perf record perf report 〜~使⽤用例例 n perf recordの実⾏行行例例を以下に⽰示す。 # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s stress: info: [5843] dispatching hogs: 4 cpu, 2 io, 2 vm, 0 hdd stress: info: [5843] successful run completed in 10s [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.247 MB perf.data (~∼10775 samples) ] # ls perf.data Copyright © 2012 NTT DATA Corporation 49
perf record perf report 〜~使⽤用例例 n perf reportの実⾏行行例例を以下に⽰示す。 オーバヘッドコマンドオブジェクト名シンボル名 Copyright © 2012 NTT DATA Corporation 50
perf record perf report 〜~Tips n perf recoerdで得られるデータファイル(perf.data)は、同名のファイルが あっても、上書きされずに、古いファイルを”perf.data.old”として対⽐比して くれる。ただし、”perf.data.old”までは退避処理理をしてくれないので注意。 # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s stress: info: [5843] dispatching hogs: 4 cpu, 2 io, 2 vm, 0 hdd stress: info: [5843] successful run completed in 10s [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.247 MB perf.data (~∼10775 samples) ] # ls perf.data # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s : : # ls perf.data perf.data.old # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s : : # ls perf.data perf.data.old Copyright © 2012 NTT DATA Corporation 51
8. まとめ Copyright © 2012 NTT DATA Corporation 52
まとめ n perfの概要 n perfの導⼊入、使い⽅方 n perfの各種コマンドについて Copyright © 2012 NTT DATA Corporation 53
後編について n プロファイリングのネタ Copyright © 2012 NTT DATA Corporation 54
Copyright © 2011 NTT DATA Corporation Copyright © 2012 NTT DATA Corporation

perfを使ったPostgreSQLの解析(前編)

  • 1.
    Copyright © 2012NTT DATA Corporation perfを使ったPostgreSQLの解析 〜~前編 2012年年9⽉月29⽇日(⼟土)
  • 2.
    Agenda u 前編 1. はじめに 2. プロファイリングとは? 3. perfとは 4. perfの仕組み 5. perfと他のパフォーマンス解析ツールとの⽐比較 6. perfの導⼊入と使い⽅方 7. perfを使ってみよう 8. まとめ Copyright © 2012NTT DATA Corporation 2
  • 3.
    Agenda u 後編 1. 前編の復復習 2. perfを使ったプロファイリングの流流れ 3. PostgreSQLをプロファイリングしてみよう 4. perfの使いどころ 5. まとめ Copyright © 2012NTT DATA Corporation 3
  • 4.
    1. はじめに Copyright© 2012 NTT DATA Corporation 4
  • 5.
    あらためまして⾃自⼰己紹介 ⽒氏名 Copyright© 2012 NTT DATA Corporation 5 Copyright © 2011 NTT DATA CORPORATION NTTデータ 基盤システム事業本部 システム⽅方式技術ビジネスユニット 江川 ⼤大地 所属 やっていたこと 年年代やったこと -‐‑‒2009歴史のお勉強(⼤大学時代) 2009-‐‑‒2011Webシステム開発(Javaなど) 2011-‐‑‒現在PostgreSQL関係 近況 沖縄に⾏行行ってました。 Twitter @daiti0804
  • 6.
    本⽇日のお題 お題perfを使ったPostgreSQLの解析(前編) 今⽇日説明 することperfの仕組みや使い⽅方 Copyright © 2012 NTT DATA Corporation 6
  • 7.
    参考資料料 n 本⽇日の講演に当たって参考にした資料料等 n perf ソースコード ̶— [Linuxカーネルソースのルート]/tools/perf配下 n perf ドキュメント ̶— [Linuxカーネルソースのルート]/tools/perf/Documentation n perf wiki ̶— https://perf.wiki.kernel.org/index.php/Main_̲Page n 『Linuxカーネル Hacks ―パフォーマンス改善、開発効率率率向上、省省電⼒力力化のためのテクニック』 ⾼高橋 浩和 (監修), 池⽥田 宗広, ⼤大岩 尚宏, 島本 裕志, ⽵竹部 晶雄, 平松 雅⺒巳 (著) Copyright © 2012NTT DATA Corporation 7
  • 8.
    2. プロファイリングとは? Copyright© 2012 NTT DATA Corporation 8
  • 9.
    トラブルシューティングとは? 障害発⽣生解析対処 現状把握切切り分け原因特定暫定対処根本解決 障害を避けるた めに暫定的な対 処を実施する。 運⽤用中に取得し た情報や顧客か らのヒアリング を通して、実際 に何が起きてい るのかを把握す る。 運⽤用中に取得し た情報や、シス テムのログ、シ ステムが出すそ の他の情報を元 に、どこに問題 があるのかを特 定する。 問題がなぜ起き たのか、どう いった処理理が原 因かを特定する。 同様の障害が発 ⽣生しないように 根本的な対処を ⾏行行う。 Copyright © 2012 NTT DATA Corporation 9
  • 10.
    トラブルシューティングとは? 障害発⽣生解析対処 現状把握切切り分け原因特定暫定対処根本解決 障害を避けるた めに暫定的な対 処を実施する。 運⽤用中に取得し た情報や顧客か らのヒアリング を通して、実際 に何が起きてい るのかを把握す る。 運⽤用中に取得し た情報や、シス テムのログ、シ ステムが出すそ の他の情報を元 に、どこに問題 があるのかを特 定する。 問題がなぜ起き たのか、どう いった処理理が原 因かを特定する。 同様の障害が発 ⽣生しないように 根本的な対処を ⾏行行う。 perfを使うタイミング Copyright © 2012 NTT DATA Corporation 10
  • 11.
    解析とは? n 解析とは ̶— ログやエラーメッセージなどシステムから得られる情報から、何が起きている かを把握し、どこに問題があるのかを特定し、その原因を突き⽌止めること。 n なぜ解析をするのか ̶— やみくもに対策を打っても、弾があたらないため。原因を特定することで、適 切切な対策を打つために実施する。 n 解析⼿手法の例例 ̶— ログ解析 ̶— プロファイリング Copyright © 2012 NTT DATA Corporation 11
  • 12.
    プロファイリングとは n プロファイリングとは ̶— プログラムのどの部分がボトルネックとなって処理理に時間がかかっているのか など、障害の原因を特定すること。 Copyright © 2012 NTT DATA Corporation 12
  • 13.
    3. perfとは Copyright© 2012 NTT DATA Corporation 13
  • 14.
    perfとは n perf(PerformanceCounters for Linux)とは? - Linuxカーネル上の統合パフォーマンスツール - イベント数計測にCPUに内蔵されているレジスタを使⽤用 - perf tools (ツールの集合体、サブコマンド群) n イベントとは?? - perfの計測対象 Copyright © 2012 NTT DATA Corporation 14
  • 15.
    イベントの分類 分類説明具体例例 Hardwareeventプロッセサで計測されるイ ベント。 cpu-‐‑‒cycles, cache-‐‑‒missesなど Software eventカーネルのカウンタで計測 されるイベント。 cpu-‐‑‒clock, page-‐‑‒faultsなど Hardware cache event プロッセサで計測されるイ ベント。 L1-‐‑‒dcache-‐‑‒load-‐‑‒misses, branch-‐‑‒loadsなど Tracepoint eventカーネルの処理理を記録する ためにカーネルに埋め込ま れたトレースポイント。 sched:sched_̲stat_̲runtime, syscalls:sys_̲enter_̲socket など Copyright © 2012 NTT DATA Corporation 15
  • 16.
    プロファイラとしてありたい姿 WHAT DOWE CARE? • The Linux Performance Events Subsystem provides a low overhead way to measure the workloads of a single application or the full system • Itʼ’s at least an order of magnitude faster than an instrumenting profiler • It provides far more information compared to statistical profiler Roberto A. Vitillo (ローレンス・バークレー国⽴立立研究所)の“Future computing in particle physics”カンファレンスにおける講演資料料「PERFORMANCE TOOLS DEVELOPMENTS」 (2011年年6⽉月16⽇日)より。 Copyright © 2012 NTT DATA Corporation 16
  • 17.
    プロファイラとしてありたい姿 § 低いオーバヘッド - 解析対象のシステムは既に何らかのオーバヘッドが発⽣生している ことが多い。そこにさらに負荷がかかるツールを使おうとしても、 ツールが動かなかったり、システムがダウンする可能性もある。 § 多くの情報 - トラブルの原因はいっぱい考えられるから。 § ⾒見見やすい表⽰示(多くの情報の中から取捨選択が可能) - なにがどう書いてあるのか分からないと、トラブルの原因が表⽰示 されていても⾒見見落落とす可能性もある。 Copyright © 2012 NTT DATA Corporation 17
  • 18.
    perfについて〜~その他 § いつLinuxカーネルに統合されたの? - Linuxカーネル 2.6.31 § 誰が作ったの? - Ingo Molnar⽒氏が中⼼心となって開発が進められた。 § メンテナは? - Ingo Molnar⽒氏(Red Hat) - Arnaldo Carvelho de Melo⽒氏(Red Hat) Copyright © 2012 NTT DATA Corporation 18
  • 19.
    4. perfの仕組み Copyright© 2012 NTT DATA Corporation 19
  • 20.
    perfのフロー 〜~イベントの指定 ユーザ#perf stat XX カーネル “perf_̲event_̲open”( システムコール)で処 理理を依頼 Software eventの場合 カウンタ レジスタに取得するイベントを設定 Hardware event の場合 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタ Copyright © 2012 NTT DATA Corporation 20
  • 21.
    perfのフロー 〜~データの保存 ユーザ#perf stat XX カーネル Software eventの場合 カウンタ レジスタから値を取得。 Hardware event の場合 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタ Copyright © 2012 NTT DATA Corporation 21
  • 22.
    perfのフロー 〜~データの保存 ユーザ#perf stat XX 加⼯工して値を返す。 カーネル カウンタ レジスタから値を取得。 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタ Copyright © 2012 NTT DATA Corporation 22
  • 23.
    perfの仕組み perfでは、perf_̲event_̲openというシステムコールを利利⽤用し てカーネルから値を取ってきている。 ■ include/linux/syscalls.h より : : asmlinkage long sys_̲perf_̲event_̲open( struct perf_̲event_̲attr _̲_̲user *attr_̲uptr, pid_̲t pid, int cpu, int group_̲fd, unsigned long flags); : : ■ tools/perf/perf.h より : : sys_̲perf_̲event_̲open(struct perf_̲event_̲attr *attr, pid_̲t pid, int cpu, int group_̲fd, unsigned long flags) { attr-‐‑‒size = sizeof(*attr); return syscall(_̲_̲NR_̲perf_̲event_̲open, attr, pid, cpu, group_̲fd, flags); } : : Copyright © 2012 NTT DATA Corporation 23
  • 24.
  • 25.
    解析ツールってどんなものがある? § 解析ツール - Oprofile - ftrace - System tap - … Copyright © 2012 NTT DATA Corporation 25
  • 26.
    他のツールとの⽐比較 perfOprofileSystemTap オーバヘッド低低スクリプト次第 (漏漏れなく追跡する) 情報量量多中多 情報の取捨選択可能可能可能 Copyright © 2012 NTT DATA Corporation 26
  • 27.
    他のツールとの⽐比較 perfOprofileSystemTap オーバヘッド低低⾼高 (漏漏れなく追跡する) 情報の取捨選択可能可能不不可能 動的監視可能不不可能可能 指向性中 (システム全体も処理理 個別のプロファイリ ングも可能) 低 (システム全体のプロ ファイリング向き) ⾼高 (アドホックなプロ ファイリング向き) 危険性低低⾼高 (スクリプト暴暴⾛走の可 能性) Copyright © 2012 NTT DATA Corporation 27
  • 28.
    6. perfの導⼊入と使い⽅方 Copyright© 2012 NTT DATA Corporation 28
  • 29.
    今回の講演に当たって使⽤用した環境 ソフトウェア名バージョン備考 Ubuntu12.04 Linux kernel3.2.0 VirtualBox4.1.22仮想化ソフト VirtualBox n VirtualBox上のサーバ OS:Ununtu 12.04 カーネル:Linux kernel3.2.0 Macbook Air Copyright © 2012 NTT DATA Corporation 29
  • 30.
    【参考】perfがサポートされているかの確認 § カーネルバージョンの確認 - Linux kernel 2.6以上でサポートされている ※コマンドによっては、より新しいバージョンのみにしか対応していないものもある。 § コンフィギュアオプションの確認 - CONFIG_̲PERF_̲xxxx というオプションが 有効になっていれば、perf がサポートされている。 ※コンフィギュアオプションの確認⽅方法 /boot配下の” config-‐‑‒カーネルバージョン-‐‑‒generic-‐‑‒pae”ファイルを確認。 Copyright © 2012NTT DATA Corporation 30
  • 31.
    perfの導⼊入 n perfをインストールするには、以下の2つの⽅方法がある。 1. apt-‐‑‒get, yumを使う⽅方法 2. ソースからインストールする⽅方法 Copyright © 2012 NTT DATA Corporation 31
  • 32.
    perfの導⼊入〜~1.apt-‐‑‒getによるインストール § 準備 - linux-‐‑‒tools-‐‑‒commonが必要 Copyright © 2012 NTT DATA Corporation 32
  • 33.
    perfの導⼊入〜~1.apt-‐‑‒getによるインストール § perfのインストール - 以下のコマンドを⼊入⼒力力 # sudo apt-‐‑‒get install linux-‐‑‒tools-‐‑‒3.2.0-‐‑‒30 : 以下のパッケージが新たにインストールされます: linux-‐‑‒tools-‐‑‒3.2.0-‐‑‒30 : linux-‐‑‒tools-‐‑‒3.2.0-‐‑‒30 (3.2.0-‐‑‒30.48)を設定しています... : Copyright © 2012 NTT DATA Corporation 33
  • 34.
    perfの導⼊入〜~2.ソースからのインストール § 準備 - libdw-‐‑‒dev or elfutils-‐‑‒libelf-‐‑‒devel が必要 Copyright © 2012 NTT DATA Corporation 34
  • 35.
    perfの導⼊入〜~2.ソースからのインストール § perfのインストール - 以下のコマンドを⼊入⼒力力 # sudo apt-‐‑‒get install linux-‐‑‒source : 以下のパッケージが新たにインストールされます: linux-‐‑‒source linux-‐‑‒source-‐‑‒3.2.0 : linux-‐‑‒source-‐‑‒3.2.0を設定しています… : # tar xjf linux-‐‑‒source-‐‑‒3.2.0.tar.bz2 # cd カーネルソースのルート/tools/perf # make # make install Copyright © 2012 NTT DATA Corporation 35
  • 36.
    動作確認 § 動作確認 - 以下のコマンドを⼊入⼒力力 # perf list List of pre-‐‑‒defined events (to be used in -‐‑‒e): cpu-‐‑‒cycles OR cycles [Hardware event] stalled-‐‑‒cycles-‐‑‒frontend OR idle-‐‑‒cycles-‐‑‒frontend [Hardware event] stalled-‐‑‒cycles-‐‑‒backend OR idle-‐‑‒cycles-‐‑‒backend [Hardware event] instructions [Hardware event] : : cpu-‐‑‒clock [Software event] task-‐‑‒clock [Software event] : : perfで利利⽤用可能なプロファイルイベントの ⼀一覧が、表⽰示されれば、ok!! Copyright © 2012 NTT DATA Corporation 36
  • 37.
    perf の使い⽅方 §perfの使い⽅方 # perf コマンド [オプション] § 代表的なコマンド コマンド説明 perf annotateperf recordで作成したperfのデータを読み込み、 関数で呼び出した命令令レベ ルのトレース結果を表⽰示する。 perf probe新たに動的なトレースポイント(イベント)を定義する。 perf recordイベントの記録を⾏行行う。 perf reportperf recordで記録したイベントをプロンプトに表⽰示する。 perf scriptperf recordで作成したperfのデータを読み込み、 トレース結果を表⽰示する。 perf stat引数に指定したコマンドのパフォーマンスカウンタの値を表⽰示する。 perf topLinuxコマンドの”top”のように動的にシステム監視を⾏行行う。 Copyright © 2012 NTT DATA Corporation 37
  • 38.
    イベントの指定 perf では、1回の実⾏行行ごとに単⼀一のもしくは、複数のイベント指定が可能で ある。以下のように、-‐‑‒eオプションに続いて、イベント名を記述する。 n 単⼀一イベント指定 # perf stat -‐‑‒e cycles dd if=/dev/zero of=/dev/null count=100000 n 複数イベント指定 # perf stat -‐‑‒e cycles:uk –e faults dd if=/dev/zero of=/dev/null count=100000 Copyright © 2012 NTT DATA Corporation 38
  • 39.
    7. perfを使ってみよう Copyright© 2012 NTT DATA Corporation 39
  • 40.
    perf stat perfstatは、指定したコマンドのパフォーマンスカウンタの値を表⽰示できる。 perf record/reportと違い、指定したコマンドの総合的な統計情報を得るこ とが可能である。 n こんな時に便便利利 ̶— あるコマンドについて、総合的な(複数のイベントにまたがった)性能測 定情報が知りたい。 ̶— 性能の悪い処理理について、何が原因なのか知りたい。 ̶— 性能改善(暫定対処、本格対処)を⾏行行うにあたっての数値⽬目標を出したい。 Copyright © 2012 NTT DATA Corporation 40
  • 41.
    perf stat 〜~オプション § 代表的なオプション コマンド説明 -‐‑‒eイベントを指定する。 -‐‑‒pプロセスIDを指定する。 -‐‑‒tスレッドIDを指定する。 -‐‑‒a全CPU上のプロセスを指定する。 -‐‑‒C特定のCPU上のプロセスを指定する。 -‐‑‒B計測結果にカンマを⼊入れて表⽰示する。(ex.1,000) Copyright © 2012 NTT DATA Corporation 41
  • 42.
    perf stat 〜~実⾏行行例例 n perf stat の実⾏行行例例を以下に⽰示す。 # perf stat -‐‑‒B dd if=/dev/zero of=/dev/null count=1000000 1000000+0 レコード⼊入⼒力力 1000000+0 レコード出⼒力力 512000000 バイト (512 MB) コピーされました、 0.433087 秒、 1.2 GB/秒 Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 436.626492 task-‐‑‒clock # 0.957 CPUs utilized 24 context-‐‑‒switches # 0.000 M/sec 0 CPU-‐‑‒migrations # 0.000 M/sec 252 page-‐‑‒faults # 0.001 M/sec not supported cycles not supported stalled-‐‑‒cycles-‐‑‒frontend not supported stalled-‐‑‒cycles-‐‑‒backend not supported instructions not supported branches not supported branch-‐‑‒misses 0.456183302 seconds time elapsed ※ 特にイベント指定しなければ、 perf stat は上記のイベントの集計をする Copyright © 2012 NTT DATA Corporation 42
  • 43.
    perf top perftopは、リアルタイムでのプロファイリングが可能にするコマンドであ る。Linuxコマンドの top のように動的にシステム監視を⾏行行うことができる。 n こんな時に便便利利 ̶— システム全体のプロファイリングを⾏行行いたい。 ̶— リアルタイムで監視を⾏行行いたい。 Copyright © 2012 NTT DATA Corporation 43
  • 44.
    perf top〜~使⽤用例例 nperf topの実⾏行行例例を以下に⽰示す。 # perf top Copyright © 2012 NTT DATA Corporation 44
  • 45.
    perf top〜~オプション §代表的なオプション コマンド説明 -‐‑‒eイベントを指定する。 -‐‑‒pプロセスIDを指定する。 -‐‑‒tスレッドIDを指定する。 -‐‑‒a全CPU上のプロセスを指定する。 -‐‑‒C特定のCPU上のプロセスを指定する。 Copyright © 2012 NTT DATA Corporation 45
  • 46.
    perf record perf report perf recordは、イベントの記録を⾏行行う。記録したデータは、データファイル (デフォルト名はperf.data)として保存される。そのデータファイルは、 perf reportで⾒見見ることができる。 n こんな時に便便利利 ̶— あるコマンドについての動作を詳細に記録したい。 ̶— 怪しい処理理について、詳細に解析したい。 ̶— 性能の悪い処理理について、何が原因なのか知りたい。 Copyright © 2012 NTT DATA Corporation 46
  • 47.
    perf report〜~オプション §代表的なオプション コマンド説明 -‐‑‒eイベントを指定する。 -‐‑‒o出⼒力力ファイル名を指定する(デフォルトは”perf.data”) -‐‑‒pプロセスIDを指定する。 -‐‑‒tスレッドIDを指定する。 -‐‑‒a全CPU上のプロセスを指定する。 -‐‑‒C特定のCPU上のプロセスを指定する。 Copyright © 2012 NTT DATA Corporation 47
  • 48.
    perf record〜~オプション §代表的なオプション コマンド説明 -‐‑‒i⼊入⼒力力ファイル名を指定する(⼊入⼒力力しないとカレンとディレクトリ の”perf.data”を⼊入⼒力力ファイルとする) -‐‑‒spidなどでソートする。 Copyright © 2012 NTT DATA Corporation 48
  • 49.
    perf record perf report 〜~使⽤用例例 n perf recordの実⾏行行例例を以下に⽰示す。 # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s stress: info: [5843] dispatching hogs: 4 cpu, 2 io, 2 vm, 0 hdd stress: info: [5843] successful run completed in 10s [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.247 MB perf.data (~∼10775 samples) ] # ls perf.data Copyright © 2012 NTT DATA Corporation 49
  • 50.
    perf record perf report 〜~使⽤用例例 n perf reportの実⾏行行例例を以下に⽰示す。 オーバヘッドコマンドオブジェクト名シンボル名 Copyright © 2012 NTT DATA Corporation 50
  • 51.
    perf record perf report 〜~Tips n perf recoerdで得られるデータファイル(perf.data)は、同名のファイルが あっても、上書きされずに、古いファイルを”perf.data.old”として対⽐比して くれる。ただし、”perf.data.old”までは退避処理理をしてくれないので注意。 # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s stress: info: [5843] dispatching hogs: 4 cpu, 2 io, 2 vm, 0 hdd stress: info: [5843] successful run completed in 10s [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.247 MB perf.data (~∼10775 samples) ] # ls perf.data # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s : : # ls perf.data perf.data.old # perf record -‐‑‒e cpu-‐‑‒clock stress -‐‑‒c 4 -‐‑‒i 2 -‐‑‒m 2 -‐‑‒-‐‑‒timeout 10s : : # ls perf.data perf.data.old Copyright © 2012 NTT DATA Corporation 51
  • 52.
    8. まとめ Copyright© 2012 NTT DATA Corporation 52
  • 53.
    まとめ n perfの概要 n perfの導⼊入、使い⽅方 n perfの各種コマンドについて Copyright © 2012 NTT DATA Corporation 53
  • 54.
    後編について n プロファイリングのネタ Copyright © 2012 NTT DATA Corporation 54
  • 55.
    Copyright © 2011NTT DATA Corporation Copyright © 2012 NTT DATA Corporation