oprofile使用概要

3208 ワード

Oprofile使用
1紹介
Oprofileはlinux上の性能モニタリングツールであり、CPUハードウェアが提供する性能カウンタを通じてイベントをサンプリングし、コードレベルからプログラムの性能消費状況を分析し、プログラムの性能の問題点を探し出す.
2 oprofileインストール
RHEL6.8 GAにはインストールパッケージが直接提供されており、yumソースを配置して直接インストールすればよい.
yum install oprofile
3 oprofile使用
  • 検出イベント
  • を設定する.
    opcontrol --event=::::
    各フィールドの意味は次のとおりです.
    event-name
    イベント名、例えばCPU_CLK_UNHALTED、サポートされているイベントリストはopcontrol--list-eventsコマンドでリストできます
    sample-rate
    1回のサンプリングをトリガーするイベントカウント値(100000など)
    unit-mask
    ハードウェアユニットマスク、例えば0 x 0 F
    kernel
    カーネルをモニタリングするかどうか、0または1の値を取る
    user
    ユーザースペースをモニタリングするかどうか、0または1の値を取る
    実測事例:
    opcontrol --event=CPU_CLK_UNHALTED:6000:0 x 00:00:0:1#core cycleに対してprofileを行う
  • 検出開始
  • opcontrol--init#ロードモジュール
    opcontrol--reset#現在のセッションのデータを消去
    opcontrol--start#profilingを開始
    注意:opcontrol–startが間違っている場合は、次のコマンドで解決できます.
    opcontrol --deinit
    echo 0 >/proc/sys/kernel/nmi_watchdog
  • は、検出データ
  • を保存する.
    プログラム業務の実行が完了した後、以下のコマンドを使用して監視データをダンプします.
    opcontrol--dump#収集したデータをファイルに書き込む
  • 検出停止
  • opcontrol–stop#profilingを停止
    opcontrol–shutdown#デーモンプロセスを閉じるoprofiled
    opcontrol–deinit#アンインストールモジュール
    4 oprofileその他の使い方
    イベントのモニタリングに加えて、oprofileでは以下の使用が可能です.
  • カーネルファイル
  • を監視するかどうか
    カーネルをモニタリングする場合は、カーネルのファイルパスを指定する必要があります.fileがカーネルファイルのフルパスである次のコマンドを使用します.
    opcontrol --vmlinux=file
    カーネルのパフォーマンスモニタリングが不要な場合は、ここで直接--no-vmlinuxパラメータを使用します.
    opcontrol --no-vmlinux
  • モニタデータ分離方式
  • を設ける.
    opcontrol --separate=
    いくつかのパラメータがあります.
    none
    do not separate the profiles (default)
    library
    generate per-application profiles for libraries
    kernel
    generate per-application profiles for the kernel and kernel modules
    all
    generate per-application profiles for libraries and per-application profiles for the kernel and kernel modules
    例:
    Opcontrol --separate=library
  • oprofileより多くの使い方opcontrol–help
  • を参照
    5性能データ分析
    データのダンプを監視すると、opreportopannotateのコマンドでパフォーマンスの消費状況を確認できます.
    1)各モジュール全体の性能消耗状況を表示する
    opreport
    2)各関数の性能消耗状況を表示する
    opreport -l
    3)コードレベルのパフォーマンスメッセージの表示
    opannotate -s
    6スクリプトの例以下のスクリプトは、以前のテスト中に一時的に書かれたもので、採集の考え方は参考になります.
    LOGFILE="/tmp/OProfile_LOG"
    DURATION=600
    echo "start OProfile ($DURATION s)"
    echo "set up OProfile"
    opcontrol --deinit 2>> $LOGFILE  --   
    modprobe oprofile timer=1  
    opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux  --     vmlinux
    opcontrol -c 0
    
    opcontrol –reset  --       
    echo "start OProfile" 
    opcontrol --start >> $LOGFILE 2>&1   --     
    sleep $DURATION
    echo "shutdown OProfile"
    opcontrol --shutdown >> $LOGFILE 2>&1  --     
    
    echo "report OProfile"
    opreport -l > $OUTDIR/opreport_-l.txt 2>> $LOGFILE  --            
    
    echo "oprofile temp data size: $(du -sh /var/lib/oprofile)"
    echo "cleanup OProfile"
    opcontrol --reset
    opcontrol --deinit 2>> $LOGFILE
    echo "finish OProfile"
    
    

    参考文献
  • http://hutaow.com/blog/2013/12/29/performance-analysis-with-oprofile/

  • 注:転載する必要がある場合は、出典を表示してください.