Red Hat Training

A Red Hat training course is available for RHEL 8

31.3. ビジー・ポーリング

分析でレイテンシーが高いと、割り込みベースのパケット受信ではなく、ポーリングベースでメリットが得られます。

ビジーポーリングは、ソケットレイヤーコードがネットワークデバイスの受信キューをポーリングできるようにして、ネットワーク受信パスのレイテンシーを短縮し、ネットワークの割り込みを無効にします。これにより、割り込みおよび結果として生じるコンテキストスイッチによって生じる遅延が削除されます。ただし、CPU 使用率も増加します。ビジーポーリングは、CPU がスリープ状態にならないようにします。これにより、追加の電力消費が発生する可能性があります。ビジーポーリングの動作は、すべてのデバイスドライバーで対応しています。

31.3.1. ビジーポーリングの有効化

デフォルトでは、ビジーポーリングは無効になっています。この手順では、ビジーポーリングを有効にする方法を説明します。

手順

  1. CONFIG_NET_RX_BUSY_POLLコンパイルオプションが有効になっているか確認してください。

    # cat /boot/config-$(uname -r) | grep CONFIG_NET_RX_BUSY_POLL
    CONFIG_NET_RX_BUSY_POLL=y
  2. ビジーポーリングの有効化

    1. 特定のソケットでビジーポーリングを有効にするには、sysctl.net.core.busy_poll カーネルの値を 0 以外の値に設定します。

      # echo "net.core.busy_poll=50" > /etc/sysctl.d/95-enable-busy-polling-for-sockets.conf
      # sysctl -p /etc/sysctl.d/95-enable-busy-polling-for-sockets.conf

      このパラメーターは、ソケットポーリング上のパケットを待機して syscalls を選択するためのミリ秒を制御します。Red Hat は、50 の値を推奨します。

    2. SO_BUSY_POLL ソケットオプションをソケットに追加します。
    3. グローバルにビジーポーリングを有効にするには、sysctl.net.core.busy_read0 以外の値に設定します。

      # echo "net.core.busy_read=50" > /etc/sysctl.d/95-enable-busy-polling-globally.conf
      # sysctl -p /etc/sysctl.d/95-enable-busy-polling-globally.conf

      net.core.busy_read パラメーターは、ソケットの読み取り用にデバイスキューのパケットを待機するマイクロ秒の数を制御します。また、SO_BUSY_POLLオプションのデフォルト値も設定されます。Red Hat ではソケット数が少ない場合は 50、ソケット数が多い場合は 100 の設定を推奨しています。非常に多くのソケット (数百) には、代わりに epoll システムコールを使用してください。

検証手順

  • ビジーポーリングが有効になっているかどうかを確認します。

    # ethtool -k device | grep "busy-poll"
    busy-poll: on [fixed]
    
    # cat /proc/sys/net/core/busy_read
    50

関連情報