- 一般的にサーバー性能の限界は
top のような監視ツールの % CPU使用率 で判断されるが、実際にはこの指標は 性能を線形に反映しない
- Ryzen 9 5900X 環境で stress-ng を使ってテストした結果、使用率50%のとき実際の作業量は60〜100% に達し、指標との大きな乖離があった
- 主な原因は ハイパースレッディング と ターボブースト で、論理コア間のリソース共有やクロック速度の変化が指標を歪める
- したがって単純なCPU使用率の代わりに、実際に処理可能な作業量のベンチマークと現在のスループットの比較 のほうがより正確な指標となる
- CPU使用率を線形に解釈すると 性能推定に大きな誤り が生じるため、システム計画時には ベンチマークベースのアプローチ が必要
サーバーのCPU使用率の数値と実際のスループットの不一致
- サーバー運用では、多くの人が最大使用率に近いかどうかを確認したがる
- 一般的には
top などの監視ツールを通じて、ネットワーク、メモリ、CPU使用率のうち最も高い値を参照する
- しかし実際には、CPU使用率の数値と処理可能な作業量が線形に増加しない問題が発生する
テスト環境と方法
- Ubuntuデスクトップ + Ryzen 9 5900X (12コア/24スレッド) ベースの実験
- Precision Boost Overdrive(Turbo)を有効化
- stress-ng でさまざまな負荷(1〜24ワーカー、1〜100%使用率)をシミュレーション
- 測定指標: システムが報告する CPU使用率 と実際の演算量(Bogo ops)
結果の要約
- 一般的なCPU負荷: 使用率50%時に実際は60〜65%のスループット
- 64ビット整数演算: 使用率50%時に65〜85%のスループット
- 行列演算(Matrix math): 使用率50%時に80〜100%のスループット
- 実際には追加ワーカーが性能に寄与しなくても、CPU使用率は上昇する
原因分析
-
ハイパースレッディング
- 12個の物理コア + 12個の論理コア構成
- 12個以下のワーカーは物理コアに最適配置されるが、それを超えると 論理コア共有 により性能が低下
- 特に SIMD演算(行列演算) では共有リソースがないため性能向上は不可能
-
ターボブースト
- 低負荷時は4.9GHz → フルロード時は4.3GHzへと 15%のクロック低下
- CPU使用率の計算式(= busy cycles / total cycles)に歪みが生じる
- 分母(総サイクル数)が減ることで、使用率の上昇幅が実際の作業量より過大評価される
示唆
- CPU使用率は絶対的な性能指標ではない
- サーバー容量の算定および性能予測の際には:
- 1. ベンチマークで最大スループットを測定
- 2. リアルタイムのスループットを監視
- 3. 2つの値を比較して 性能限界への接近度を判断
- CPUアーキテクチャ(AMD vs Intel)、ハイパースレッディング効率、ターボの動作方式により ばらつきが大きいため、プロセッサごとの分析が必要
結論
- CPU使用率は単なる busy cycles の比率 にすぎず、実際の処理性能を正確には反映しない
- 効率的に活用されている場合、"50%使用率" でも すでに最大性能の80〜100%水準 である可能性がある
- したがって 性能監視とシステム計画 は、CPU使用率ではなく ベンチマークベースの作業スループット を中心に行うべきである
まだコメントはありません。