时间:2023-02-15来源:系统屋作者:zhijie
在一张白纸上,画出一堆的门电路,然后随性随意组合它们,慢慢的,我突然发现,这个电路就是TSO的框架了。我记得上周帮人固化了路由转发表,然而那种固化行为可能会因为成本过高而被pass掉,毕竟如今的软实现已经够用了吧。所以只有核心传输网才需要这种固化的转发表,然而TSO却是服务器领域的首推,服务器太多了,远比核心转发设备多,它们的CPU需要减负,确实,CPU去计算一些固定模式的东西,有点浪费,它应该花更多的精力去处理一些不可控的东西。所以TCP分段这种事情自然而然就由网卡代劳了。你,我,他,我们都遇到过TSO,但是我们只会开启,关闭它,如果你想知道它到底是怎么Offload的,请看下图,让电流流一流:
TCP分段和IP分片的区别很大,这个事你一定要明白。然后才可以看懂上面的图。
以上的解析只是一个特例,事实上,所有的硬件加速机制无非都是一样的机制。当我在看Intel千兆/万兆网卡的手册时,我想到在芯片的内部,这种电路的元件几乎是海量的,实现了RSS,硬件hash分类等。这就是我所谓的江河泛滥,沿着沟壑瞬间吞噬大地,我们该如何挖沟填壑,这不是本文的目的,本文只是描述了这种可能性。这也是这种专用电路和通用CPU之间的本质区别。CPU存在着一个指令集,这意味着它是关注于外部如何调用的,而专用电路的关注点在于内部的执行逻辑,它几乎不对外提供任何接口,唯一的就是设置几个寄存器的值,比如MTU,数据包长度,数据包头长度等,其它的执行逻辑,外部无权过问。这是串行编程和并行执行的本质区别。
2023-02-15
Linux系统NBMA和BMA的交换方式介绍2023-02-14
Linux系统xargs命令的用法2023-02-14
Linux系统如何查看进程的线程数?在Linux系统中VLAN,三层交换和Trunk是三个容易混淆的概念。如果对这三个概念只是一知半解的,就会不可避免绕一些弯路,浪费不少时间。本文就来跟大家介绍一下Linux系统VLAN、三层交换和Trunk的区别。...
2023-02-14
Linux系统Go 语言的全称是golang,是一种编程开发语言。Go语言的特点就是开源、安全、快速等等。在Linux系统中有很广泛的应用。本文就来介绍一下Linux系统安装Go语言的方法。...
2023-02-14