(如果不使用零拷贝技术,普通的IO操作在OS层面是如何执行的)
mmap+write
sendfile+DMA gather copy
splice
mmap+write零拷贝技术
mmap+write...拷贝技术替换了传统的read+write技术,减少了一次CPU拷贝,mmap实际上Linux提供的一种内存映射技术,他把用户进程的一段虚拟地址映射到磁盘文件的地址....因此使用mmap技术是为了把内核缓冲区的地址和用户缓冲区进行映射,从而使内核缓冲区地址和应用程序内存的地址进行共享,从而减少内核缓冲区到用户缓冲区的拷贝,如下图
上图表示,整个过程会有四次切换,和两次...,减少两者之间的CPU拷贝
上图表示,整体上经历了两次切换,和两次DMA拷贝,0次cpu拷贝
我们常用的组件kafka就是用的sendfile+DMA gather copy技术,而我们的RocketMq...使用的是mmap+write技术等等