Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.6. Receive-Side Scaling (RSS)

Receive-Side Scaling (RSS) はマルチキュー受信とも呼ばれ、ネットワーク受信プロセスを複数のハードウェアベースの受信キューに配布することで、インバウンドのネットワークトラフィックを複数の CPU で処理することが可能になっています。RSS は、単一 CPU のオーバーロードで発生する受信割り込み処理におけるボトルネックを緩和し、ネットワーク遅延を低減させるために使用することができます。
ご使用のネットワークインターフェイスカードが RSS をサポートしているかを判断するには、複数の割り込みリクエストキューが /proc/interrupts にあるインターフェイスに関連付けられているかどうかを確認します。たとえば、p1p1 インターフェイスを確認するには、以下を実行します。
# egrep 'CPU|p1p1' /proc/interrupts
      CPU0    CPU1    CPU2    CPU3    CPU4    CPU5
89:   40187       0       0       0       0       0   IR-PCI-MSI-edge   p1p1-0
90:       0     790       0       0       0       0   IR-PCI-MSI-edge   p1p1-1
91:       0       0     959       0       0       0   IR-PCI-MSI-edge   p1p1-2
92:       0       0       0    3310       0       0   IR-PCI-MSI-edge   p1p1-3
93:       0       0       0       0     622       0   IR-PCI-MSI-edge   p1p1-4
94:       0       0       0       0       0    2475   IR-PCI-MSI-edge   p1p1-5
上記の出力は、NIC ドライバーが 6 つの受信キューを p1p1 インターフェイスに作成したことを示しています (p1p1-0 から p1p1-5)。 また、各キューでいくつの割り込みが処理されたか、どの CPU が割り込みを処理したかも示しています。このケースでは、デフォルトでこの NIC ドライバーが CPU ごとに 1 つのキューを作成し、システムに 6 つの CPU があるので、キューが 6 つ作成されています。これは、NIC ドライバーの中ではかなり一般的なパターンです。
別の方法では、ネットワークドライバーが読み込まれた後に、ls -1 /sys/devices/*/*/device_pci_address/msi_irqs の出力をチェックします。たとえば、PCI アドレスが 0000:01:00.0 のデバイスをチェックするには、以下のコマンドを実行するとそのデバイスの割り込みリクエストキューを一覧表示できます。
# ls -1 /sys/devices/*/*/0000:01:00.0/msi_irqs
101
102
103
104
105
106
107
108
109
RSS はデフォルトで有効になっています。RSS のキューの数 (または、ネットワークアクティビティーを処理するはずの CPU) は、適切なネットワークデバイスドライバーで設定されます。bnx2x ドライバーの場合は、num_queues で設定されます。sfc ドライバーは、rss_cpus パラメーターで設定されます。いずれにしても、通常は /sys/class/net/device/queues/rx-queue/ で設定されます。ここでの device は (eth1 のような) ネットワークデバイス名で、rx-queue は適切な受信キューの名前になります。
RSS を設定する際には、Red Hat では物理 CPU コアあたりのキューの数を 1 つに制限するように推奨しています。ハイパースレッドは分析ツールではよく個別のコアとして表示されますが、ハイパースレッドのような論理コアを含むすべてのコア用にキューを設定することは、ネットワークパフォーマンスの面で有益であるとみなされていません。
RSS が有効になっていると、ネットワーク処理は各 CPU がキューに登録した処理量に基づいて利用可能な CPU 間で同等に配布されます。ただし、ethtool --show-rxfh-indir および --set-rxfh-indir パラメーターを使ってネットワークアクティビティーの配布方法を修正したり、特定のタイプのネットワークアクティビティーを他のものよりも重要なもにに加重配分することもできます。
irqbalance デーモンを RSS と併用してクロスノードのメモリー転送やキャッシュラインバウンスの可能性を減らすことができます。これは、処理ネットワークパケットの遅延を低減します。irqbalance と RSS の両方が使われている場合、irqbalance がネットワークデバイスに関連付けられている割り込みを適切な RSS キューに向けることで、遅延が最小限になります。