HOWTO · Linux
Cpuinfo から CPU フラグを読み取る
この記事では、Linux の cpuinfo のフラグについて説明します。
このページの内容
Linux は /proc/cpuinfo にプロセッサ情報を公開します。内容を表示して CPU フラグを探し、いくつかの例を通してシステムが何を報告しているかを確認できます。表示されるフィールドやフラグ名は、プロセッサ、アーキテクチャ、カーネル、および Linux が仮想マシン上で動作しているかどうかによって異なります。
/proc/cpuinfo を読む
次の例を実行します。
このセクションのコードと表示されるラベルや出力は英語のままです。
cat /proc/cpuinfo
このコマンドはファイルを、端末上で選択できるテキストとして表示します。提供された実行記録では、別のシステム上でこのコマンドが正常に実行されています。出力はシステムによって異なります。端末画像には別の AMD Ryzen システムの出力が表示されており、実行記録の出力ではありません。
出力に含まれるフィールドを確認する
このファイルには通常、論理プロセッサごとにフィールドのまとまりが含まれます。processor は論理プロセッサの項目を示すもので、物理コア数を表すものではありません。vendor_id と model name は報告されたプロセッサのベンダーとモデルを示します。一方、cpu MHz は報告された周波数であり、省電力管理によって変化することがあります。cache size、address sizes、cpu cores などのフィールドが表示される場合もありますが、利用できるかどうかや解釈はアーキテクチャとカーネルによって異なります。どのマシンでもすべての行に意味があるとは限りません。
マルチコアシステムでブロックが繰り返し表示されるのは正常です。processor の値を見ると、Linux が公開している論理プロセッサの項目を確認できます。cpu cores は、そのシステムが報告した値として扱ってください。これらのフィールドだけでは、ソケット数や物理的な構成全体を確実には把握できません。
CPU フラグを探して意味を読み取る
x86 の出力では flags フィールドを探します。他の一部のアーキテクチャでは、同様の一覧が Features という名前になっています。代表的な一覧を探すには、次のようにファイルを検索できます。grep -m1 -E '^(flags|Features)[[:space:]]*:' /proc/cpuinfo。コロンの後に並ぶ名前は、説明ではなく空白で区切られた識別子です。その綴りはプロセッサとカーネルのインターフェースの一部なので、ドキュメントを調べたりシステムを比較したりする際も、sse4_2、avx、lm などの名前は変えずに使ってください。
たとえば lm は x86 のロングモード対応を表し、sse4_2 と avx は命令セット拡張を表します。フラグは機能を簡潔に示す名前であり、性能評価ではありません。対象とするマシンで報告されたフラグ一覧を使ってください。別のプロセッサ、仮想マシン、またはアーキテクチャでは、異なる一覧が報告されることがあります。Linux カーネル 4.1.3 の x86 CPU 機能定義は、そのバージョンの名前を解釈する際の参考になりますが、現在の機能を網羅した一覧ではありません。
CPU フラグ出力の限界を理解する
/proc/cpuinfo が示すのは、実行中のシステムで Linux が公開している情報です。仮想マシンでは、ホストの機能の一部だけが表示されることがあります。また、カーネルによってアーキテクチャ固有の名前が公開されたり、提供されるフィールドが異なったりします。命令セット機能が一覧にあっても、特定のプログラムがそれを使っているとは限りません。ソフトウェアがその機能を利用するには、OS のサポート、適切なコンパイラー設定、または実行時の機能検出が必要な場合があります。
フラグは報告された機能の手がかりとして使い、機能に依存する前にプロセッサ、カーネル、仮想化の構成、アプリケーション固有の要件を確認してください。フラグだけでは、処理がどれほど速く実行されるか、ソフトウェアが最適化されたコードパスを選んだか、あるいはすべての論理プロセッサで同じ機能を利用できるかは分かりません。