Linux面试题3:Linux零拷贝技术

zero-copy技术

Linux网络IO数据传输过程图

整个操作过程中,做了四次用户态和内核态的状态切换,数据从网卡copy到内核缓冲区,再从内核缓冲区copy到user-space;写入时从user-space copy到内核缓冲区,再从内核缓冲区copy到硬盘设备。做了太多的无用功。

ZERO-COPY主要分为三个大的优化方面

  • api接口方面:通过新的api接口,可以减少状态切换,介绍用户数据的copy
  • 硬件支持方面:通过新的硬件支持,让cpu可以从copy数据的逻辑中释放出来, 让新硬件代替cpu做数据copy功能(DMA技术
  • 用户态直接操作硬件:比较理想,局限性很多

api层面主要有以下几个linux支持的接口,这些接口也都由golang来对应判断

  • IO.Copy() IO.ReadFrom() IO.WriteTo()
  • linux -> splice() / sendFile()
posted @ 2022-11-27 15:01  fenngz  阅读(34)  评论(0编辑  收藏  举报