单缓冲区;多插座;Linux下的单系统调用

单缓冲区;多插座;Linux下的单系统调用,linux,performance,sockets,io,kernel,Linux,Performance,Sockets,Io,Kernel,Linux是否有任何本机内核功能,可以将提供的缓冲区发送到一组套接字?一种向量化I/O,除了套接字句柄而不是缓冲区 目标是减少在需要向n个客户端广播一些状态更新的情况下所涉及的u/k转换的数量,这需要迭代每个套接字并发送 一个限制是必须支持TCP套接字(不在我的控制之下)答案是否定的,linux和posix系统都没有您想要的调用。我担心您不会从中得到任何好处,因为每个数据流都将遵循不同的路径,这使得在内核中复制缓冲区比在用户空间中更困难。不在用户到内核模式下复制并不一定意味着在内核模式下复制更好

Linux是否有任何本机内核功能,可以将提供的缓冲区发送到一组套接字?一种向量化I/O,除了套接字句柄而不是缓冲区

目标是减少在需要向n个客户端广播一些状态更新的情况下所涉及的u/k转换的数量,这需要迭代每个套接字并发送


一个限制是必须支持TCP套接字(不在我的控制之下)

答案是否定的,linux和posix系统都没有您想要的调用。我担心您不会从中得到任何好处,因为每个数据流都将遵循不同的路径,这使得在内核中复制缓冲区比在用户空间中更困难。不在用户到内核模式下复制并不一定意味着在内核模式下复制更好

无论如何,在linux中,您都可以实现这种mwrite(或msend)系统调用,因为您有源代码。但我担心你除了头痛什么也不会得到。这种实现的唯一方法是某种复制转移方法,但我认为您不会获得任何优势

最后,一旦您完成了第一个写入(2)调用,在下一个调用中必须再次交换用户缓冲区的概率就太低了,制作缓冲区的第二个和下一个副本的开销将非常低,因为页面都将在核心内存中。您需要一个负载非常高的系统来在系统调用之间交换用户缓冲区