CONFIG_RFS_ACCELはsfc(SolarflareのNIC)専用だという話

CONFIG_RFS_ACCELは一言でいうとRFSをMultiqueue NIC上で実現する機能で、もう少し説明すると、あるパケットが届いたら宛先プロセスの所属するCPUに対して割り込めるようNICにヒントを出す、というものなのだが、どれくらいの範囲のNICに対応しているのかと思って少し調べてみた。

set_rps_cpuで、NICへのヒントを出しているようだ。

更に見ていくと、dev->netdev_ops->ndo_rx_flow_steerNICドライバ側の関数を呼び出しているところで、ここから実際にNICへヒント情報を書きこむようだ。

しかしこの関数、検索してみるとdrivers/net/ethernet/sfc/efx.cの中で設定されてる例しか見つからないではないか。
まぁその時点でこのデバイスにしか対応してないのはほぼ確定な訳だが、念の為非対応デバイスではどう動くのか確認しよう。

この辺のif文とかとても臭う。ここがfalseだったら上述の関数を叩かずに抜けるようだ。

じゃあこのdev->rx_cpu_rmapを設定している場所は?と見てみる。
ビンゴだ。ここでもこのメンバを初期化しているのはdrivers/net/ethernet/sfc/efx.cだけなようだ。

かくして、この機能って多くのMultiqueue NICへRFSの機能を提供する為のインタフェースとおもいきや、現状ではsfc専用なのだと分かった。

ちなみにixgbeはこの手のフィルタも備えているのに何故対応していないのかと思ったのだが、どうもドライバ側から独自に同等の機能を実現しているように見える(Flow Director)
となると、まだこの手の機能をきちんと実現しているNICは殆ど無い上に、現状ではNIC毎に実現方法が違ってインタフェースも違いますよ、という事なのではないかな。まあ、無くても致命的ではないからね。