APP下载

基于智能网卡的快速数据传输技术研究

2020-10-09苏哲蓉陈修旭曾骁勇杜方

数字技术与应用 2020年8期
关键词:数据传输

苏哲蓉 陈修旭 曾骁勇 杜方

摘要:针对网络密集型应用程序实现低延迟的需求,本文分析了使用普通网卡的传统内核网络协议栈的不足。基于智能网卡的内核旁路技术,探索了其对于提高数据传输速率的优势和有效性。

关键词:低延迟;内核旁路;数据传输

中图分类号:TN929.5 文献标识码:A 文章编号:1007-9416(2020)08-0071-02

0 引言

近年来,网络规模日益增长,催生了一系列面向用户的应用程序例如网络购物、搜索引擎、在线直播等。其中的网络传输数据量日益增大,而传统内核网络协议栈的处理能力无法与之相匹配。过高的延迟不能为用户提供清晰良好的使用体验,并且在高频交易等领域将导致财务损失。因此就对延迟性能提出迫切需求,要求实现微秒级的延迟和高效的数据包传输速率。

本文将利用solarflare智能网卡所提供的内核旁路软件解决方案之一的Onload,解决传统内核网络协议栈的性能瓶颈。我们将分析传统网络协议栈的工作原理和缺陷,以及利用智能网卡中的高度加速的网络中间件onload,证明其加速网络数据传输以实现网络低延迟[1]的优势。

1 传统网络协议栈的问题

在普通网卡中数据包在传统网络协议栈中的处理如下,当数据包传输到普通的NIC,它将被DMA直接送到由NIC驱动程序所维护的环形缓冲区。接着,NIC将向处理器发送硬件中断,通知其处理此数据包。当OS收到中断后,它将分配sk_buff结构,并在softIRQ上下文中调用net_if_ receive_skb。若是IP数据包,则将调用ip_rcv,将数据包传输到内核协议栈以进行高级处理。完成TCP/IP处理后,数据包将从内核传送到用户空间。最后,应用程序可以通过标准POSIX调用,从套接字读取数据包并执行下一步操作。

从以上过程可以看出,内核网络协议栈的开销主要来源于以下三方面:

(1)系统调用开销:当应用程序请求系统调用以和内核协议栈中的网络套接字进行交互时,包的处理需要在中断处理、内核态和用户态中不停地切换。那么频繁的系统调用和上下文切换必然带来了额外的处理开销,从而导致性能下降。

(2)额外的数据拷贝:在接收或发送数据时,数据包需要在用户空间缓冲区和内核之间进行拷贝。

(3)内核数据包的处理:处理的每个数据包将会导致中断、动态内存分配和复杂的数据结构的构建。如sk_buff(socket buffer)不仅结构复杂会增加内存的读写开销,且在处理数据包时,其频繁地被申请和释放会占用大量系统资源。

2 智能网卡下的内核旁路软件Onload增加数据传输速率的优势

内核旁路技术是指在用户空间中同时运行应用程序和网络驱动程序,绕过了内核网络协议栈,将原始数据包缓冲区直接传递到用户空间,而用户进程封装好的数据包则直接由网卡驱动发送出去,这使得所连接的应用程序端能以更低且更一致的延迟来处理更多消息。

基于智能网卡下的Onload是个高性能用户空间协议栈[2],本文主要讨论其中的openonload。OpenOnload是IP上的TCP和UDP的实现,它被动态链接到用户模式应用程序的地址空间中,并允许对网络适配器硬件的直接但安全访问。可以在不涉及操作系统的情况下,通过应用程序直接将数据传输到网络并从网络接收数据。因为绕过了内核,这样就可以避免了相应的破坏性事件,例如系统调用,上下文切换和中断,从而提高了处理器可以执行应用程序代码的效率。这也直接减少了主机处理的开销,为应用程序处理留出了更多的CPU时间。对于如市场数据和交易应用程序这样的网络密集型应用程序,这种影响更为明显。

使用传统内核协议栈时,应用程序会在OS内核上进行调用,以发送和接收来自网络的数据。从应用程序到内核的转换是一项代价巨大的操作,这等效于数百或数千条指令。当应用程序使用OpenOnload来发送或接收数据时,其可以直接访问网络适配器上的分区,无需访问操作系统。图1展示了这两种方案的对比。

OpenOnload使数据在用户进程内完全完成了TCP/IP处理,从而消除了代价巨大的应用程序与内核之间的转换。且基于对内核的绕行,避免了额外的数据拷贝,无需在用户空间缓冲区和内核之间进行数据拷贝。在应用程序和网络适配器之间传输数据时,这种零拷贝跳过了中间缓冲区来提高网络应用程序的性能。

同时,将硬件级别的NIC划分为多个受保护的虚拟NIC(VNIC),授予應用程序直接访问VNIC的权限,而无法访问系统的其余部分(包括不属于该应用程序的其他VNIC或内存)。因此,在保证了安全性和系统的完整性前提下,可实现最佳性能。此外,还对Onload中TCP/IP堆栈进行了高度调整,从而进一步节省了开销。简而言之,减少的开销意味着减少的延迟。使用onload模式所节省的开销,使得应用程序可以使用更多的CPU计算能力来完成有用的工作。

3 结语

实验结果表明,对于相同大小的数据,基于智能网卡的onload协议栈来绕过内核的方案相比于普通网卡下的经过内核的传统方案,其所消耗的数据传输时间明显缩短。综上所述,基于onload模式下内核旁路的优势,应用程序可以保持在用户级别,等待请求到达网络适配器并直接处理它们。内核到用户之间的转换以及中断的消除可以大大减少延迟,加速了网络数据传输以实现对网络低延迟的迫切需求。

参考文献

[1] 左旭彤,王莫为,崔勇.低时延网络:架构,关键场景与研究展望[J].通信学报,2019,40(8):22-35.

[2] 别体伟,华蓓.用户空间协议栈的并行化与性能优化[J].电子技术,2016,45(8):50-56.

猜你喜欢

数据传输
具有物联网功能的医用恒温反应箱的研制
具有物联网功能的医用恒温反应箱的研制
基于Ad Hoc的微震监测数据传输系统设计
基于FPGA的可反馈式同步串行通信技术