21

Amiya · 5月11日

ASIC智能网卡综述(10):5层协议卸载L5P

先前对智能网卡技术进行介绍,前期介绍了NanoPU、PANIC、Tonic、Corundum、NICA、AccelNet、FairNIC、Lynx、iPIPE等,这次介绍NVIDIA首次提出的“Autonomous NIC Offloads”,原版见APLOS2021,提出在不卸载TCP/IP协议栈的情况下,一种非常独特的想法,基于Mellanox NIC ASIC对L5P的卸载。

在TCP之上的第五层网络协议(L5P)是一种常见的、应用广泛的协议。包括:1)传输安全(TLS)加密协议,该协议通过https为浏览器等提供安全通信;2)NVMe TCP等存储协议,该协议允许系统将远程磁盘驱动器用作本地块设备;3)远程过程调用(RPC)协议,比如Thrift和gRPC;4)key-value 存储协议,比如Memcached和MongoDB。

L5P通常是数据密集型的,因为它的本质是在内存中移动网络流的字节,同时可能在它们上面转换或计算一些有用的函数。这种处理往往计算量大,因此可能会对使用和依赖L5P的应用程序的性能产生不利影响。在大多数情况下,数据密集型处理包括:加密/解密、复制、哈希、(反)序列化和/或(反)压缩。因此,设计有利于加速这些操作的方法,可以提高相应应用程序的性能。

需求:加速L5P处理方法

1)基于软件的实现。它包括内核中的L5P实现,比如nvmetcp和TLS。它还包括绕过内核并利用直接硬件访问的专用软件堆栈。这类技术有助于降低系统软件抽象的成本。但它们在很大程度上与加速实际的数据密集型操作无关。

2)CPU指令加速。它包含专门的数据处理CPU指令,例如支持高级加密标准(AES)、安全哈希算法(SHA)和循环冗余校验(CRC)错误检测的指令。这些指令可以有效地加速L5P,但是它们本身就负责大部分的L5P处理,占用CPU周期,促使使用非CPU加速器,这就是第三类,进一步将其细分为两个子类:off-path加速器和on-path加速器。

3)off-path加速器包括各种可以加密、解密、(反)压缩、摘要和模式匹配数据的设备。它们的目标是允许CPU将大量的数据密集型计算卸载到它们身上,从而使代码运行得更快。问题是:a)CPU仍然必须花费宝贵的周期来输入加速器和检索结果;b)开发人员可能需要以非通用的方式重写应用程序以有效利用加速器;c)无论如何,加速器会消耗内存带宽并增加延迟,因为CPU必须通过直接内存访问(DMA)等机制与它们通信。因此,使用off-path加速器的结果可能不太理想。

出发点:on-path加速器NIC

NIC是路径加速器,它们不会遇到上述问题。因为L5P实际上是网络协议,所以它们在任何情况下都必须运行NIC,因此驱动它们(作为加速器)不会产生任何额外的开销成本。此外,NIC是L5P加速的理想位置,因为它们在数据流经NIC时处理数据,避免了前面提到的延迟增加和与off-path加速器相关的额外内存带宽消耗。NIC已经常规地无缝地处理底层≤4协议的卸载计算,例如数据包分段、聚合和校验和计算与验证。

尽管L5P NIC看起来非常适合,但它们的卸载并不普遍。原因:现有设计将NIC分配给处理L5P的角色,这反过来又要求NIC也处理L5P所依赖的第4层功能,尤其是TCP/IP的功能。这种卸载依赖性是不可取的,因为在硬件中实现TCP阻碍了网络堆栈中的创新,并且当健壮性或安全问题出现时,它会减缓修复速度。由于这些原因,Linux不赞成TCP卸载,Windows最近也不赞成这种支持。

基本思想:autonomous自主卸载

Nvidia提出了自主NIC卸载来解决上述缺点并消除上述不必要的依赖。自动卸载有助于在L5P内存和TCP包之间移动数据的软硬件协作,可以选择在传输的字节上转换或计算某些功能。自动卸载允许L5P软件将其数据密集型操作外包给NIC,同时利用现有的TCP/IP堆栈而不是将其包含在内,从而使NIC设计者不再需要将整个TCP/IP堆栈迁移到NIC中。自主卸载适用于L5P和NIC驱动程序可以直接通信的设置,例如,在内核L5P实现中或使用用户空间TCP/IP堆栈时。

自主卸载的基本思想是L5P和NIC以对中间TCP/IP堆栈透明的方式联合处理L5P消息(可能由多个TCP段组成)。发送消息时,L5P代码“跳过”执行卸载操作,从而将“错误”字节从堆栈向下传递到NIC。然后NIC执行所述跳过的操作,从而在线路上发送正确的消息。相反,在正常情况下,NIC解析传入的消息,同样地执行卸载操作而不是L5P,同时保持TCP/IP堆栈不知道。

在设计自主卸载时,需要解决的一个主要挑战是处理无序流量,这是在TCP数据包丢失、复制、重新传输或重新排序时发生的。使用以下三个原则来应对这一挑战:1)通过在NIC上维护一个小上下文来处理下一个顺序TCP数据包,从而针对常见情况进行优化;2)对于顺序不一致的数据包,采用L5P软件处理;在这种情况下3)采用了一个最简单的NIC-L5P接口,允许L5P软件帮助NIC硬件和驱动程序重新同步和重建上述上下文。

由NIC硬件驱动对传入通信量(比传出通信量更难)的上下文重建,包括:1)使用L5P的某些“magic pattern”特征推测识别输入数据中的L5P消息头;2) 要求L5P软件使用上述接口确认该推测;3)在等待确认的同时跟踪推测的L5P消息;4)在确认到达后无缝地恢复卸载活动。

小结

并非所有普通的L5P都可以自动卸载。自主卸载的基本思想,重要的是,确定了L5P必须能够自主卸载的属性。NVIDIA在Mellanox ConnectX ASIC NIC中实现TLS自动卸载,它卸载了TLS身份验证、加密和解密功能。试验发现它们提供的吞吐量高达3.3倍,延迟低至0.7倍。当I/O设备饱和时,自主卸载的CPU消耗低至0.4倍。

作者:珠穆朗玛2048
来源:https://zhuanlan.zhihu.com/p/363962060

更多FPGA智能网卡相关技术干货请关注FPGA加速器技术专栏。

21 阅读 132
推荐阅读
0 条评论
关注数
1490
内容数
20
阐述CPU性能瓶颈问题如何破解,FPGA如何突围
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
Arm中国学堂公众号
关注Arm中国学堂
实时获取免费 Arm 教学资源信息
Arm中国招聘公众号
关注Arm中国招聘
实时获取 Arm 中国职位信息