49得票4回答
"零拷贝网络"与"内核旁路"的区别?

"零拷贝网络"和"内核绕过"有什么区别?它们是两个意思相同的短语吗,还是不同的?内核绕过是在"零拷贝网络"中使用的一种技术,这就是它们之间的关系吗?

28得票2回答
Linux有零拷贝技术吗?splice或sendfile?

当splice被引入时,内核邮件列表上讨论了sendfile是基于splice重新实现的。splice SLICE_F_MOVE的文档说明如下: 尝试移动页面而不是复制。这只是对内核的提示:如果内核无法从管道中移动页面,或者管道缓冲区不参考完整页面,则页面仍可能被复制。该标志的初始实现存在缺...

20得票1回答
vmsplice() 和 TCP

在原始的vmsplice()实现中,建议如果你有一个用户空间缓冲区,其大小是管道中可容纳页面数量的两倍,则对缓冲区的后半部分成功执行vmsplice()将确保内核完成使用缓冲区的前半部分。但事实并非如此,特别是对于TCP,内核页面将一直保留,直到从另一侧收到ACK。修复这个问题留作未来的工作,...

19得票2回答
哪些文件系统支持通过Linux的splice(2)进行拼接?

splice系统调用的man页面指出,如果以下情况之一发生,splice可能会失败并将errno设置为EINVAL: 目标文件系统不支持splice;两个描述符中没有一个是pipe;或者针对不可寻址设备给出偏移量。 哪些文件系统支持splice?

14得票2回答
有没有一种方法可以创建一个 std::string,它引用一个外部提供的缓冲区但不拥有它?

基本上,如果有一个预加载了空终止字符串的缓冲区和要引用的长度,并且想将其引用传递到一个接受std::string&但不复制字符串或拥有它的方法中,是否可以这样做? 这只会有一个有限的生命周期,管理方式是只在缓冲区有效时才有效。

14得票2回答
零拷贝用户空间TCP发送dma_mmap_coherent()映射内存

我正在运行Linux 5.1,这是一个带有两个ARMv7内核的FPGA芯片Cyclone V SoC。我的目标是从外部接口收集大量数据,并通过TCP套接字流式传输(部分)此数据。挑战在于数据速率非常高,可能接近饱和千兆以太网界面。我已经有了一个工作实现,只使用write()调用将数据发送到套接...

13得票2回答
Python支持零拷贝I/O吗?

我有两个打开的文件对象,dest和src。文件对象dest以写模式打开,并将偏移量设置为文件内的某个位置,而文件对象src以读模式打开。我需要做的就是从src的当前位置读取到文件结尾,并尽可能快地将内容传输到dest。 如果我使用Java编程,我可以利用FileChannel#transfe...

13得票1回答
使用管道、tee()和splice()向多个套接字发送数据

我正在使用tee()来复制一个“主”管道,以便使用splice()写入多个套接字。由于我可以将数据通过splice()函数传输到目标套接字的速度不同,因此这些管道将以不同的速率被清空。因此,当我下一次尝试向“主”管道添加数据并再次使用tee()函数时,可能会出现这样一种情况:我可以将64KB的...

11得票1回答
为什么Linux内核中没有零拷贝网络?

我想知道linux内核(或任何其他主流操作系统)为什么没有零拷贝网络功能? 零拷贝是指,数据包/数据流不会在传递到用户空间的应用程序时进行复制,而是使用一种内存池类型的分配器在内核和用户空间之间共享内存。 我自己想出了三个理论: a)我猜有安全问题。 但是,当它们仅用作缓冲区时,用户空间和内...

10得票1回答
在Windows操作系统中是否存在零拷贝技术?

阅读这篇零拷贝文章后, Windows操作系统(Server 2003、2008、2008 R2)中是否存在零拷贝技术?