用流水线提高转发吞吐

流水线不会缩短延时,但能提高吞吐。

长程逻辑是转发吞吐劣化的罪魁祸首:
用流水线提高转发吞吐_第1张图片
优化方案有两种:
用流水线提高转发吞吐_第2张图片
多CPU涉及保序处理,比较复杂,一般不采用,如善用的RSS均不会对单流进行并行处理,因此一般将长程分割成多个短程,流水线接力。

各软件转发产品的实现不谈,仅谈wireguard,抛砖引玉。

wireguard采用的是第二种方式:
用流水线提高转发吞吐_第3张图片
这就是单流吞吐比Open虚拟专网好的原因,路线是对的,但wireguard-go未竟全功。

我觉得loop1和loop2还是太长了,紧接着TUN的loop应该只做一件事:

  • 将TUN读出的packet放入buffer,或将buffer作为packet写入TUN。

紧接着socket的loop应该只做一件事:

  • 将socket读出的数据放入buffer,或从buffer取出一部分写入socket。

剩下的就是保序和加解密处理了,这些可以充分调用以及利用所有CPU,将核心处理池化(实际上就是分离了保序和处理,说到底还是要处理标量,摆脱保序带来的约束)&#

你可能感兴趣的:(面试,学习路线,阿里巴巴,深度学习,java,经验分享)