脑洞:可编程网卡

Posted on November 21, 2016

很久以前,网卡就只是个物理协议转换装置。各种数据的处理都是靠的 CPU。随着网卡支持的速率的提升,还有人们对效率的追求,网卡开始支持将一些操作给 offload 到网卡上执行。比如checksum的计算。再后来,连 TCP 这样的协议都可以直接交给网卡处理。叫 TCP offload。

网卡能 offload 的东西越多,高网络负载下的 cpu 使用率就越低。数据处理也就越有效率。 既然连 TCP 都能交给网卡处理了,为何不更进一步实行通用 offload 呢?

通用 offload 的实现,可以参考显卡的通用可编程渲染管线。搞一个通用网络包处理管线。指定个shader语言,就叫 network shader吧。把 network shader 载入网卡,就可以让网卡执行 network shader 处理收到的数据包。对于太复杂的逻辑,再转给 CPU 上的代码处理,简单的逻辑就可以直接片上处理完成。这对很多 “数据包转发类“ 的引用程序(各种Proxy)来说,可以极大的提升性能。

Comments