コンピューティングにおけるパフォーマンスについて話すとき、私たちはリソースとそれらが特定の時間内に完了できるタスクとの関係を指します。

企業間の激しい競争の中で、私たちが持っているものを最大限に活用する方法を学ぶことが重要です。ハードウェアやソフトウェアリソースの無駄や、それらをより効率的に使用する方法を知らないことは、私たちがトップのパフォーマンスを発揮したい場合に許すことのできない損失となります。
同時に、持っているリソースを持続的に使用することで修復不能な損傷をもたらす限界まで持っていかないよう注意する必要があります。
この記事では、比較的新しいパフォーマンス分析ツールを紹介し、ハードウェアやアプリケーションを含むLinuxシステムを監視するために使用できるヒントを提供します。これにより、リソースや自分自身のエネルギーを無駄にすることなく、望ましい結果を生産できるようになります。
LinuxでのPerfの紹介とインストール
Linuxには、perfという便利なパフォーマンスモニタリングおよび分析ツールがあります。では、既におなじみの他のツールと何が違うのでしょうか?
その答えは、perfがCPU内のパフォーマンスモニタリングユニットへのアクセスを提供し、ハードウェアの挙動とその関連イベントを詳しく見ることができるということです。
次に、収集されたデータからソフトウェアイベントを監視し、レポートを作成することもできます。
perfを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を入力する必要があるかもしれません。
perfは、VirtualBoxやVMWare上のゲストで実行されると、他の仮想化技術(KVMやXENなど)がハードウェアカウンタへのアクセスを許可しているのとは異なり、不完全な結果を返すことがあります。
さらに、一部のperfコマンドはデフォルトでrootに制限されている場合があり、次のようにして(システムが再起動されるまで)無効にできます:
# echo 0 > /proc/sys/kernel/perf_event_paranoid
paranoidモードを永久に無効にする必要がある場合は、/etc/sysctl.confファイル内の次の設定を更新してください。
kernel.perf_event_paranoid = 0
サブコマンド
perfをインストールしたら、利用可能なサブコマンドのリストを確認するためにそのマニュアルページを参照できます(サブコマンドはシステムに特定のウィンドウを開く特別なオプションと考えることができます)。より良い結果を得るためには、perfをrootとしてまたはsudoを介して使用してください。
Perfリスト
(オプションなしで)perf listはすべてのシンボリックイベントタイプ(長いリスト)を返します。特定のカテゴリで利用可能なイベントのリストを表示したい場合は、カテゴリ名([hw|sw|cache|tracepoint|pmu|event_glob])に続いてperf listを使用してください。例:
Linuxで事前定義されたソフトウェアイベントのリストを表示:
# perf list sw

Perf stat
perf statはコマンドを実行し、そのコマンドの実行中にLinuxのパフォーマンス統計を収集します。私たちのシステムでddを実行すると何が起こるのでしょうか?
# perf stat dd if=/dev/zero of=test.iso bs=10M count=1

上記の統計には、他のことに加えて次のことが示されています:
- ddコマンドの実行にはCPUが21.812281ミリ秒かかりました。この数値を下記の「経過時間(秒)」の値(23.914596ミリ秒)で割ると、0.912(CPU利用率)が得られます。
- コマンドが実行されている間、15 のコンテキストスイッチ(プロセススイッチとも呼ばれる)は、CPU が 1 つのプロセス(またはスレッド)から別のプロセスに 15 回切り替わったことを示しています。
- 2 CPU マイグレーションは、2 コア CPU でワークロードがコア数に均等に分散されている場合の期待される結果です。
その間(21.812281 ミリ秒)、消費された CPU サイクルの総数は 62,025,623 であり、これは 0.021812281 秒で割ると 2.843 GHz になります。 - サイクルの数を総命令数で割ると、4.9 命令ごとのサイクル数になり、つまり各命令が平均してほぼ 5 CPU サイクルを完了することを意味します。これは、分岐と分岐ミス(以下参照)の数に一部起因するものと言えます。これらは CPU サイクルを無駄にしたり誤用したりする結果となります。
- コマンドが実行されると、合計 3,552,630 の分岐が発生しました。これはコード内の決定ポイントやループの CPU レベル表現です。分岐が多いほどパフォーマンスが低下します。これを補うため、すべての現代の CPU はコードのフローを予測しようとします。51,348 の分岐ミスは、予測機能が 1.45% の割合で誤っていたことを示しています。
同じ原則は、アプリケーションが実行されている間に統計情報を収集する際にも適用されます。必要なアプリケーションを起動し、適切な時間(あなた次第)経過した後に閉じると、perf が画面に統計情報を表示します。これらの統計情報を分析することで、潜在的な問題を特定できます。
Perf top
perf topはtopコマンドに似ていて、ほぼリアルタイムのシステムプロファイル(もしくはライブアナリシス)を表示します。
-a
オプションを使用するとすべての知られたイベントタイプを表示し、-e
オプションを使用するとperf listから返される特定のイベントカテゴリを選択できます:
すべてのサイクルイベントを表示します。
perf top -a
すべてのCPU時脈に関連するイベントを表示します。
perf top -e cpu-clock

上で示された出力の最初の列は、開始から現在までのサンプリングの割合を表し、関数のシンボルと共有オブジェクトに分群します。man perf-topにはより多くのオプションがあります。
Perf record
perf recordはコマンドを実行し、現在の作業ディレクトリ内に名前がperf.dataのファイルに统计データを保存します。perf statと同様に実行されます。
コマンドをperf recordと続けて入力します:
# perf record dd if=/dev/null of=test.iso bs=10M count=1

Perf report
perf reportはperf.dataに格納されたデータを性能レポートとして整形します:
# sudo perf report

上記すべてのサブコマンドには、以下のように呼び出すことができる独自のマニュアルページがあります:
# man perf-subcommand
subcommandは、list、stat、top、record、またはreportのいずれかです。これらは最もよく使用されるサブコマンドです。その他のサブコマンドはドキュメントに記載されています(リンクについては概要セクションを参照してください)。
概要
このガイドでは、Linuxのパフォーマンスモニタリングおよび分析ツールであるperfについて紹介しました。perfのドキュメントに精通することを強くお勧めします。ドキュメントはhttps://perf.wiki.kernel.orgで管理されています。
リソースの高い割合でリソースを消費しているアプリケーションが見つかった場合、ソースコードを変更するか、他の代替手段を使用することを検討することができます。
この記事についての質問や改善の提案がある場合は、コメントフォームを使用してお知らせください。
Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/