1. 什么是零拷贝?
是一种高效的数据传输技术,它可以将数据从内核空间直接传输到应用程序的内存空间中。
零拷贝是为了避免类似传统数据传输中不必要的数据拷贝,将数据直接传输到目标内存区域,以提高数据传输的效率。但是并不是真正的零次拷贝,而是以减少拷贝次数的方式进行数据传输。
优点:大幅度提升数据传输效率,减少了CPU和内存的开销,加速了数据传输过程。
2. 传统的数据传输方式
1.用户进程发出read()系统调用,触发上下文切换,从用户态转换到内核态。
2.CPU发起IO请求,通过直接内存访问(DMA)从磁盘读取文件内容,复制到内核缓冲区PageCache。
3.将内核缓冲区数据,拷贝到用户空间缓冲区,触发上下文切换,从内核态转换到用户态。
4.用户进程发起write系统调用,触发上下文切换,从用户态切换到内核态。
5.将数据从用户缓冲区拷贝到内核中与目的地Socket关联的缓冲区。
6.数据最终经由Socket通过DMA传送到网卡缓冲区,write()系统调用返回,并从内核态切换回用户态。
3. 实现方式和原理
3.1 Sendfile
原理