...

ホスティングサーバーにおけるCPUガバナー:パフォーマンスを適切に制御する

ホスティングサーバーの応答を迅速かつ安定させたい場合は、 CPUガバナー 意識的に調整し、実際の負荷下でのクロック挙動を検証します。私は明確なパフォーマンスを優先し、レイテンシを管理し、 周波数スケーリング Web、データベース、PHPが遅延なく反応するように設定する。.

中心点

具体的な設定を行う前に、最も重要な調整項目を簡単にまとめ、ホスティングの日常業務における有用性の順に並べます。 そうすることで、処理速度、レイテンシ、効率性をどのようにバランスさせるべきか、明確な全体像が浮かび上がります。これらのポイントは、生産性の高いサーバーを構築するための迅速な意思決定の指針となります。その際、客観的なデータだけでなく、実際のアクセスピーク時の動作も評価対象としています。これにより、 一貫した 業務を効率化し、長期的にコストを削減する 時間.

  • 演技: 最高クロック、負荷のピーク時でもレイテンシが極めて低い。.
  • 省電力: クロック周波数が低く、負荷がかからないときは消費電力が低くなる。.
  • ondemand/schedutil: 動的であり、負荷に応じてスケールします。.
  • 測定: 真の説得力を得るための「ビフォー・アフター」比較。.
  • 永続性: systemd またはブートオプションによる設定を保存する。.

私はこのリストを出発点として、それに基づいてワークロードごとに具体的に判断しています。そうすることで、 反応速度 そして、変わりやすいものは避ける クロック特性.

ホスティングサーバーにおけるCPUガバナーの制御内容

ガバナーは、システムがどのように CPU周波数 負荷率に連動し、コアがどのくらいの速さでクロックを上げるか。ここでは、最初のクロックブーストまでの時間に焦点を当てている。なぜなら、それが直接 レイテンシー Webリクエストにおいて重要な役割を果たします。短いリクエストが多数発生する場合、クロック周波数の素早い切り替えには明確な利点がありますが、省電力な戦略はむしろアイドル時に適しています。 Linuxでは、CPU周波数スケーリングによってこれが制御されており、ガバナーの設定に応じて、アグレッシブに反応することもあれば、慎重に反応することもあります。結局のところ、重要なのは、実際の負荷下でサーバーが一貫して高速に起動することなのです。.

ドライバとプラットフォーム間の違い:intel_pstate、amd_pstate、acpi_cpufreq

ガバナーの選択と効果は、アクティブなドライバに大きく依存します。最新のIntelサーバーでは、しばしば intel_pstate (HWP)、最新のAMD世代 amd_pstate; クラシックなスタイルは変わらず acpi_cpufreq.

  • intel_pstate: 通常は以下の機能のみを提供しています 演技 そして 省電力. 微調整は以下の方法で実行されます。 エネルギー性能の選好 (EPP)。次のような価値観など 演技, バランス・パフォーマンス, balance_power そして パワー ブーストの強度を左右する。.
  • amd_pstate: EPP/Energy-Policy と同様のロジックで、カーネルのバージョンに応じて ガイド付き 或いは アクティブ モード。実際の運用では、負荷の急増に対して非常に素早く反応する。.
  • acpi_cpufreq: 幅広いガバナーの選択肢を備えた定番モデル(例:. オンデマンド, 保守的, スケジューティル). ここでは、ガバナーがスケールに特に直接的な影響を与えています。.

そこで、まずどのドライバが読み込まれているかを確認します(cpupower frequency-info)、そしてプラットフォームに合わせて期待値を調整します。EPPが有効な場合、レイテンシをほぼ同じに保ちつつ消費電力を最小限に抑えたいときは、パフォーマンス目標に「balance_performance」という優先度を追加で設定します。.

どのようなモードがあり、どのような場面に適しているか

一般的なモードには次のようなものがあります 演技, 省電力, ondemand, conservative、schedutil;Ubuntu、Red Hat、およびカーネルのドキュメントでは、長年にわたりこれらのモードについて説明されています。Ubuntu Server Docsによると、performanceモードは最高クロックを維持し、明らかに速度を重視しているのに対し、Red Hatはpowersaveモードを、最大の省電力と最低のパフォーマンスを実現するモードとして位置付けています。 私は、Webサーバーやアクセスが集中するWordPressインスタンス、高速な応答時間が求められるAPIサービスには「performance」モードを採用しています。 使用頻度が低く、アイドル時間が長いマシンで、省エネを優先する場合は、「powersave」が選択肢となります。「schedutil」のような動的モードは中間の選択肢となりますが、カーネルやハードウェアによって反応の速さにばらつきがあります。.

ターボ、最小/最大周波数、およびブースト制限

ガバナーに加え、ターボ機能や周波数制限も重要な調整要素です。私は意図的に下限値と上限値を設定しており、これにより、負荷がかかった際にコアが即座に高い周波数に切り替わり、低すぎるPステートに留まることを防いでいます。.

  • 最小・最大周波数: ショートバーストがコールドスタートから発生しないよう下限を引き上げ、スロットリングが発生しないよう上限を確認する。.
  • ターボ/ブースト: 通常、低レイテンシを実現するために有効にします。その際、熱的および電気的な制限値(Intelの場合はPL1/PL2/EDP、AMDの場合はPPT/TDC/EDC)に注意を払ってください。.

テスト用の一般的なコマンド(ディストリビューションによって異なる場合があります):

# の現在の範囲とドライバを表示
cpupower frequency-info

# ガバナーを「Performance」に設定
cpupower frequency-set -g performance

# 最小/最大周波数(例)を設定
cpupower frequency-set -d 3.0GHz
cpupower frequency-set -u 4.8GHz

# Intel Turbo (intel_pstate) を一時的に無効化/有効化
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo    # 1 = 無効、0 = 有効

# AMD Boost(カーネル/プラットフォームによって異なる)
echo 1 > /sys/devices/system/cpu/cpufreq/boost

これらのパラメータはテスト目的でのみ変更し、その直後にレイテンシと安定性が実際に改善されたかどうかを測定します。.

実践ガイド:ガバナーの点検と切り替え

私は、最適化を行う際はまず、現在設定されている 知事. これを実現するには、 cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor あるいは、 cpupower frequency-info, 、さらに周波数範囲とドライバも表示されます。本番環境のWebサーバーでは、私はよく cpupower frequency-set -g performance 高性能モードに切り替えます。その後、設定ミスを排除するために、結果を再度確認します。この確認を行わないと、一貫性が失われるリスクがあります。 応答時間, 、これらは回避可能なものです。.

自動化されたスモークテストおよび回帰テスト

切り替え後は、異常値を迅速に検出するために、短時間で再現性のあるテストを実行します。マイクロベンチマーク(単一のエンドポイント、ウォーム/コールドキャッシュ)と短時間のストレステストを組み合わせ、応答時間の p50/p95/p99 を測定します。 重要なのは、テストデータとテスト経路が実環境に近いものであることです(例:オンラインショップのチェックアウト、検索、起動パスでのキャッシュミスなど)。実行を複数回繰り返し、ネットワークやストレージによるジッターを排除するために、結果の平均値を算出します。.

測定可能な速度向上:レイテンシ、クロック、負荷のピーク

移行に先立ち、以下の項目について初期値を記録します。 レイテンシー, 、CPU負荷、エラー率、消費電力などを、例えば個別のベンチマークや実際のアクセスプロファイルを用いて測定します。その後、変化を正確に比較できるよう、同一のデータセットを用いて同じテストを繰り返します。特に注目しているのは スパイク ショップの決済時やキャッシュミスなどで発生するような、短時間かつ高負荷の並行処理の場合。その際にスループットの低下が見られた場合は、環境を確認します。例えば、 CPUスロットリング 分割された環境において。測定結果が明確なメリットを示すようになって初めて、その設定を恒久的に採用します。.

ツールと指標:効果を可視化する方法

  • ターボスタット: パケットごと、およびコアごとに、クロック、C-ステート、ターボ使用率、消費電力を表示します。ブーストの応答時間やレジデンシーを確認するのに最適です。.
  • パースタット: 命令/サイクル数(IPC)、コンテキスト切り替え、および分岐ミス数を計測します。CPUのボトルネックを特定するのに役立ちます。.
  • pidstat/iostat/vmstat: プロセス、I/O 待機時間、およびシステム負荷に関する情報を補完する。.
  • PSI(圧力失速情報): CPU/I/O/メモリの負荷がレイテンシを引き起こしているかどうかを評価する――単なるクロック周波数の検討に加えて参考になる。.
  • サーバー・メトリクス: 各エンドポイントごとの p50/p95/p99 レイテンシ、エラー率、レート、飽和度。これらの指標がなければ、ガバナーの変更は単なる事例報告に過ぎない。.

クロック波形とレイテンシを同じ時間軸上で相関分析しています。クロックが20~50 ms経過してから急上昇する場合、それはたいてい p95 に現れます。目標は、最初の関連するワーカースレッドが、すでに高い P ステートで起動することです。.

比較表:ホスティング用途におけるGovernors

以下の概要では、一般的なモードを、拍子の特性やホスティングへの適性に基づいて分類しています。私はこれを手っ取り早い 意思決定支援, 、ただし、実際の環境での独自のテストの代わりにはならない 負荷.

知事 クロック特性 ホスティングの適性 メリット デメリット
演技 最大、静的荷重が高い Web、ショップ、API、DB 極めて低いレイテンシー 燃費の悪化
省電力 最小限、ためらいがちに上昇 レアレスト、開発・テスト エネルギー消費の削減 パフォーマンスの低下
オンデマンド 動的、負荷制御式 混合ワークロード 良い妥協点 反応時間は異なる
スケジューティル スケジューラベース 最新のカーネル 微細な調整 ハードウェアに依存する
保守的 緩やかに上昇 クロスカントリースキーヤー、バッチ スムーズなスケーリング スパイク時の鈍さ

この分類は、実稼働環境での経験を反映したものであり、カーネルやディストリビューションのドキュメントに記載されている説明とも一致しています。具体的なハードウェアによって動作が異なる可能性があるため、私は常に現場で通常の使用状況下で検証を行っています。.

ワークロードの種類:Web、オンラインショップ、データベース、API

WordPress、WooCommerce、ヘッドレスAPIにおいては、一つひとつが重要だ ミリ秒 最初の応答が得られるまでの間、そのためクロック周波数が高いほど、通常はパフォーマンスが向上します。データベースは、シングルスレッドの処理フェーズが迅速に完了することで恩恵を受けます。 クロック速度はコアよりも重要 これは、単なるコア数よりもはるかに明確に表れることがよくあります。バッチ処理やレポート作成ジョブの場合、ユーザーが待機していない限り、動的なガバナーで十分です。 重要なのは、Cron、PHP-FPM、キャッシュミスなどが同時に発生し、短いピークが頻繁に現れる混合ワークロードです。このようなシナリオでは、一貫して「performance」モードに設定することで、最も安定した応答時間を確保できます。.

ワークロードごとの詳細:PHP-FPM、NGINX、DBサーバー

  • ピーエッチピーエフピーエム: CPUに負荷のかかる短いバースト処理が多数発生します。私は、 pm.max_children また、プロセス数がコア数と一致し、最初のワーカーがLow-P-Stateで起動しないようにします。NGINXのReuseportは、負荷をコア間で均等に分散させるのに役立ちます。.
  • NGINX/Apache: Acceptスレッドは負荷の低いコアに固定すべきである。IRQバランシングとアフィニティにより、個々のコアでのボトルネックを防止できる。高い基本クロック周波数は、TLSハンドシェイクやヘッダー処理の時間を短縮する。.
  • データベース: 短時間のシングルスレッド処理(構文解析/計画立案/インデックスヒット)では、このブースト効果が大きく発揮されます。一方、より長時間にわたる並列スキャンはI/Oやメモリへの依存度が高いため、ここでは最大周波数よりも一貫性が重要となります。.

ウォームパスとコールドパスの両方をテストしています。CPUが省電力状態のままになっているという理由だけで、キャッシュのウォームアップが「のろのろとした処理」になってはいけません。.

NUMA、IRQ、およびスレッドアフィニティ

ガバナーに加え、トポロジーと割り込みの割り当てもレイテンシを決定づけます。私は通信経路を短くすることを目指しています。つまり、WebプロセスやPHPプロセスは、処理が行われているのと同じNUMAノード内のメモリとIRQを使用するようにします。IRQのバランスについては、特にカーネルのアップデート後は定期的に確認しています。.

  • cpuset/アフィニティ: 重要なサービスを、ストレージやネットワークのIRQの影響を受けないコアグループに割り当てる。.
  • スケジューラの分離: レイテンシが特に重要なシステムでは、個々のコアを隔離し(isolcpus/rcu_nocbs)、そこにホットパス・ワーカーを割り当てる。.
  • 透明性htop 或いは ps -eo pid,psr,comm スレッドがコア間を「飛び越えて」キャッシュの局所性を失っていないかを確認します。.

仮想化とプロバイダ・スタック

VMやコンテナの場合、クロックの挙動はハイパーバイザーやホストの設定にも左右されるため、私は 周辺環境 常に確認するようにしています。プロバイダーによっては周波数を固定しているところもあれば、柔軟なブーストを許可したり、特定のインスタンスを優先したりするところもあります。ゲスト側でのクロック変更がほとんど効果を示さない場合は、分析をホスト側に移すか、制限について具体的に問い合わせてみます。 専用サーバーの場合、より詳細な制御が可能になりますが、BIOS/UEFIおよびカーネルドライバを適切に設定する必要があります。この一連のプロセスについて明確な透明性を確保することで、 測定.

コンテナ、Cgroups v2、およびKubernetes

コンテナ内では、Cgroups v2 が CPU のスケーリング方法を大きく左右します。私が注目しているのは:

  • CPU.max/Quota: クォータが厳しすぎると、スロットリングやジッターが発生する――これはp99値の上昇などで確認できる―― nr_throttled-カウンター。.
  • CPU.shares: 相対的な優先順位を定義します。重要なサービスにはより高いシェアが割り当てられ、競合が発生した際に優先的に処理されるようになります。.
  • cpuset: レイテンシを安定させるため、コンテナを同じNUMAノード内の連続したコアに割り当てています。.
  • スケジューラとの連携: スケジューティル コンテナの負荷が激しく変動する場合、動作が鈍くなることがあります。ホストレベルでは、「performance」が基盤を安定させます。.

私はまずホスト上でガバナーの効果をテストするようにしています。それでもコンテナの負荷が変動する場合は、その原因はガバナーではなく、クォータやオーバーサブスクリプションにあることが多いのです。.

BIOS/UEFI、C-States、および電源設定

ブーストがどれだけ素早く発動するかは、基盤によって決まります。BIOS/UEFIの設定を確認します:

  • Cステート: 睡眠状態が深すぎると、目覚めまでの遅延時間が長くなります。レイテンシ重視のシステムでは、深いCステートを制限するか、または レイテンシ許容度-利用可能な場合は、オプション。.
  • ターボ/ブースト: これは許可されなければならない。そうでなければ、ガバナーによる最適化はすべて無駄になってしまう。.
  • 出力制限: PL1/PL2(Intel)またはPPT/TDC/EDC(AMD)を現実的な値に設定し、短時間のバースト時にすぐにリミットに達しないようにする。.
  • SMT/ハイパースレッディング: スループットは向上するが、レイテンシの経路が分散する可能性がある。厳密に決定論的なサービスの場合、重要なスレッドを実際のコアごとに分離している。.

EPP(エネルギーポリシー)との相互作用を観察しています。「performance」モードでも、EPPの設定が保守的すぎると、動作の積極性が低下する可能性があります。最適な設定は、多くの場合、ターボを有効にし、ディープスリープ状態を制限した「balance_performance」です。.

性能と効率のバランスをとる

私は「パフォーマンス」と「エネルギー」を対立させるのではなく、一体のものとして捉え、それに合わせて 戦略 負荷プロファイルに合わせて調整します。応答時間を最優先する場合は、「performance」を選択し、夜間ジョブやキャッシュを利用して消費電力を調整します。経済性をより重視する場合は、その差分を記録し、どのように 電力消費の効率化 応答時間を悪化させることなく消費電力を削減する。過度に厳格な省電力モードは、タイムラインの変動を頻繁に引き起こし、ユーザーがその影響を実感し、売上減につながる可能性がある。データに基づいた適切なバランスを考慮することで、全体としてより良い効果が得られる。.

展開、永続化、およびリカバリ計画

変更は段階的に展開しています。まずテレメトリ機能を搭載した単一のサーバーから始め、次に小規模なグループへ、そしてその後で広範囲に展開します。こうすることで、予期せぬ副作用を早期に発見できます。また、systemdに加え、ジッターや発熱の問題が発生した場合には、迅速に元に戻せるよう対策を講じています。.

  • 段階的な導入: カナリーホストを特定し、綿密に監視する(レイテンシ、エラー率、CPU温度、ターボ稼働率)。.
  • コンフィギュレーション管理: ガバナー、最小・最大周波数、EPP、および必要に応じてCステート用の統一テンプレートを用意する。変更にはバージョン管理を行う。.
  • ロールバック: 以前の状態を即座に復元するコマンドまたはプレイブック。.

systemd による永続的な設定

テスト終了後、私はその セッティング 再起動時に実行するように設定してください。そうしないと、システムはデフォルト設定に戻ってしまいます。私は、起動時に実行される systemd ユニットを使ってこれを処理しています。 cpupower frequency-set -g performance を設定するか、適切なカーネル/UEFIオプションを通じて行います。さらに、変更の追跡が可能になるよう、設定管理に手順を文書化しています。ディストリビューションによっては固有のプロファイルが存在するため、それらを確認し、必要に応じて調整します。これにより、クロックプロファイルの一貫性が保たれ、再起動後の予期せぬ動作を防ぐことができます。.

[Unit]
Description=CPUガバナーの設定
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower frequency-set -g performance
ExecStart=/usr/bin/sh -c 'echo balance_performance > /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference || true'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

EPP行は、プラットフォームがそれをサポートしている場合にのみ有効です。私は意図的にこのユニットを冪等(idempotent)に保ち、変更内容をログに記録することで、後日の監査において明確に追跡できるようにしています。.

簡単にまとめると

をコントロールしている。 CPU-周波数モードを有効にしているのは、ホスティング環境では低レイテンシと予測可能な動作が不可欠だからだ。パフォーマンスモードは最速の応答を実現し、Web、オンラインショップ、APIにおいてその真価を発揮する一方、使用頻度の低いシステムでは省電力モードが適している。 ガバナーの選択は、測定データに基づいて初めて的確なものとなるため、私は変更の前後でテストを行っています。systemd による永続的な設定は、その効果を確実にし、元に戻るのを防ぎます。このようにして、CPU ガバナーは、 不変 日常運用における性能。.

現在の記事

データセンター内のサーバーで、MariaDBのバッファプールが最適化されている
データベース

MariaDB バッファプールのサイズ設定:InnoDB バッファプールに関する実践ガイドと経験則

明確な経験則と例示値を用いた、MariaDBのバッファプールサイジングに関する実践的なガイドです。MariaDBデータベースのパフォーマンスを大幅に向上させるために、InnoDBバッファプールを最適にサイジングする方法をご確認ください。安定したワークロードにおけるバッファプールサイジングに焦点を当てています。.

データセンター内のCPUスケジューリングとレイテンシグラフを備えたLinuxサーバー
サーバーと仮想マシン

Linuxスケジューラのレイテンシを測定・最適化し、カーネルのパフォーマンスを向上させる

Linuxのスケジューラ遅延を測定・最適化し、カーネルのパフォーマンスを向上させるための実践的なガイド。焦点:Linuxにおけるスケジューラ遅延の分析による、正確なCPUスケジューリングと安定したサーバーの応答時間の実現。.