虽然智能网卡目前已经在各方面取得了成功应用,但仍有一些问题需要业界共同探索解决。
目前业界已取得的共识是:在高性能之外,网卡还需要“智能”,即可编程能力。然而现有集成电路的结构决定了在网卡芯片面积不变的前提下,提升可编程能力必然要在一定程度上牺牲其处理性能。究竟在两者之间如何取舍才能最好地实现满足各种场景的智能网卡,当前尚无定论。当前两种典型的实现方式---基于FPGA和基于NP,在可编程性和处理性能两方面各有优劣,难以兼顾。从理论上来说若想兼顾高性能和智能,一个最优的智能网卡架构应将不同场景下各网络协议栈都需具备的相同处理逻辑固化成专用ASIC芯片,而将其余随场景变化的处理逻辑通过可编程芯片定制化实现。然而现实面对的困难是,目前对网络协议栈各层的功能没有一个很好的模块化抽象,各层内的各个处理逻辑之间甚至跨层的部分逻辑之间都依据场景高度耦合,难以提取有意义的共性和特性逻辑分别由ASIC和可编程芯片处理。
因此,现有智能网卡要想具备足够的可编程能力,能应对各种场景,只能将从上到下各层几乎所有的逻辑都交由可编程芯片实现,牺牲了性能。例如目前的传输层协议中拥塞控制、丢包恢复、保序传输等逻辑都高度耦合在一起,若想利用智能网卡支持定制化的拥塞控制算法,只能在可编程芯片中实现整个传输层逻辑。
若想突破此难题,一种可行的思路是从模块化的角度出发重构现有网络协议栈,在其各层协议中清晰地抽象出共性功能模块以及可依据场景定制的特性模块。例如,SDN协议栈中各种功能都可以抽象为流表和匹配操作的模式",如果能将各SDN场景中所采用的匹配操作进行综合总结,则有可能将其固化为几种类型的通用ASIC处理逻辑模块,而用户只需根据不同场景对这些逻辑模块进行组合编程,即可实现足够智能的网卡功能。又如,可将传输层协议中的拥塞控制、丢包恢复、保序传输等功能抽象为解耦的独立模块,交由可编程芯片处理,而固化其他共有的传输层处理逻辑。从网卡设计的角度出发,各种场景下的网络协议栈中到底哪些部分可以由ASIC固化、哪些部分需要灵活地定制逻辑,值得进一步研究和探索。
领取专属 10元无门槛券
私享最新 技术干货