Red Hat Training

A Red Hat training course is available for RHEL 8

31.5. パケットスタンプの受信

RPS(Receive Packet Steering)は、RSS(Receive Side Scaling)と同様に、パケットを特定のCPUに誘導して処理するために使用されます。ただし、RPS はソフトウェアレベルで実装されており、単一のネットワークインターフェースカードのハードウェアキューがネットワークトラフィックのボトルネックとなるのを防ぐのに役立ちます。

RPS は、ハードウェアベースの RSS と比較していくつかの利点があります。

  • RPS は、どのネットワークインターフェースカードでも使用できます。
  • 新しいプロトコルに対応するために、ソフトウェアフィルターを RPS に簡単に追加できます。
  • RPS は、ネットワークデバイスのハードウェア割り込みレートを増やしません。ただし、プロセッサー間割り込みは導入されます。

RPS は、ネットワークデバイスごとに設定され、受信キューは /sys/class/net/device/queues/rx-queue/rps_cpus ファイルで設定されます。device はネットワークデバイスの名前になります。enp1s0 や rx-queue は、rx-0 などの適切な受信キューの名前です。

rps_cpus ファイルのデフォルト値は 0 です。これにより RPS が無効になり、CPU がネットワークの割り込みを処理し、パケットも処理します。RPS を有効にするには、指定のネットワークデバイスからのパケットを処理してキューを受信する CPU で適切な rps_cpus ファイルを設定します。

rps_cpus ファイルは、コンマ区切りの CPU 表記を使用します。したがって、CPU がインターフェースの受信キューの割り込みを処理できるようにするには、プレースホルダー内のその位置の値を 1 に設定します。例えば、CPU0123で割り込みを処理する場合は、rps_cpusの値を16進数で15を表すfに設定します。バイナリー表示では、1500001111(1+2+4+8) です。

単一送信キューを持つネットワークデバイスには、同じメモリードメインの CPU を使用するように RPS を設定することで、最善のパフォーマンスを実現できます。NUMA 以外のシステムでは、利用可能な CPU がすべて使用できることを意味します。ネットワーク割り込みレートが非常に高い場合には、ネットワーク割り込みを処理する CPU を除くと、パフォーマンスが向上することがあります。

複数のキューを持つネットワークデバイスの場合、デフォルトで CPU を各受信キューにマッピングするように RSS が設定されているため、通常 RPS と RSS の両方を設定する利点はありません。ただし、RPS が CPU よりも少ないハードウェアキューがあり、RPS が同じメモリードメインの CPU を使用するように設定されている場合には利点があります。