Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

6,259 views

Published on

  • Be the first to comment

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

  1. 1. perfを使ったPostgreSQLの解析 〜~前編 2012年年9⽉月29⽇日(⼟土)Copyright © 2012 NTT DATA Corporation
  2. 2. Agenda u 前編 1.  はじめに 2.  プロファイリングとは? 3.  perfとは 4.  perfの仕組み 5.  perfと他のパフォーマンス解析ツールとの⽐比較 6.  perfの導⼊入と使い⽅方 7.  perfを使ってみよう 8.  まとめCopyright © 2012NTT DATA Corporation 2
  3. 3. Agenda u 後編 1.  前編の復復習 2.  perfを使ったプロファイリングの流流れ 3.  PostgreSQLをプロファイリングしてみよう 4.  perfの使いどころ 5.  まとめCopyright © 2012NTT DATA Corporation 3
  4. 4. 1.  はじめにCopyright © 2012 NTT DATA Corporation 4
  5. 5. あらためまして⾃自⼰己紹介 ⽒氏名 所属 NTTデータ   江川  ⼤大地 基盤システム事業本部 Twitter システム⽅方式技術ビジネスユニット @daiti0804 やっていたこと 年年代 やったこと              -‐‑‒2009 歴史のお勉強(⼤大学時代) 2009-‐‑‒2011 Webシステム開発(Javaなど) 2011-‐‑‒現在 PostgreSQL関係 近況 沖縄に⾏行行ってました。Copyright © 2011 NTT© 2012 CORPORATION Copyright DATA NTT DATA Corporation 5
  6. 6. 本⽇日のお題 お題 perfを使ったPostgreSQLの解析(前編) 今⽇日説明 perfの仕組みや使い⽅方 することCopyright © 2012 NTT DATA Corporation 6
  7. 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. 8. 2.  プロファイリングとは?Copyright © 2012 NTT DATA Corporation 8
  9. 9. トラブルシューティングとは?障害発⽣生 解析 対処 現状把握 切切り分け 原因特定 暫定対処 根本解決 運⽤用中に取得し 運⽤用中に取得し 問題がなぜ起き 障害を避けるた 同様の障害が発 た情報や顧客か た情報や、シス たのか、どう めに暫定的な対 ⽣生しないように らのヒアリング テムのログ、シ いった処理理が原 処を実施する。 根本的な対処を を通して、実際 ステムが出すそ 因かを特定する。 ⾏行行う。 に何が起きてい の他の情報を元 るのかを把握す に、どこに問題 る。 があるのかを特 定する。Copyright © 2012 NTT DATA Corporation 9
  10. 10. トラブルシューティングとは?障害発⽣生 解析 対処 現状把握 切切り分け 原因特定 暫定対処 根本解決 運⽤用中に取得し 運⽤用中に取得し 問題がなぜ起き 障害を避けるた 同様の障害が発 た情報や顧客か た情報や、シス たのか、どう めに暫定的な対 ⽣生しないように らのヒアリング テムのログ、シ いった処理理が原 処を実施する。 根本的な対処を を通して、実際 ステムが出すそ 因かを特定する。 ⾏行行う。 に何が起きてい の他の情報を元 るのかを把握す に、どこに問題 る。 があるのかを特 定する。 perfを使うタイミングCopyright © 2012 NTT DATA Corporation 10
  11. 11. 解析とは?n 解析とは ̶— ログやエラーメッセージなどシステムから得られる情報から、何が起きている かを把握し、どこに問題があるのかを特定し、その原因を突き⽌止めること。n なぜ解析をするのか ̶— やみくもに対策を打っても、弾があたらないため。原因を特定することで、適 切切な対策を打つために実施する。n 解析⼿手法の例例 ̶— ログ解析 ̶— プロファイリングCopyright © 2012 NTT DATA Corporation 11
  12. 12. プロファイリングとはn プロファイリングとは ̶— プログラムのどの部分がボトルネックとなって処理理に時間がかかっているのか など、障害の原因を特定すること。Copyright © 2012 NTT DATA Corporation 12
  13. 13. 3.  perfとはCopyright © 2012 NTT DATA Corporation 13
  14. 14. perfとはn   perf(Performance  Counters  for  Linux)とは? -  Linuxカーネル上の統合パフォーマンスツール -  イベント数計測にCPUに内蔵されているレジスタを使⽤用 -  perf  tools  (ツールの集合体、サブコマンド群)n   イベントとは?? -  perfの計測対象Copyright © 2012 NTT DATA Corporation 14
  15. 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. 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  profilerRoberto  A.  Vitillo  (ローレンス・バークレー国⽴立立研究所)の“Future  computing  in  particle  physics”カンファレンスにおける講演資料料「PERFORMANCE  TOOLS  DEVELOPMENTS」  (2011年年6⽉月16⽇日)より。Copyright © 2012 NTT DATA Corporation 16
  17. 17. プロファイラとしてありたい姿§ 低いオーバヘッド -  解析対象のシステムは既に何らかのオーバヘッドが発⽣生している ことが多い。そこにさらに負荷がかかるツールを使おうとしても、 ツールが動かなかったり、システムがダウンする可能性もある。§ 多くの情報 -  トラブルの原因はいっぱい考えられるから。§ ⾒見見やすい表⽰示(多くの情報の中から取捨選択が可能) -  なにがどう書いてあるのか分からないと、トラブルの原因が表⽰示 されていても⾒見見落落とす可能性もある。Copyright © 2012 NTT DATA Corporation 17
  18. 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. 19. 4.  perfの仕組みCopyright © 2012 NTT DATA Corporation 19
  20. 20. perfのフロー  〜~イベントの指定 ユーザ #  perf  stat  XX“perf_̲event_̲open”(システムコール)で処理理を依頼 カーネル Software  eventの場合 カウンタ Hardware  event の場合 レジスタに取得するイベントを設定 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタCopyright © 2012 NTT DATA Corporation 20
  21. 21. perfのフロー  〜~データの保存 ユーザ #  perf  stat  XX カーネル Software  eventの場合 カウンタ Hardware  event の場合 レジスタから値を取得。 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタCopyright © 2012 NTT DATA Corporation 21
  22. 22. perfのフロー  〜~データの保存 ユーザ #  perf  stat  XX 加⼯工して値を返す。 カーネル カウンタ レジスタから値を取得。 ハードウェア(レジスタ) イベント指定レジスタ カウンタレジスタCopyright © 2012 NTT DATA Corporation 22
  23. 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. 24. 5.  perfと他のパフォーマンス解析ツールとの⽐比較Copyright © 2012 NTT DATA Corporation 24
  25. 25. 解析ツールってどんなものがある?§ 解析ツール -  Oprofile -  ftrace -  System  tap -  …  Copyright © 2012 NTT DATA Corporation 25
  26. 26. 他のツールとの⽐比較 perf Oprofile SystemTap オーバヘッド 低 低 スクリプト次第 (漏漏れなく追跡する) 情報量量 多 中 多 情報の取捨選択 可能 可能 可能Copyright © 2012 NTT DATA Corporation 26
  27. 27. 他のツールとの⽐比較 perf Oprofile SystemTap オーバヘッド 低 低 ⾼高 (漏漏れなく追跡する) 情報の取捨選択 可能 可能 不不可能 動的監視 可能 不不可能 可能 指向性 中 低 ⾼高 (システム全体も処理理 (システム全体のプロ (アドホックなプロ 個別のプロファイリ ファイリング向き) ファイリング向き) ングも可能) 危険性 低 低 ⾼高 (スクリプト暴暴⾛走の可 能性)Copyright © 2012 NTT DATA Corporation 27
  28. 28. 6.  perfの導⼊入と使い⽅方Copyright © 2012 NTT DATA Corporation 28
  29. 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  AirCopyright © 2012 NTT DATA Corporation 29
  30. 30. 【参考】perfがサポートされているかの確認 §  カーネルバージョンの確認 -  Linux  kernel  2.6以上でサポートされている ※コマンドによっては、より新しいバージョンのみにしか対応していないものもある。 §  コンフィギュアオプションの確認 -  CONFIG_̲PERF_̲xxxx  というオプションが   有効になっていれば、perf  がサポートされている。 ※コンフィギュアオプションの確認⽅方法 /boot配下の”  config-‐‑‒<カーネルバージョン>-‐‑‒generic-‐‑‒pae”ファイルを確認。Copyright © 2012NTT DATA Corporation 30
  31. 31. perfの導⼊入 n  perfをインストールするには、以下の2つの⽅方法がある。 1.  apt-‐‑‒get,  yumを使う⽅方法 2.  ソースからインストールする⽅方法Copyright © 2012 NTT DATA Corporation 31
  32. 32. perfの導⼊入〜~1.apt-‐‑‒getによるインストール §  準備 -  linux-‐‑‒tools-‐‑‒commonが必要Copyright © 2012 NTT DATA Corporation 32
  33. 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. 34. perfの導⼊入〜~2.ソースからのインストール §  準備 -  libdw-‐‑‒dev  or  elfutils-‐‑‒libelf-‐‑‒devel  が必要Copyright © 2012 NTT DATA Corporation 34
  35. 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  installCopyright © 2012 NTT DATA Corporation 35
  36. 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. 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. 38. イベントの指定perf  では、1回の実⾏行行ごとに単⼀一のもしくは、複数のイベント指定が可能である。以下のように、-‐‑‒eオプションに続いて、イベント名を記述する。n 単⼀一イベント指定#  perf  stat    -‐‑‒e  cycles  dd  if=/dev/zero  of=/dev/null  count=100000n 複数イベント指定#  perf  stat  -‐‑‒e  cycles:uk  –e  faults    dd  if=/dev/zero  of=/dev/null  count=100000Copyright © 2012 NTT DATA Corporation 38
  39. 39. 7.  perfを使ってみようCopyright © 2012 NTT DATA Corporation 39
  40. 40. perf  statperf  statは、指定したコマンドのパフォーマンスカウンタの値を表⽰示できる。perf  record/reportと違い、指定したコマンドの総合的な統計情報を得ることが可能である。n  こんな時に便便利利 ̶—  あるコマンドについて、総合的な(複数のイベントにまたがった)性能測 定情報が知りたい。 ̶—  性能の悪い処理理について、何が原因なのか知りたい。 ̶—  性能改善(暫定対処、本格対処)を⾏行行うにあたっての数値⽬目標を出したい。Copyright © 2012 NTT DATA Corporation 40
  41. 41. perf  stat  〜~オプション§ 代表的なオプション コマンド 説明 -‐‑‒e イベントを指定する。 -‐‑‒p プロセスIDを指定する。 -‐‑‒t スレッドIDを指定する。 -‐‑‒a 全CPU上のプロセスを指定する。 -‐‑‒C 特定のCPU上のプロセスを指定する。 -‐‑‒B 計測結果にカンマを⼊入れて表⽰示する。(ex.1,000)Copyright © 2012 NTT DATA Corporation 41
  42. 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. 43. perf  topperf  topは、リアルタイムでのプロファイリングが可能にするコマンドである。Linuxコマンドの  top  のように動的にシステム監視を⾏行行うことができる。n  こんな時に便便利利 ̶—  システム全体のプロファイリングを⾏行行いたい。 ̶—  リアルタイムで監視を⾏行行いたい。Copyright © 2012 NTT DATA Corporation 43
  44. 44. perf  top〜~使⽤用例例 n  perf  topの実⾏行行例例を以下に⽰示す。 #  perf  topCopyright © 2012 NTT DATA Corporation 44
  45. 45. perf  top〜~オプション§ 代表的なオプション コマンド 説明 -‐‑‒e イベントを指定する。 -‐‑‒p プロセスIDを指定する。 -‐‑‒t スレッドIDを指定する。 -‐‑‒a 全CPU上のプロセスを指定する。 -‐‑‒C 特定のCPU上のプロセスを指定する。Copyright © 2012 NTT DATA Corporation 45
  46. 46. perf  record  &  perf  reportperf  recordは、イベントの記録を⾏行行う。記録したデータは、データファイル(デフォルト名はperf.data)として保存される。そのデータファイルは、perf  reportで⾒見見ることができる。n  こんな時に便便利利 ̶—  あるコマンドについての動作を詳細に記録したい。 ̶—  怪しい処理理について、詳細に解析したい。 ̶—  性能の悪い処理理について、何が原因なのか知りたい。Copyright © 2012 NTT DATA Corporation 46
  47. 47. perf  report〜~オプション§ 代表的なオプション コマンド 説明 -‐‑‒e イベントを指定する。 -‐‑‒o 出⼒力力ファイル名を指定する(デフォルトは”perf.data”) -‐‑‒p プロセスIDを指定する。 -‐‑‒t スレッドIDを指定する。 -‐‑‒a 全CPU上のプロセスを指定する。 -‐‑‒C 特定のCPU上のプロセスを指定する。Copyright © 2012 NTT DATA Corporation 47
  48. 48. perf  record〜~オプション§ 代表的なオプション コマンド 説明 -‐‑‒i ⼊入⼒力力ファイル名を指定する(⼊入⼒力力しないとカレンとディレクトリ の”perf.data”を⼊入⼒力力ファイルとする) -‐‑‒s pidなどでソートする。Copyright © 2012 NTT DATA Corporation 48
  49. 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.dataCopyright © 2012 NTT DATA Corporation 49
  50. 50. perf  record  &  perf  report  〜~使⽤用例例 n  perf  reportの実⾏行行例例を以下に⽰示す。オーバヘッド コマンドオブジェクト名 シンボル名 Copyright © 2012 NTT DATA Corporation 50
  51. 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.oldCopyright © 2012 NTT DATA Corporation 51
  52. 52. 8.  まとめCopyright © 2012 NTT DATA Corporation 52
  53. 53. まとめn perfの概要n perfの導⼊入、使い⽅方n perfの各種コマンドについてCopyright © 2012 NTT DATA Corporation 53
  54. 54. 後編についてn プロファイリングのネタCopyright © 2012 NTT DATA Corporation 54
  55. 55. Copyright © 2011 NTT DATA CorporationCopyright © 2012 NTT DATA Corporation

×