传统IO一次读写操作要进行4次拷贝3次空间切换。
比如从硬盘读取文件操作,当read的时候,首先从用户空间切换到内核空间(一次空间切换),在内核空间通过DMA(Direct Memory Access,即直接内存拷贝,它是一种不使用CPU就能完成拷贝的技术)将硬盘的数据拷贝到内核空间的buffer(一次拷贝),然后再利用CPU拷贝技术将内核的buffer拷贝到用户空间(一次空间切换+一次拷贝)的buffer,当在用户空间处理完之后准备write的时候就会利用CPU拷贝技术将用户空间的buffer拷贝至内核空间的buffer(一次空间切换+一次拷贝),然后再利用DMA技术拷贝至硬盘(一次拷贝)。
首先要明白的是没有真正意义的零拷贝,所谓的零拷贝是没有CPU拷贝的参与,而DMA拷贝是无法避免的。所以就看我们怎么去想办法减少CPU拷贝了。
网友评论