rps・rfs等最新linux kernel事例
DESCRIPTION
TRANSCRIPT
従来のNIC・ネットワークスタックの問題点• マルチコア環境においても一つのNICの受信処理は一つのCPU
でしか行えない
• 通信量が多いときにパケット処理の負荷が特定のコアへ大きく偏り性能に悪影響を及ぼす
• 1つのNICに届いたパケットを複数のCPUへ分散させる
• ハードウェアによる実装:RSS
• ソフトウェアによる実装:RPS(Linux)
• 分散先CPUの最適化:RFS(Linux)
11年7月20日水曜日
RSS
NIC
パケットパケットパケット
ハッシュ計算
パケット着信
hash queue
ディスパッチ参照
RX Queue
#0
RX Queue
#1
RX Queue
#2
RX Queue
#3
cpu0 cpu1 cpu2 cpu3
受信処理
割り込み
受信処理
■■
01
11年7月20日水曜日
cpu3cpu2cpu1cpu0
割り込み無効化
プロトコル処理
ソケット受信処理
ユーザプログラム
user buffer
socketqueue
パケット
システムコール
プロセス起床
ハードウェア割り込み
ユーザ空間へコピー
パケットパケット
ソフトウェア割り込み
パケット受信
ハッシュ計算
ディスパッチ
プロトコル処理
ソケット受信処理
ユーザプログラム user
buffer
socketqueue
backlog#1
hash queue 参照■■
01
CPU間割り込み
backlog#2
backlog#3
RPS11年7月20日水曜日
RFS
NIC
デフォルトCPUへ割り込み
CPU0 CPU1 CPU2 CPU3
割り込みハンドラ
ネットワークスタック
プロセス起床
プロセスA
ポーリング
バッファ
ネットワークスタック
プロセス起床
プロセスB
11年7月20日水曜日
RFS hardware acceleration
• RSS対応NICでもRFSが出来るように、ネットワークスタック+ドライバを拡張
11年7月20日水曜日