快捷搜索:  汽车  科技

关于零拷贝技术你了解多少(零拷贝到底是什么)

关于零拷贝技术你了解多少(零拷贝到底是什么)CPU拷贝是否使用用户层缓存用户层直接I/O,就是磁盘数据直接拷贝到用户层缓存,不用内核层的数据拷贝。零拷贝在数据由磁盘向网卡或其他设备流动,或者从网卡或其他设备向磁盘流动,数据要经过多次的拷贝,以及用户态和核心态上下文多次切换的应用场景中才能够发挥作用。拷贝方式

以名解意

零拷贝,从字面意思理解,就是零次拷贝,没有数据拷贝。进一步去分析,是什么没有数据拷贝,是用户层进程没有拷贝,这种零拷贝不算是真正的零拷贝。

进一步分析,CPU也不参与数据拷贝,CPU和用户进程都没有数据拷贝,就能够节省CPU的工作量,节省用户层与内核层之间的切换,通过DMA技术、管道技术、内存区域映射技术等实现CPU不参与数据拷贝和减少用户层和内核层的切换次数,以提高程序读写性能的方式。

以上就是主流零拷贝的思路,就是尽量减少用户层和核心层的上下文切换、尽量不用CPU拷贝,不用用户层缓存区,其实除此之外还有两种零拷贝的思路。

写时复制方案,就是多个进程共享一个内存空间的数据,当一个进程需要修改数据的时候,将数据拷贝到自己进程的地址空间;如果只是读取操作,则不需要拷贝数据,也就是零拷贝。

用户层直接I/O,就是磁盘数据直接拷贝到用户层缓存,不用内核层的数据拷贝。

应用场景

零拷贝在数据由磁盘向网卡或其他设备流动,或者从网卡或其他设备向磁盘流动,数据要经过多次的拷贝,以及用户态和核心态上下文多次切换的应用场景中才能够发挥作用。

核心逻辑拷贝方式

拷贝方式

是否使用用户层缓存

CPU拷贝

DMA拷贝

上下文切换

系统调用

是否零拷贝

传统方式(read write)

2

2

4

read/write

内存映射(mmap write)

1

2

4

mmap/write

sendfile

1

2

2

sendfile

sendfile DMA Gather Copy

0

2

2

sendfile

splice

0

2

2

splice

传统方式(read write)

关于零拷贝技术你了解多少(零拷贝到底是什么)(1)

传统方式(read write)

内存映射(mmap write)

关于零拷贝技术你了解多少(零拷贝到底是什么)(2)

内存映射(mmap write)

Sendfile

关于零拷贝技术你了解多少(零拷贝到底是什么)(3)

Sendfile

sendfile DMA Gather Copy

关于零拷贝技术你了解多少(零拷贝到底是什么)(4)

sendfile DMA Gather Copy

splice

关于零拷贝技术你了解多少(零拷贝到底是什么)(5)

splice

总结

理解零拷贝,关键的是理解什么是零拷贝,涉及到硬件设备、内核层、用户层缓存数据区之间数据的拷贝,以及它们之间数据拷贝采用的技术,有CPU拷贝、DMA拷贝、内存区域映射免拷贝等。

理解了这些框架,明白了零拷贝的真正含义,遇到任何的问题就能够迎刃而解。

猜您喜欢: