Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
9.3.7. RFS (Receive Flow Steering) の設定
Receive Flow Steering (RFS) は RPS の動作を拡張し、CPU キャッシュのヒットレートを増やし、ネットワークレイテンシーを低減します。RPS はキューの長さのみに基づいてパケットを転送し、RFS は RPS バックエンドを使用して最も適切な CPU を算出します。次にパケットを消費するアプリケーションの場所に基づいてパケットを転送します。これにより、CPU キャッシュの効率が上がります。
RFS はデフォルトで無効になっています。RFS を有効にするには、以下の 2 つのファイルを編集する必要があります。
/proc/sys/net/core/rps_sock_flow_entries
- このファイルの値を同時にアクティブになるであろう接続の予測最大数に設定します。適度なサーバー負荷の場合は
32768
の設定値を推奨しています。入力した値はすべて直近の 2 の累乗で切り上げられます。 /sys/class/net/device/queues/rx-queue/rps_flow_cnt
- device は設定するネットワークデバイス名 (
eth0
など)、rx-queue は設定する受信キューになります (rx-0
など)。rps_sock_flow_entries
をN
で割った値をこのファイルの値に設定します。ここで、N
は、デバイスの受信キューの数です。たとえば、rps_flow_entries
が32768
に設定され、16 の設定済み受信キューがある場合、rps_flow_cnt
を2048
に設定する必要があります。単一キューデバイスの場合は、rps_flow_cnt
の値は、rps_sock_flow_entries
の値と同じです。
1 つの送信者から受信したデータは複数の CPU に送信されません。1 つの送信元から受信するデータ量が 1 つの CPU が処理できるものよりも大きい場合は、割り込みの数や CPU の処理量を減らすために、より大きなフレームサイズを設定します。NIC オフロードオプション または高速 CPU について検討してください。
RFS と併せて numactl または taskset を使用してアプリケーションを特定のコア、ソケット、または NUMA ノードに固定することを検討してみてください。これにより、パケットが順番に処理されるようにします。