Linux(服务器编程):百万并发服务器系统参数调优( 七 )

九、总结附加用户态协议栈设计

  • 在服务器承载百万客户端的时候 , 这时候会有大量的数据在进行交互 。 对于默认的应用程序来说 , 其数据的传输都要经过协议栈缓冲区 , 如下图所示:
    • 客户端发送数据到服务端时 , 数据先达到网卡 , 然后将数据拷贝到协议栈中 , 最后再把数据从协议栈中拷贝到服务端程序中
    • 服务端回送数据时是相反的顺序 , 先把数据从服务端程序拷贝到协议栈 , 然后再把数据拷贝到网卡发送给客户端

Linux(服务器编程):百万并发服务器系统参数调优文章插图
  • 从上图可以了解 , 当服务端与百万客户端数据交互的时候会带来下面的弊端:
    • 数据要进行大量的拷贝 , 从而造成程序的性能降低
    • 数据交互速度受限与缓慢
  • 用户态协议栈设计:通过上面我们知道 , 数据要经过一层协议栈 , 会对性能带来影响 , 因此可以自己设计“用户态协议栈” , 大致原理如下:
    • 数据交互时不再经过协议栈 , 将网卡与服务端的数据mmap映射到内存中 , 直接从内存中进行交互 , 从而减少了中间的拷贝
    • 这就是常说的“零拷贝”

Linux(服务器编程):百万并发服务器系统参数调优文章插图