Linux でカーネルのパフォーマンスカウンターが有効かどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux でカーネルパフォーマンスカウンターがアクティブかどうかを確認する方法を学びます。perf stat コマンドを使用してコマンド実行時のパフォーマンスカウンターを測定する方法、/sys/kernel ファイルシステム内のパフォーマンスカウンターの設定を検証する方法、および dmesg を使用してパフォーマンスカウンターに関連するメッセージを含むカーネルログを調査する方法を探索します。この実践的な経験を通じて、Linux システムのパフォーマンスモニタリングの状態を診断し理解するスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/sleep("Execution Delaying") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/sleep -.-> lab-558797{{"Linux でカーネルのパフォーマンスカウンターが有効かどうかを確認する方法"}} linux/ls -.-> lab-558797{{"Linux でカーネルのパフォーマンスカウンターが有効かどうかを確認する方法"}} linux/cat -.-> lab-558797{{"Linux でカーネルのパフォーマンスカウンターが有効かどうかを確認する方法"}} linux/cd -.-> lab-558797{{"Linux でカーネルのパフォーマンスカウンターが有効かどうかを確認する方法"}} linux/grep -.-> lab-558797{{"Linux でカーネルのパフォーマンスカウンターが有効かどうかを確認する方法"}} end

perf stat でカウンターを確認する

このステップでは、perf stat コマンドを使用してパフォーマンスカウンターを測定する方法を学びます。パフォーマンスカウンターは、CPU 内で発生する特定のイベント(実行された命令の数、キャッシュミス、分岐予測など)をカウントする特殊なハードウェアレジスタです。

perf ツールは、Linux でのパフォーマンス分析に使用される強力なコマンドラインユーティリティです。perf stat は、コマンドを実行し、そのコマンドの実行に関するパフォーマンスカウンターの統計情報を収集するために使用されます。

まずは、簡単なコマンドを実行してそのパフォーマンスカウンターを観察してみましょう。ディレクトリの内容を一覧表示する ls コマンドを使用します。

まだターミナルを開いていない場合は、開いてください。デスクトップの左側にある Xfce Terminal アイコンを見つけることができます。

次に、以下のコマンドを入力して Enter キーを押します。

perf stat ls

以下のような出力が表示されるはずです。

 Performance counter stats for 'ls':

          <placeholder>      task-clock (msec)         ##    <placeholder> CPUs utilized
          <placeholder>      context-switches          ##    <placeholder> /sec
          <placeholder>      cpu-migrations            ##    <placeholder> /sec
          <placeholder>      page-faults               ##    <placeholder> /sec
          <placeholder>      cycles                    ##    <placeholder> GHz
          <placeholder>      instructions              ##    <placeholder>  insns per cycle
          <placeholder>      branches                  ##    <placeholder> % of all instructions
          <placeholder>      branch-misses             ##    <placeholder> % of all branches

          <placeholder> msec task-clock                ##    <placeholder> CPUs utilized

正確な数値やイベントは、システムや具体的な実行状況によって異なる場合がありますが、ls コマンドの実行中のパフォーマンスイベントとそのカウントのリストが表示されるはずです。

よく見られるイベントには以下のようなものがあります。

  • task-clock: タスクが CPU 上で実行されていた合計時間。
  • cycles: 消費された CPU サイクルの数。
  • instructions: 実行された命令の数。
  • branch-misses: 分岐予測が誤った回数。

これらのカウンターを理解することで、コードやシステムのパフォーマンスのボトルネックを特定するのに役立ちます。

より複雑なコマンドやスクリプトに対して perf stat を実行し、そのパフォーマンスを分析することもできます。

たとえば、簡単な sleep コマンドに対して perf stat を実行してみましょう。

perf stat sleep 1

これにより、システムが 1 秒間スリープしている間のパフォーマンスカウンターが測定されます。出力には、sleep プロセスのカウンターが表示されます。

異なるコマンドに対して perf stat を実行し、カウンターがどのように変化するかを実験してみてください。

Continue をクリックして次のステップに進みます。

/sys/kernel でカウンター設定を検証する

このステップでは、Linux カーネルの /sys ファイルシステムにおいてパフォーマンスカウンターの設定がどのように公開されているかを探索します。/sys ファイルシステムは、カーネルのデータ構造に対するインターフェースを提供し、カーネルパラメータの検査や場合によっては変更を可能にします。

特権のないユーザーが生のパフォーマンスカウンターイベントにアクセスできるかどうかなどのパフォーマンスカウンターの設定は、多くの場合 /sys/kernel/perf_event 内のファイルを通じて制御されます。

関連するディレクトリに移動し、設定ファイルを調査してみましょう。

まず、cd コマンドを使用して現在のディレクトリを /sys/kernel/perf_event に変更します。デフォルトのディレクトリは ~/project であることを忘れないでください。したがって、絶対パスを使用する必要があります。

以下のコマンドを入力して Enter キーを押します。

cd /sys/kernel/perf_event

これで /sys/kernel/perf_event ディレクトリに移動しました。ls コマンドを使用してこのディレクトリ内のファイルを表示できます。

ls

以下のようなファイルのリストが表示されるはずです。

kptr_restrict  perf_event_paranoid  sysfs_deprecated

私たちが関心を持っているファイルは perf_event_paranoid です。このファイルは、特権のないユーザーがパフォーマンスイベントにアクセスできるレベルを制御します。値が低いほど制限が少なく(アクセス権が多く)、値が高いほど制限が多く(アクセス権が少なく)なります。

cat コマンドを使用してこのファイルの内容を表示してみましょう。

cat perf_event_paranoid

出力は通常 -1 から 2 の間の単一の数字になります。

<number>

異なる値の一般的な意味は以下の通りです。

  • -1: すべてのユーザーがすべての perf 機能を使用できます。
  • 0: すべてのユーザーがプロセスごとおよび CPU ごとの測定に perf を使用できます。
  • 1: 特権ユーザー(root など)のみがプロセスごとおよび CPU ごとの測定に perf を使用できます。
  • 2: 特権ユーザーのみがプロセスごとの測定に perf を使用できます。

セキュリティ上の理由から、デフォルト値はしばしば 2 に設定されており、特権のないユーザーがパフォーマンスカウンターを使って他のプロセスに関する情報を取得するのを防いでいます。

このファイルを理解することで、システムがパフォーマンスモニタリングへのアクセスに関してどのように設定されているかを確認できます。

Continue をクリックして次に進みます。

dmesg でカウンターログを調査する

このステップでは、dmesg コマンドを使用してカーネルメッセージを表示する方法を学びます。カーネルメッセージには、時にパフォーマンスカウンターまたは perf イベントに関連する情報が含まれることがあります。dmesg は、カーネルのリングバッファメッセージを表示するコマンドです。これらのメッセージは、起動時および実行時にカーネルによって生成され、デバッグやシステム分析に役立つ貴重な情報を含むことがあります。

perf 自体は通常、統計情報を直接ターミナルに出力しますが、カーネルがパフォーマンスモニタリングハードウェアとやり取りする際の情報や関連する問題は、カーネルのリングバッファに記録されることがあります。

カーネルメッセージを表示するには、dmesg コマンドを使用します。

dmesg

これにより、カーネルのリングバッファからのすべてのメッセージがターミナルに大量に出力される可能性があります。

perf またはパフォーマンスカウンターに特に関連するメッセージを見つけるには、dmesg の出力を grep コマンドにパイプで渡すことができます。grep は、パターンを使用してテキストを検索する強力なツールです。

「perf」という単語を含むメッセージを検索してみましょう。

dmesg | grep perf

このコマンドは以下のように動作します。

  • dmesg: カーネルメッセージを出力します。
  • |: これはパイプで、左側のコマンドの出力を右側のコマンドの入力として送ります。
  • grep perf: 入力から「perf」という単語を含む行を検索します。

以下のような出力が表示されるかもしれません(最近のカーネルイベントによっては何も表示されない場合もあります)。

[<placeholder>] perf: interrupt took too long (<placeholder> > <placeholder> ms), lowering kernel.perf_event_paranoid to <placeholder>

この例のメッセージは、パフォーマンス割り込みが長時間かかったことを示しており、カーネルが perf_event_paranoid 設定(前のステップで見たもの)を制限の少ない値に自動的に調整して、問題を軽減しようとしています。

「performance」や「counter」などの他の関連用語も検索することができます。

dmesg | grep performance
dmesg | grep counter

dmesg の出力を調査することは、パフォーマンスモニタリングに関連する問題を診断したり、カーネルがパフォーマンスカウンターハードウェアとどのようにやり取りしているかを理解したりするのに役立ちます。

Continue をクリックしてこの実験を完了します。

まとめ

この実験では、Linux でカーネルのパフォーマンスカウンターが有効かどうかを確認する方法を学びました。最初に perf stat コマンドを使用して、ls のような単純なコマンドのパフォーマンスカウンターを測定し、さまざまなパフォーマンスイベントの出力とそのカウントを観察しました。これにより、パフォーマンス分析における perf ツールの基本的な機能が示されました。

その後、この実験では /sys/kernel ファイルシステム内のパフォーマンスカウンターの設定を検証し、dmesg の出力からカウンター関連のログを調査する手順を案内しました。これらの手順により、システムがカーネルのパフォーマンスカウンターをサポートしているかどうか、およびそれがアクティブな状態かどうかを確認する方法が提供され、perf stat コマンド以外の方法でその可用性を評価することができます。