Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
perfを使ったPostgreSQLの解析(前編)
•
12 likes
•
8,435 views
Daichi Egawa
Follow
1 of 55
Download now
Downloaded 59 times
More Related Content
perfを使ったPostgreSQLの解析(前編)
1.
perfを使ったPostgreSQLの解析
〜~前編 2012年年9⽉月29⽇日(⼟土) Copyright © 2012 NTT DATA Corporation
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.
あらためまして⾃自⼰己紹介
⽒氏名 所属 NTTデータ 江川 ⼤大地 基盤システム事業本部 Twitter システム⽅方式技術ビジネスユニット @daiti0804 やっていたこと 年年代 やったこと -‐‑‒2009 歴史のお勉強(⼤大学時代) 2009-‐‑‒2011 Webシステム開発(Javaなど) 2011-‐‑‒現在 PostgreSQL関係 近況 沖縄に⾏行行ってました。 Copyright © 2011 NTT© 2012 CORPORATION Copyright DATA NTT DATA Corporation 5
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(Performance
Counters for Linux)とは? - Linuxカーネル上の統合パフォーマンスツール - イベント数計測にCPUに内蔵されているレジスタを使⽤用 - perf tools (ツールの集合体、サブコマンド群) n イベントとは?? - perfの計測対象 Copyright © 2012 NTT DATA Corporation 14
15.
イベントの分類 分類
説明 具体例例 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
16.
プロファイラとしてありたい姿 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
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.
5. perfと他のパフォーマンス解析ツールとの⽐比較 Copyright ©
2012 NTT DATA Corporation 24
25.
解析ツールってどんなものがある? § 解析ツール
- Oprofile - ftrace - System tap - … Copyright © 2012 NTT DATA Corporation 25
26.
他のツールとの⽐比較
perf Oprofile SystemTap オーバヘッド 低 低 スクリプト次第 (漏漏れなく追跡する) 情報量量 多 中 多 情報の取捨選択 可能 可能 可能 Copyright © 2012 NTT DATA Corporation 26
27.
他のツールとの⽐比較
perf Oprofile SystemTap オーバヘッド 低 低 ⾼高 (漏漏れなく追跡する) 情報の取捨選択 可能 可能 不不可能 動的監視 可能 不不可能 可能 指向性 中 低 ⾼高 (システム全体も処理理 (システム全体のプロ (アドホックなプロ 個別のプロファイリ ファイリング向き) ファイリング向き) ングも可能) 危険性 低 低 ⾼高 (スクリプト暴暴⾛走の可 能性) Copyright © 2012 NTT DATA Corporation 27
28.
6. perfの導⼊入と使い⽅方 Copyright ©
2012 NTT DATA Corporation 28
29.
今回の講演に当たって使⽤用した環境
ソフトウェア名 バージョン 備考 Ubuntu 12.04 Linux kernel 3.2.0 VirtualBox 4.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 annotate perf recordで作成したperfのデータを読み込み、 関数で呼び出した命令令レベ ルのトレース結果を表⽰示する。 perf probe 新たに動的なトレースポイント(イベント)を定義する。 perf record イベントの記録を⾏行行う。 perf report perf recordで記録したイベントをプロンプトに表⽰示する。 perf script perf recordで作成したperfのデータを読み込み、 トレース結果を表⽰示する。 perf stat 引数に指定したコマンドのパフォーマンスカウンタの値を表⽰示する。 perf top Linuxコマンドの”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 perf statは、指定したコマンドのパフォーマンスカウンタの値を表⽰示できる。 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 perf topは、リアルタイムでのプロファイリングが可能にするコマンドであ る。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”を⼊入⼒力力ファイルとする) -‐‑‒s pidなどでソートする。 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 © 2011
NTT DATA Corporation Copyright © 2012 NTT DATA Corporation
Download