简单展示以太网和 CPU 的发展轨迹:
图中那条粗的约束线扭曲了坐标轴,三个维度不再正交,最终卷于一点,这封闭的体积就是极限。由于 cpu 在执行串行流,加之冯诺依曼内存墙,它将比以太网芯片更快更早逼近极限。
以太网提速比 cpu 更快更有效,虽然一开始二者几乎同步发展,但越往后网络带宽的发展速度相对越快:服务器网卡比 cpu 更快,交换机交换容量比服务器网卡更快,网络处理比端计算更快。(事实上哪是更快,只是单位时间更多)
造成这结局的原因很容易理解,同样是芯片,网络芯片功能更单一,更容易堆砌相同的组件来完成,并行干扰很容易通过调制和编码解决,而 cpu 作为通用芯片,集成密度越高越复杂,复杂性通过堆砌多核可缓解,可多核又面临内存带宽瓶颈。网络芯片可看做道路运输,很容易通过提高车速,增加车道,加大集装箱容积来提高运量,而 cpu 则可看做生产车间,增加工人和机器,同时提高机器运转速度只会让工人,机器间的协作更不易,增加新的车间后多个车间的工人从同一处取配料,则又增加了协作瓶颈,产量自然不能按经理预期提高。
似乎又回到了电话时代,端成了哑端,网络设备将更厉害。瘦网胖端的互联网设计理念还成立吗?
当然成立!这要求未来的网络协议要更简练。全链路瓶颈在计算,而协议处理需要消耗计算资源,想想 tcp sack,又是遍历又是查找,ipv4 的协议头不定长显然也会增加协议处理复杂性。
曾经瘦网胖端说端到端协议比如 tcp 复杂些无所谓,毕竟 cpu 相对更强,ip 简单就行,未来的 cpu 相对网络更慢,端到端协议也不允许胖了,整个网络协议全要瘦身。
未来的端到端协议肯定不能是保序协议,必是乱序协议,多个 cpu 核共同打满 sender 带宽,receiver 的多 cpu 核共同处理收到的数据,胖端指的是 cpu 多显得胖,而不是协议复杂显得胖。也许未来 100+ 众核才能服务好一个 1.6Tbps 端口,保序流的同步约束只能让一个 cpu 核处理单流,想想一个孤单弱小的 cpu 核面对 1.6Tbps 时是多么无力。
未来的端到端协议一定要具备被众 cpu 核一起处理的能力,但每个核的处理都不能过于复杂,端到端协议应该更容易在空间上展开而不是在时间上展开(虽然对于结果,二者是等效的):
tcp 和 quic 都不适合,包括各自的 mp(multi-path) 版本也不行,先把本就可以散列的数据绑在一个 connection,再在 multi-path 分发这 connection 的数据包,这种迂回的操作显然没有跳出传统的 stream-style 认知,协议的本意显然是想将 connection 作为一个整体被控制,就陷入了 stream-style 的泥潭,同流同核就自然而然,然后是各种 load 不 balance 而诞生出的各种 offloading “优化方案”。
乱序传输协议慢慢多了,我之前说过,传输协议把 cpu 发展的路子再走一遍就行,cpu 如今都没解决乱序执行的 trade-off 的根源在于指令本来就是时间序的 stream-style,顺序中强制乱显然就很难,但 data 没有时间序约束,只是因为人们潜意识中一直叫它 data stream,这个 stream-style 是强加的,data 本身显然只有空间序,而空间序是可以打乱后重组的。
用 1~10 条 tcp 流填满 100Gbps 端口和把数据 “喷射” 到对端,哪个更难?忘记比记住更难。文章来源:https://www.toymoban.com/news/detail-765043.html
浙江温州皮鞋湿,下雨进水不会胖。文章来源地址https://www.toymoban.com/news/detail-765043.html
到了这里,关于从带宽和 cpu 的发展看未来的传输协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!