概要
- サーバーの CPU利用率 と実際の処理能力の関係に関する検証
- stress-ng を用いたベンチマークテストの結果分析
- ハイパースレッディング や ターボブースト の影響
- CPU利用率の 直線的増加の誤解 について解説
- 適切なパフォーマンス評価方法の提案
CPU利用率と実際のパフォーマンスの乖離
-
サーバー管理では CPU・メモリ・ネットワーク利用率 が注目される傾向
-
一般的に「CPU利用率50%なら倍の処理が可能」と考えられがち
-
実際には CPU利用率の増加が直線的ではない 現象
-
stress-ngを用いて 様々なワークロード でベンチマークを実施
-
Ubuntu+Ryzen 9 5900X(12コア/24スレッド)環境、Precision Boost Overdrive有効化
- 24ワーカーで1〜100%利用率をテスト
- 1〜24ワーカーで100%利用率をテスト
- 各テストで「Bogo ops(完了した疑似処理回数)」を測定
テスト結果の詳細
- General CPUテスト :CPU利用率50%時、実際の処理能力は60〜65%
- 64-bit整数計算 :CPU利用率50%時、実際の処理能力は65〜85%
- 行列計算 :CPU利用率50%時、実際の処理能力は80〜100%
- 追加ワーカーが 処理能力に寄与しない現象 も観測
乖離の原因
-
ハイパースレッディング
- 物理コア数を超えると 論理コア間でリソース共有 発生
- 12ワーカーまでは各物理コアに割り当て、以降はリソース競合
- ワークロードによって 性能低下の度合いが異なる
-
ターボブースト
- 利用コア数が増えると クロック周波数が低下
- 低負荷時4.9GHz→高負荷時4.3GHzまでダウン
- CPU利用率計算式(busy cycles/total cycles)の影響で 線形に増加しない
運用上の注意点と推奨アプローチ
- CPU利用率の数値だけでキャパシティを判断するのは危険
- 利用率50%以上では システムモニタの数値が過小評価 となる場合が多い
- プロセッサやメーカー毎に挙動が大きく異なる 点にも注意
- 適切な評価方法
-
サーバーが エラーや遅延なく処理できる最大作業量 をベンチマークで計測
-
現在の 実際の作業量 を監視
-
CPU利用率ではなく、作業量同士を比較 して判断
-
Bogo opsはLinuxのBogoMIPSに由来する簡易ベンチマーク指標
-
CPUの制約と環境要因
- プロセッサは 熱設計制約 下で動作
- 一部コアのみ稼働時は 高クロック動作 が可能
- 全コア稼働時は クロックダウン で熱制御
- 電力制約 もサーバー環境では重要な要素
まとめ
- サーバー運用では CPU利用率の数値を鵜呑みにせず、 実際の処理能力 をベンチマーク等で把握することが重要
- ハイパースレッディング や ターボブースト の影響を理解し、 ワークロード特性に応じた運用 を推奨