Do other operating systems implement the Linux system call splice?

独自空忆成欢 提交于 2019-12-07 04:23:27

问题


In an application I am developing I use splice on Linux for socket-to-socket data transfer.

  1. Do other operating systems (specifically at least Windows, OS X and FreeBSD) implement splice or an equivalent solution?
  2. Is it possible to imitate socket-to-socket data spliceing on Windows with sendfile¹ + memmap¹?

¹ Both exist on Windows under different names which I do not remember.


Update

You can see the performance improvements of splice vs user space buffers on Linux.

  • DF, DR, F, MF, MR are my application in its different tunneling modes, NX is NGINX web server
  • -p+t uses the Linux system call splice
  • +p-t uses a portable implementation with user space buffers
  • +p+t uses a portable implementation with user space buffers and multiple OS threads
  • bars represent throughput in gigaBYTE s per second
  • a single 1 gigabyte (1048576000 bytes) file was requsted 4 times by 4 concurrent clients

回答1:


OpenBSD has sosplice and somove: http://www.openbsd.org/cgi-bin/man.cgi?query=sosplice




回答2:


TransmitFile comes to mind as one such way in winsock to stream from one file handle to a socket, but I an not certain if that will help you as it's for streaming from file->disk. You might be able to use it with a memory mapped file handle.

I've heard a few people in the past speak of "kernel mode" as the way to speed up some echo and simple server operations, but I've never done it.

Some links on kernel mode winsock:

http://blogs.msdn.com/b/wndp/archive/2006/02/24/introduction-to-winsock-kernel-wsk.aspx

http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx



来源:https://stackoverflow.com/questions/12230316/do-other-operating-systems-implement-the-linux-system-call-splice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!