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 キューに向けることで、遅延が最小限になります。