ウェブサイト検索

Perf - Linux 用のパフォーマンス監視および分析ツール


コンピューティングにおけるパフォーマンスについて語るとき、私たちはリソースと、リソースによって一定期間内に完了できるタスクとの関係を指します。

企業間で熾烈な競争が繰り広げられる現代においては、自分たちが持っているものを最大限に活用する方法を学ぶことが重要です。ハードウェアまたはソフトウェアのリソースの無駄、またはそれらをより効率的に使用する方法を知る能力の欠如は、ゲームのトップになりたいのであれば、最終的には許容できない損失になります。

同時に、私たちは資源を限界まで使い続けて、継続的な使用によって回復不能な損害がもたらされないように注意しなければなりません。

この記事では、比較的新しいパフォーマンス分析ツールを紹介し、ハードウェアやアプリケーションを含む Linux システムの監視に使用できるヒントを提供します。これは、リソースや自分自身のエネルギーを無駄にすることなく、望ましい結果を生み出すことができるように機能することを保証するのに役立ちます。

Linux での Perf の導入とインストール

とりわけ、Linux は便利なパフォーマンスと呼ばれるパフォーマンス監視および分析ツールを提供します。では、perf と、すでに使い慣れている他の有名なツールとの違いは何でしょうか?

答えは、パフォーマンスによって CPU のパフォーマンス監視ユニットへのアクセスが提供されるため、ハードウェアの動作とそれに関連するイベントを詳しく見ることができるからです。

さらに、ソフトウェア イベントを監視し、収集されたデータからレポートを作成することもできます。

次の方法で RPM ベースのディストリビューションにパフォーマンスをインストールできます。

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

Debian とその派生版:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

上記のコマンドの uname -r が実際のバージョン (私の場合は 3.2.0-23-generic) 以外の余分な文字列を返す場合は、 と入力する必要がある場合があります。 uname の出力を使用する代わりに、linux-tools-3.2.0-23 を使用します。

また、パフォーマンスは、VirtualBox または VMWare 上のゲストで実行すると、他の仮想化テクノロジ (KVM や XEN など) のようにハードウェア カウンターへのアクセスが許可されないため、不完全な結果が得られることに注意することが重要です。 。

さらに、一部のperf コマンドはデフォルトで root に制限されている場合があることに注意してください。これは、次の手順で (システムが再起動されるまで) 無効にできます。

echo 0 > /proc/sys/kernel/perf_event_paranoid

パラノイド モードを永続的に無効にする必要がある場合は、/etc/sysctl.conf ファイル内の次の設定を更新します。

kernel.perf_event_paranoid = 0

サブコマンド

perf をインストールしたら、マニュアル ページで使用可能なサブコマンドのリストを参照できます (サブコマンドは、システムに特定のウィンドウを開く特別なオプションと考えることができます)。最良のより完全な結果を得るには、root として、または sudo を介して perf を使用します。

パフォーマンスリスト

perf list (オプションなし) は、すべてのシンボリック イベント タイプ (長いリスト) を返します。特定のカテゴリで利用可能なイベントのリストを表示したい場合は、perf リストの後にカテゴリ名 ([hw|sw|cache|tracepoint|pmu|event_glob) を使用します。 ])、 のような:

Linux のソフトウェア事前定義イベントのリストを表示します。

perf list sw 

パフォーマンス統計

perf stat はコマンドを実行し、そのコマンドの実行中に Linux パフォーマンス統計を収集します。 dd を実行するとシステムで何が起こるでしょうか?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

上記の統計は、特に次のことを示しています。

  1. dd コマンドの実行には CPU が 21.812281 ミリ秒かかりました。この数値を以下の「経過時間」の値 (23.914596 ミリ秒) で割ると、0.912 となります (CPU 使用率)。
  2. コマンドの実行中に15 個のコンテキスト スイッチ (プロセス スイッチとも呼ばれます) は、CPU があるプロセス (またはスレッド) から別のプロセス (スレッド) に 15 回切り替えられたことを示します。
  3. 2 個の CPU 移行は、2 コア CPU でワークロードがコア数間で均等に分散される場合に予想される結果です。
    この間 (21.812281 ミリ秒) に消費された CPU サイクルの合計数は 62,025,623 で、これを 0.021812281 秒で割ると となります。 2.843GHz。
  4. サイクル数を合計命令数で割ると、 命令あたり4.9 サイクルになります。これは、各命令が完了するまでに (平均して) ほぼ 5 CPU サイクルかかったということになります。これは (少なくとも部分的には) 分岐と分岐ミス (以下を参照) の数のせいであり、最終的には CPU サイクルの無駄または誤用につながる可能性があります。
  5. コマンドが実行されると、 合計3,552,630 のブランチが発生しました。これは、コード内の決定点とループを CPU レベルで表現したものです。ブランチが増えると、パフォーマンスが低下します。これを補うために、最新の CPU はすべて、コードが実行するフローを予測しようとします。 51,348 件の分岐ミスは、予測機能が 1.45% の確率で間違っていたことを示しています。

同じ原則が、アプリケーションの実行中の統計の収集 (つまりプロファイリング) にも当てはまります。目的のアプリケーションを起動し、適切な時間が経過した後 (これはあなた次第です) 閉じるだけで、パフォーマンスが画面に統計情報を表示します。これらの統計を分析することで、潜在的な問題を特定できます。

パフォーマンストップ

perf top は、ほぼリアルタイムのシステム プロファイル (ライブ分析とも呼ばれます) を表示するという点で、top コマンドに似ています。

-a オプションを使用すると、既知のイベント タイプをすべて表示します。一方、-e オプションを使用すると、特定のイベント カテゴリ ( によって返されるもの) を選択できます。パフォーマンス リスト):

すべてのサイクルイベントを表示します。

perf top -a 

すべての CPU クロック関連イベントを表示します。

perf top -e cpu-clock 

上記の出力の最初の列は、関数シンボルと共有オブジェクトごとにグループ化された、実行の開始以降に取得されたサンプルの割合を表します。 マンパーフトップではさらに多くのオプションが利用可能です。

パフォーマンスレコード

perf レコードはコマンドを実行し、現在の作業ディレクトリ内の perf.data という名前のファイルに統計データを保存します。これはパフォーマンス統計と同様に実行されます。

パフォーマンス レコード」と入力し、続いてコマンドを入力します。

perf record dd if=/dev/null of=test.iso bs=10M count=1

パフォーマンスレポート

パフォーマンス レポートは、上記の perf.data で収集されたデータをパフォーマンス レポートにフォーマットします。

sudo perf report

上記のすべてのサブコマンドには、次のように呼び出すことができる専用のマニュアル ページがあります。

man perf-subcommand

サブコマンドは、リスト統計トップレコード、またはのいずれかです。 > 報告します。これらは最も頻繁に使用されるサブコマンドです。その他についてはドキュメントにリストされています (リンクについては「概要」セクションを参照してください)。

まとめ

このガイドでは、Linux 用のパフォーマンス監視および分析ツールであるperf について紹介しました。 https://perf.wiki.kernel.org で管理されているドキュメントに精通することを強くお勧めします。

高い割合のリソースを消費しているアプリケーションを見つけた場合は、ソース コードを変更するか、他の代替手段を使用することを検討してください。

この記事に関するご質問や改善のための提案がございましたら、ぜひお気軽にお問い合わせください。以下のコメントフォームを使用してお気軽にご連絡ください。