“零拷贝网络”与“内核旁路”?
- 2024-11-13 08:36:00
- admin 原创
- 24
问题描述:
“零拷贝网络”和“内核旁路”有什么区别?这两个短语是同一个意思,还是不同?内核旁路是“零拷贝网络”中使用的一种技术,两者之间的关系是这样的吗?
解决方案 1:
“零拷贝网络”和“内核旁路”有什么区别?这两个短语是同一个意思,还是不同?内核旁路是“零拷贝网络”中使用的一种技术,两者之间的关系是这样的吗?
TL;DR - 它们是不同的概念,但很可能在内核旁路 API/框架中支持零拷贝。
用户绕过
还应考虑这种通信模式。对于完全不涉及 CPU 的DMA 到 DMAsplice()
事务,这可能是可行的。这个想法是使用或类似函数来完全避免用户空间splice()
。请注意,使用,整个数据流不需要绕过用户空间。可以在用户空间中读取标头,并将数据直接流式传输到磁盘。最常见的缺点是splice()
没有进行校验和卸载。
零拷贝
零拷贝概念只是网络缓冲区固定在原处,不会移动。在许多情况下,这并没有真正带来好处。大多数现代网络硬件都支持分散聚集(也称为缓冲区描述符)等。这个想法是网络硬件理解物理指针。缓冲区描述符通常由以下部分组成:
数据指针
长度
下一个缓冲区描述符
好处是网络报头不需要并存,并且IP 、 TCP和应用程序报头可以物理上与应用程序数据分开存在。
如果控制器不支持此功能,则TCP/IP标头必须位于用户数据之前,以便在发送到网络控制器之前可以填充它们。
零拷贝还意味着一些内核用户 MMU 设置,以便共享页面。
内核绕过
当然,您可以绕过内核。这是pcap和其他嗅探软件一段时间以来一直在做的事情。但是,pcap 不会阻止正常的内核处理;但其概念类似于内核旁路框架所允许的。即直接将数据包传送到用户空间,在那里处理报头。
然而,除非与特定硬件绑定,否则很难看到用户空间会获得绝对胜利的情况。一些网络控制器可能在控制器中支持分散聚集,而其他网络控制器可能不支持。
有各种内核接口来实现内核旁路。困难在于如何处理接收到的数据以及生成要传输的数据。这通常涉及其他设备,因此有很多解决方案。
把它们放在一起...
这两个短语的意思相同还是不同?
它们是不同的,如上所述,希望能够解释清楚。
内核旁路是“零拷贝网络”中使用的技术吗?它们之间有什么关系吗?
事实恰恰相反。内核旁路可以使用零拷贝,而且很可能会支持它,因为缓冲区完全由应用程序控制。此外,内核和用户空间之间没有内存共享(这意味着不需要 MMU 共享页面以及可能导致的任何缓存/TLB 效果)。因此,如果您使用内核旁路,支持零拷贝通常会很有利;所以乍一看,情况可能看起来一样。
如果分散-集中 DMA 可用(大多数现代控制器),则用户空间或内核都可以使用它。在这种情况下,零拷贝并不那么有用。
参考:
有关高带宽内核旁路系统OnLoad 的技术参考。
自 2.6.32 起的PF 环(如果已配置)
David Miller 撰写的Linux 内核网络缓冲区管理。它介绍了如何在内核中管理协议头/尾。
解决方案 2:
零拷贝网络
当您从不在用户空间和内核空间(我指的是内存空间)之间复制数据时,您就进行了零复制网络。例如:
C 语言recv(fd, buffer, BUFFER_SIZE, 0);
默认情况下,数据被复制:
内核从网络堆栈获取数据
内核将此数据复制到
buffer
位于用户空间的。
使用零拷贝方法,数据不会被复制,而是直接从网络堆栈进入用户空间。
内核绕过
内核旁路是指在用户空间中管理自己、网络堆栈和硬件。这很难,但你会获得很大的性能(没有复制,因为所有数据都在用户空间中)。如果你想了解更多信息,这个链接可能会很有趣。
解决方案 3:
零拷贝:
在发送和接收数据包时,所有数据包数据必须从用户空间缓冲区复制到内核空间缓冲区以进行发送,反之亦然。零拷贝驱动程序通过让用户空间和驱动程序直接共享数据包缓冲区内存来避免这种情况。
发送和接收不再指向内核空间中稍后需要复制的缓冲区,而是分配用户空间中的一块内存,并将其映射到给定的物理内存区域,作为内核缓冲区和用户空间缓冲区之间的共享内存,然后将每个描述符缓冲区指向新分配的内存中的相应位置。
解决方案 4:
内核旁路和零拷贝的其他示例是 DPDK 和 RDMA。当应用程序使用 DPDK 时,它会绕过内核 TCP/IP 堆栈。应用程序正在创建以太网帧,NIC 使用 DMA 直接从用户空间内存抓取这些帧,因此它是零拷贝,因为没有从用户空间到内核空间的拷贝。应用程序可以使用 RDMA 做类似的事情。应用程序写入 NIC 直接访问和传输的队列对。RDMA iblibverbs 也在内核中使用,因此当 iSER 使用 RDMA 时,它不是内核旁路,而是零拷贝。
https://www.openfabrics.org/index.php/openfabrics-software.html
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件