Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
perfを使ったPostgreSQLの解析
                                                          〜~前編

                                                      2012年年9⽉月29⽇日(⼟土)




Copyright © 2012 NTT DATA Corporation
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
あらためまして⾃自⼰己紹介

                        ⽒氏名                                       所属

                                                                 NTTデータ  
                江川  ⼤大地                                          基盤システム事業本部
                   Twitter                                       システム⽅方式技術ビジネスユニット
                @daiti0804

          やっていたこと

                                   年年代                           やったこと
                                       -‐‑‒2009   歴史のお勉強(⼤大学時代)
                         2009-‐‑‒2011             Webシステム開発(Javaなど)

                         2011-‐‑‒現在               PostgreSQL関係

                      近況

                                                    沖縄に⾏行行ってました。
Copyright © 2011 NTT© 2012 CORPORATION	
           Copyright DATA NTT DATA Corporation                                       5
本⽇日のお題



         お題                             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
他のツールとの⽐比較

                                        perf   Oprofile   SystemTap

        オーバヘッド                          低      低         スクリプト次第
                                                         (漏漏れなく追跡する)

        情報量量                            多      中         多


        情報の取捨選択                         可能     可能        可能




Copyright © 2012 NTT DATA Corporation                                  26
他のツールとの⽐比較

                                        perf          Oprofile      SystemTap

        オーバヘッド                          低             低            ⾼高
                                                                   (漏漏れなく追跡する)

        情報の取捨選択                         可能            可能           不不可能


        動的監視                            可能            不不可能         可能


        指向性                             中             低            ⾼高
                                        (システム全体も処理理   (システム全体のプロ   (アドホックなプロ
                                        個別のプロファイリ     ファイリング向き)    ファイリング向き)
                                        ングも可能)

        危険性                             低             低            ⾼高
                                                                   (スクリプト暴暴⾛走の可
                                                                   能性)




Copyright © 2012 NTT DATA Corporation                                             27
6.  perfの導⼊入と使い⽅方




Copyright © 2012 NTT DATA Corporation                       28
今回の講演に当たって使⽤用した環境
    ソフトウェア名                             バージョン               備考
    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
【参考】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  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
イベントの指定

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”を⼊入⼒力力ファイルとする)

        -‐‑‒s                           pidなどでソートする。




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

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
  • 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
  • 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
  • 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
  • 55. Copyright © 2011 NTT DATA Corporation Copyright © 2012 NTT DATA Corporation