Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于匿名内存的splice()— ;有什么性能优势吗?_Linux_System Calls_Splice - Fatal编程技术网

Linux 用于匿名内存的splice()— ;有什么性能优势吗?

Linux 用于匿名内存的splice()— ;有什么性能优势吗?,linux,system-calls,splice,Linux,System Calls,Splice,根据splice的手册页,它允许您 在两个文件描述符之间移动数据,而不在内核地址空间和用户地址空间之间复制 这是否意味着如果使用匿名内存(例如从memfd\u create?内存-([vm]拼接)->管道-(拼接)返回的fd),会有任何性能优势->socket可以比send或write系统调用稍微更有效,因为内核可以转发指针并指示网卡从源进行DMA,而不是从用户空间缓冲区复制,前提是它们可能会被修改。但这样做意味着您向内核承诺,在内存真正从发送队列中耗尽之前,不会修改内存,这可能会在调用完成后花

根据
splice
的手册页,它允许您

在两个文件描述符之间移动数据,而不在内核地址空间和用户地址空间之间复制

这是否意味着如果使用匿名内存(例如从
memfd\u create

内存-([vm]拼接)->管道-(拼接)返回的fd),会有任何性能优势->socket可以比send或write系统调用稍微更有效,因为内核可以转发指针并指示网卡从源进行DMA,而不是从用户空间缓冲区复制,前提是它们可能会被修改。但这样做意味着您向内核承诺,在内存真正从发送队列中耗尽之前,不会修改内存,这可能会在调用完成后花费任意时间。所以这对于不被修改的内存来说是非常有用的。或者,您可以使用该选项在页面最终发送时接收通知,以便重新使用该页面


通常,在可能的情况下使用sendfile更简单

它还取决于另一端。您要从/到哪里传输?@ZangMingJie-假设dst是tcp连接:)不,您不能在tcp和memfd之间使用拼接,这些都不是管道。