検索

31.3. ネットワーク遅延の改善

download PDF

CPU 電力管理機能により、時間を考慮する必要があるアプリケーション処理に望ましくない遅延が発生する可能性があります。これらの電源管理機能の一部またはすべてを無効にして、ネットワーク遅延を改善できます。

たとえば、サーバーの負荷が高いときよりもアイドル状態のときの遅延が高い場合は、CPU 電源管理設定が遅延に影響を与える可能性があります。

重要

CPU 電源管理機能を無効にすると、電力消費量が増加し、熱損失が発生する可能性があります。

31.3.1. CPU の電源状態がネットワーク遅延に与える影響

CPU の消費状態 (C-状態) は、コンピューターの消費電力を最適化し、削減します。C-状態には、C0 から始まる番号が付けられます。C0 では、プロセッサーはフルパワーで動作し、実行しています。C1 では、プロセッサーはフルパワーで動作していますが、実行されていません。C-状態の番号が大きいほど、CPU がオフにするコンポーネントの数が多くなります。

CPU コアがアイドル状態になると常に、内蔵の省電力ロジックが介入し、さまざまなプロセッサーコンポーネントをオフにして、コアを現在の C-状態から上位の C-状態に移行しようとします。CPU コアがデータを処理する必要がある場合、Red Hat Enterprise Linux (RHEL) はプロセッサーに割り込みを送信してコアをウェイクアップし、C-状態を C0 に戻します。

ディープ C-状態から C0 に戻るには、プロセッサーのさまざまなコンポーネントの電源を再度オンにするため、時間がかかります。マルチコアシステムでは、多くのコアが同時にアイドル状態になり、より深い C-状態になることもあります。RHEL がそれらを同時にウェイクアップしようとすると、すべてのコアがディープ C-状態から戻る間に、カーネルが大量のプロセッサー間割り込み (IPI) を生成する可能性があります。割り込みの処理中にロックが必要となるため、システムはすべての割り込みの処理中にしばらく停止する可能性があります。これにより、イベントに対するアプリケーションの応答が大幅に遅延する可能性があります。

例31.2 コアごとの C-状態時間の表示

PowerTOP アプリケーションの Idle Stats ページには、CPU コアが各 C-状態で費やした時間が表示されます。

           Pkg(HW)  |            Core(HW) |            CPU(OS) 0   CPU(OS) 4
                    |                     | C0 active   2.5%        2.2%
                    |                     | POLL        0.0%    0.0 ms  0.0%    0.1 ms
                    |                     | C1          0.1%    0.2 ms  0.0%    0.1 ms
C2 (pc2)   63.7%    |                     |
C3 (pc3)    0.0%    | C3 (cc3)    0.1%    | C3          0.1%    0.1 ms  0.1%    0.1 ms
C6 (pc6)    0.0%    | C6 (cc6)    8.3%    | C6          5.2%    0.6 ms  6.0%    0.6 ms
C7 (pc7)    0.0%    | C7 (cc7)   76.6%    | C7s         0.0%    0.0 ms  0.0%    0.0 ms
C8 (pc8)    0.0%    |                     | C8          6.3%    0.9 ms  5.8%    0.8 ms
C9 (pc9)    0.0%    |                     | C9          0.4%    3.7 ms  2.2%    2.2 ms
C10 (pc10)  0.0%    |                     |
                    |                     | C10        80.8%    3.7 ms 79.4%    4.4 ms
                    |                     | C1E         0.1%    0.1 ms  0.1%    0.1 ms
...

31.3.2. EFI ファームウェアの C-状態設定

EFI ファームウェアを備えたほとんどのシステムでは、個々の消費状態 (C-状態) を有効または無効にすることができます。ただし、Red Hat Enterprise Linux (RHEL) では、アイドルドライバーによって、カーネルがファームウェアの設定を使用するかどうかが決定されます。

  • intel_idle: これは、Intel CPU を搭載したホスト上のデフォルトのドライバーであり、EFI ファームウェアからの C-状態設定を無視します。
  • acpi_idle: RHEL は、Intel 以外のベンダーの CPU を搭載したホスト上、および intel_idle が無効になっている場合に、このドライバーを使用します。デフォルトでは、acpi_idle ドライバーは EFI ファームウェアの C-状態設定を使用します。

関連情報

  • kernel-doc パッケージが提供する /usr/share/doc/kernel-doc-<version>/Documentation/admin-guide/pm/cpuidle.rst

31.3.3. カスタム TuneD プロファイルを使用した C-状態の無効化

TuneD サービスは、カーネルの Power Management Quality of Service (PMQOS) インターフェイスを使用して、消費状態 (C 状態) のロックを設定します。カーネルアイドルドライバーは、このインターフェイスと通信して C-状態を動的に制限できます。これにより、管理者がカーネルコマンドラインパラメーターを使用して、C-状態の最大値をハードコーディングする必要がなくなります。

前提条件

  • tuned パッケージがインストールされている。
  • tuned サービスが有効化され、実行されている。

手順

  1. アクティブなプロファイルを表示します。

    # tuned-adm active
    Current active profile: network-latency
  2. カスタム TuneD プロファイル用のディレクトリーを作成します。

    # mkdir /etc/tuned/network-latency-custom/
  3. 次の内容を含む /etc/tuned/network-latency-custom/tuned.conf ファイルを作成します。

    [main]
    include=network-latency
    
    [cpu]
    force_latency=cstate.id:1|2

    このカスタムプロファイルは、network-latency プロファイルからすべての設定を継承します。force_latency TuneD パラメーターは、遅延をマイクロ秒 (µs) 単位で指定します。C-状態のレイテンシーが指定された値よりも高い場合、Red Hat Enterprise Linux のアイドルドライバーは CPU がより高い C-状態に移行するのを防ぎます。force_latency=cstate.id:1|2 を指定すると、TuneD は最初に /sys/devices/system/cpu/cpu_<number>_/cpuidle/state_<cstate.id>_/ ディレクトリーが存在するかどうかを確認します。この場合、TuneD はこのディレクトリー内の latency ファイルからレイテンシー値を読み取ります。ディレクトリーが存在しない場合は、TuneD はフォールバック値として 2 マイクロ秒を使用します。

  4. network-latency-custom プロファイルをアクティブ化します。

    # tuned-adm profile network-latency-custom

31.3.4. カーネルコマンドラインオプションを使用した C-状態の無効化

processor.max_cstate および intel_idle.max_cstat カーネルコマンドラインパラメーターは、CPU コアが使用できる最大消費状態 (C-状態) を設定します。たとえば、パラメーターを 1 に設定すると、CPU は C1 より下の C-状態を要求しなくなります。

この方法を使用して、ホスト上のアプリケーションの遅延が C-状態の影響を受けているかどうかをテストします。特定の状態をハードコーディングしないようにするには、より動的なソリューションの使用を検討してください。Disabling C-states by using a custom TuneD profile を参照してください。

前提条件

  • tuned サービスが実行されていないか、C-状態設定を更新しないように設定されています。

手順

  1. システムが使用するアイドル状態のドライバーを表示します。

    # cat /sys/devices/system/cpu/cpuidle/current_driver
    intel_idle
  2. ホストが intel_idle ドライバーを使用している場合は、intel_idle.max_cstate カーネルパラメーターを設定して、CPU コアが使用できる最高の C-状態を定義します。

    # grubby --update-kernel=ALL --args="intel_idle.max_cstate=0"

    intel_idle.max_cstate=0 を設定すると、intel_idle ドライバーが無効になります。その結果、カーネルは、EFI ファームウェアで設定された C-状態値を使用する acpi_idle ドライバーを使用します。このため、これらの C-状態設定をオーバーライドするには、processor.max_cstate も設定します。

  3. すべてのホストで、CPU ベンダーから独立して、CPU コアが使用できる最高の C-状態を設定します。

    # grubby --update-kernel=ALL --args="processor.max_cstate=0"
    重要

    intel_idle.max_cstate=0 に加えて processor.max_cstate=0 を設定すると、acpi_idle ドライバーは processor.max_cstate の値をオーバーライドして 1 に設定します。その結果、processor.max_cstate=0 intel_idle.max_cstate=0 の場合、カーネルが使用する最高の C-状態は C0 ではなく C1 になります。

  4. 変更を有効にするためにホストを再起動します。

    # reboot

検証

  1. 最大の C-状態を表示します。

    # cat /sys/module/processor/parameters/max_cstate
    1
  2. ホストが intel_idle ドライバーを使用している場合は、最大の C-状態を表示します。

    # cat /sys/module/intel_idle/parameters/max_cstate
    0

関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.