A.9. CPU のスケーリング
テストの対象
cpuscaling テストは、CPU が計算需要に応じてクロック速度を増減させる能力を調べるものです。
テストの内容
このテストでは、異なるスケーリングガバナー (CPU がいつ高クロックまたは低クロックに変更するか、どんな速さでそれを行うかの一連の命令) を使用して、異なる周波数で CPU を動作させ、標準化されたワークロードを完了するのにかかる時間の違いを測定します。ハードウェア検出ルーチンが、/sys 内に複数の cpu 周波数を含む以下のディレクトリーを発見した場合、テストがスケジュールされます。
/sys/devices/system/cpu/cpuX/cpufreq
cpuscaling テストは、論理 CPU ごとに 1 回記載されるのではなく、パッケージごとに 1 回予定されています。テストが実行されると、/sys/devices/system/cpu/cpuX/topology/physical_package_id
を介してトポロジーが決定され、特定のパッケージ内のすべての論理 CPU に対してテストが並行して実行されます。
このテストでは、まず turbostat コマンドを実行して、プロセッサーの統計情報を収集します。サポートされているアーキテクチャーでは、turbostat は、事前の統計カラムが turbostat 出力ファイルに表示されているかどうかをチェックしますが、ファイルにカラムが含まれていない場合は警告を返します。その後、テストは cstate サブテストの実行を試み、失敗した場合は pstate サブテストを実行します。
各 CPU パッケージのテスト手順は以下の通りです。
このテストでは、sysfs ファイルシステムにある値を使用して、CPU の最大および最小周波数を決定します。このコマンドで任意のシステムのこれらの値を見ることができます。
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
ここには常に最大と最小の 2 つの周波数が表示されますが、プロセッサーによってはより細かい CPU 速度の制御が可能なため、ファイルには 2 つ以上の値が表示されます。最大値と最小値の間にある追加の CPU 速度は、テスト中には特に使用されませんが、CPU が最大値と最小値の間を移行する際に使用されることがあります。テストの手順は以下の通りです。
-
このテストでは、
/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
ファイルから最大および最小のプロセッサー速度を記録します。 - ユーザースペースのガバナーを選択し、最大の周波数を選択します。
-
最大速度は、すべてのプロセッサーの
/sys/devices/system/cpu/cpuX/cpufreq/scaling_cur_freq
の値を読み取ることで確認できます。この値が選択された周波数と一致しない場合、テストは失敗を報告します。 - パッケージ内のすべてのプロセッサーには、2x10^12 桁までの円周率を計算するというタスクが同時に与えられています。円周率の計算には、意味のある時間 (約 30 秒) がかかることから、この値を選びました。
- 円周率の計算にかかった時間を CPU ごとに記録し、パッケージの平均値を算出しています。
- ユーザースペースのガバナーを選択し、最低速度を設定します。
- 最低速度は sysfs のデータで確認し、要求された速度に達していない CPU があれば失敗となります。
- 同じ円周率の計算を、パッケージ内のすべてのプロセッサーで行い、その結果を記録します。
- 作業量に応じて CPU の速度を最小から最大の間で調整するオンデマンドガバナが選択されています。
- 最低速度は sysfs のデータで確認し、要求された速度に達していない CPU があれば失敗となります。
- 同じ円周率の計算を、パッケージ内のすべてのプロセッサーで行い、その結果を記録します。
- CPU を常に最大速度にするパフォーマンスガバナが選択されています。
- 最大速度は sysfs のデータで確認され、要求された速度に達していない CPU があれば失敗となります。
- 同じ円周率の計算を、すべてのプロセッサープロセッサーで行い、その結果を記録します。
ここからは、3 つのサブセクションの分析を行います。ステップ 1 からステップ 8 では、最大および最小の CPU 速度での pi 計算時間を求めます。2 つの速度で円周率を計算するのにかかる時間の差は、CPU 速度の差に比例するはずです。例えば、仮想的なテストシステムの最大周波数が 2GHz、最小周波数が 1GHz で、最大速度で円周率計算を実行するのに 30 秒かかった場合、最小速度では円周率計算に 60 秒かかると予想されます。様々な理由で完璧な結果が得られないことは承知していますので、結果に対して 10% の誤差 (予想よりも速い、または遅い) を許容しています。この例では、最低速度での実行に 54 秒から 66 秒かかっても、合格とみなされることになります (60 の 90%=54、60 の 110%=66)。
ステップ 9~11 では、オンデマンドガバナを使用したπ計算時間のテストを行います。これにより、仕事をしているときに、システムが CPU の速度を素早く最大にすることができることが確認できました。ステップ 11 で得られた計算時間を、ステップ 5 で得られた最高速度の計算時間と比較します。この 2 つの値の差が 10% 以内であれば合格です。
ステップ 12 から 14 では、パフォーマンスガバナーを使用して、πの計算をテストします。これにより、システムが常に CPU を最大の周波数で保持できることが確認できます。ステップ 14 で得られたπの計算時間を、ステップ 5 で得られた最高速度の計算時間と比較します。繰り返しになりますが、この 2 つの値の差が 10% 以内であれば合格です。
cpuscaling テストの追加部分は、/proc/cpuinfo
の ida
CPU フラグの存在により、TurboBoost 機能を持つ Intel プロセッサーが検出された場合に実行されます。このテストでは、各パッケージに搭載されている CPU のうち、ハウスキーピングのために CPU0 を除いた 1 つの CPU を選択し、オンデマンドガバナを最大速度で使用して性能を測定しています。パッケージ内のすべてのコアを並行してテストした前回のテストと比較して、少なくとも 5% の性能向上を期待しています。
テストの準備
テストの準備として、BIOS で CPU の周波数スケーリングが有効になっていることを確認し、ポリシーガイドで説明されている要件を満たす CPU がインストールされていることを確認してください。
テストの実行
cpuscaling テストは非対話型です。次のコマンドを実行し、表示されるリストから適切な CPU scaling
テスト名を選択します。
rhcert-run
ランタイム
cpuscaling テストは、Red Hat Enterprise Linux 6.4、AMD64 および Intel 64 が動作する 2013 年当時のシングル CPU、6 コア/12 スレッドの 3.3GHz Intel ベースのワークステーションで、約 42 分かかりました。コア数が多く、ソケットの数が多いシステムでは、より時間がかかります。必要な supportable テストにより、全体の実行時間が約 1 分長くなります。