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

长程逻辑是转发吞吐劣化的罪魁祸首:

优化方案有两种:

多CPU涉及保序处理,比较复杂,一般不采用,如善用的RSS均不会对单流进行并行处理,因此一般将长程分割成多个短程,流水线接力。

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

wireguard采用的是第二种方式:

这就是单流吞吐比Open虚拟专网好的原因,路线是对的,但wireguard-go未竟全功。

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

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

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

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

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

我也没改啥,只是将很多逻辑移到了原本仅做加密解密的goroutine里,单流吞吐就从800Mbps提升到了1.2Gbps。

寻求质变,架构永远比实现细节重要。epoll的C实现,golang实现,rust实现,不会带来质的差异,愈发差异而已,若是语言带来大不同,定有人早就发现并解决。

当然,我忽略了很多异常处理,所以这个修改仅仅属于测验。

对于wireguard-go,横向扩展没什么技术含量,正如我当年将Open虚拟专网改成多线程一样,这种修改远不如启多个实例,多实例既简单又稳定,只是让人看起来没有工作量罢了。当然,如果你非要修改代码,总有1万种理由,我是过来人,岂能不知,现在回想,甚为惭愧。

提高单流吞吐才更重要,比方说拆流水线。想当年,汽车也是通过这才能批量下线的,从奢侈品变成了大众商品,说到底还是吞吐高了。

说说TCP。

端到端的TCP传输亦可通过流水线提高吞吐,这就是中继的意义所在。SDWAN在长程传输才有意义,而长程传输的延时尺度下,你用内核协议栈实现,你用DPDK实现,你用rust实现,都将不是重点。重点在你如何拆流水线,以及如何处理好每一段。

闲着没事,移动几行代码,把wireguard-go的几行代码移动到加解密goroutine里,竟然带来了惊人的质变,从800M到1.2G,至于从1.2G到1.22G,我就不行了,只能pending。皮鞋胖,写作诗。

浙江温州皮鞋湿,下雨进水不会胖。

用流水线提高转发吞吐相关推荐

  1. 体系结构 流水线吞吐率、加速比、效率

    https://www.icourses.cn/web/sword/portal/shareDetails?&cId=3266#/course/assignments 吞吐率:单位时间内流水线 ...

  2. 流水线性能吞吐率、加速比、效率计算

    流水线性能吞吐率.加速比.效率计算 吞吐率 1.最大吞吐率 Tpmax=1△tTpmax=\frac{1}{△t}Tpmax=△t1​ 2.实际吞吐率 Tp=n(m+(n−1))∗△tTp=\frac ...

  3. 2.10 流水线吞吐率计算

    吞吐率 是指单位时间内流水线所完成的任务数量或输出的结果数量. 上图为例. 指令条数 = 100,流水线执行时间 = 203 吞吐率 = 100/203 最大吞吐率 理想状态的情况.忽略流水线建立时间 ...

  4. 数字系统重要指标-吞吐率和时延

    数字系统重要指标-吞吐率 吞吐率被定义为数字电路单位时间内传输数据的量或单位时间完成的工作量.传输的数据越多或做的工作越多,则吞吐率越高.吞吐率有时候和性能.带宽可以互换使用.对于CPU来说,吞吐率定 ...

  5. (多图) 基于并行流水线结构的可重配FIR滤波器的FPGA实现

    1 并行流水结构FIR的原理 在用FPGA或专用集成电路实现数字信号处理算法时,计算速度和芯片面积是两个相互制约的主要问题.实际应用FIR滤波器时,要获得良好的滤波效果,滤波器的阶数可能会显著增加,有 ...

  6. pipeline 流水线设计

    十大基本功之流水线设计 转载自:http://www.socvista.com/  --- dancia) 本文参考了edacn上ytsun,ericflying,hover_edacn等人的精彩发言 ...

  7. 计算机流水线重要知识,计算机组成与体系结构——流水线相关知识点(常考计算)...

    流水线是软考中经常考的一部分内容,并且常以要求计算的形式出现,所以,这里详细总结一下流水线的相关知识点. 流水线的概念 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术.即可以同时为 ...

  8. Verilog 流水线设计

    一.什么是流水线 流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法. 目的是将一个大操作分解成若干的小操作,每一步小操作的时间较小,所以能提高频率,各小操作 ...

  9. 【学习笔记】微体系结构-单周期、多周期、流水线

    [学习笔记]微体系结构-单周期.多周期.流水线 前言 一.单周期 单周期直通计算机的内核结构 寄存器-寄存器数据通路 1.Load操作 2.Store操作 3.跳转指令 4.条件分支 示例 性能分析 ...

最新文章

  1. prometheus连续查询_Prometheus查询
  2. 阿里巴巴陈武:通过亿级用户App的实践验证,锤炼高质量APM体系
  3. 计算最大回撤_看专业分析研究员如何一步步解读外汇市场结构,实现交易最大化盈利化!...
  4. 如何节省 1TB 图片带宽?解密极致图像压缩
  5. 探索 ConcurrentHashMap 高并发性的实现机制--转
  6. 企业管理软件能带来什么
  7. sql sever 2008基础知识
  8. Js 获取当前页面的高度
  9. 开发机直连 Docker 中的 Redis 容器小教程
  10. php对html加密解密,PHP Mcrypt和HTML5加密API加密/解密
  11. Java 集合 Collection、Iterator
  12. python网课答案查询_网课答案查询助手v1.0 官方版
  13. Proguard打包混淆报错:can't find superclass or interface
  14. jdk 7 下载地址(全新)
  15. 银河麒麟4.0.2安装
  16. win8.1 终于删除可恶的微软拼音
  17. python输出好看的表格
  18. python-pep8规范
  19. 小组取什么名字好_好消息!这座天桥今年年底完工!取什么名字,等你出主意...
  20. 谷从何来,歌向何去——Google产品策略分析

热门文章

  1. 苹果手表表盘时钟与js圆周运动
  2. 成都和重庆计算机专科学校哪个好,电子科技大学“吊打”重庆大学?网友:计算机专业确实可以...
  3. EASE-GRID投影的产品文件(nc/hdf)转Tiff
  4. 易语言源码免杀,会的来,重谢
  5. 想要用好三维建模软件,这些技巧一定可以帮到你
  6. okta使用_如何使用Okta向您的Vue应用添加身份验证
  7. 从头开始学习 Dojo,第 2 部分: 使用 Dojo 掌握面向对象开发
  8. 快速掌握MIPI开发攻略
  9. 10月31日到12月04日学习总结
  10. Globus INK 内部:欣赏下用于苏联航天的机械导航计算机