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_entriesN で割った値をこのファイルの値に設定します。ここで、N は、デバイスの受信キューの数です。たとえば、rps_flow_entries32768 に設定され、16 の設定済み受信キューがある場合、rps_flow_cnt2048 に設定する必要があります。単一キューデバイスの場合は、rps_flow_cnt の値は、rps_sock_flow_entries の値と同じです。
1 つの送信者から受信したデータは複数の CPU に送信されません。1 つの送信元から受信するデータ量が 1 つの CPU が処理できるものよりも大きい場合は、割り込みの数や CPU の処理量を減らすために、より大きなフレームサイズを設定します。NIC オフロードオプションまたは高速 CPU について検討してください。
RFS と併せて numactl または taskset を使用してアプリケーションを特定のコア、ソケット、または NUMA ノードに固定することを検討してみてください。これにより、パケットが順番に処理されるようにします。