To be a better coder
分类: LINUX
2019-08-17 10:58:25
https://cloud.tencent.com/developer/article/1017242
可有没有人注意到其实转发芯片绝大部分都不是可编程芯片,无论是路由器中采用的NP,还是交换机中采用的Switch
Chip,都不是可编程芯片。这些芯片的硬件转发逻辑已经设计好,无法通过调整软件参数去更改,软件设置的只是让这些功能模块可以运转起来,但绝不可以调整它们的处理顺序,而且软件设置的范围都是提前预定好的。比如我们需要在交换机上实现入方向上的报文过滤,这样就需要在转发芯片入方向下发一些ACL过滤规则。在一些商用转发芯片上,这些ACL过滤规则固定下发在转发模块之后,如果进入芯片的是三层转发流量,此时下发的ACL过滤规则匹配的就是三层转发之后的报文,此时报文MAC已经发生了替换,下发的ACL规则只能匹配转发之后的报文特征,这就是不能可编程实现的局限性。一个报文进入转发芯片,从入端口检查,到查找转发表项,再到出口,这中间要经过几十个功能模块的处理,有修改报文优先级的,有修改报文VLAN
TAG的,有做队列调度的,有做路由策略的等等,这些功能模块都是按照固定顺序来对报文处理的,灵活性比较差,常常会遇到不少实现上的限制,若能实现网络芯片可编程将可以很好解决这些问题。
那么什么才是ASIC芯片?它与我们常见的CPU、GPU等通用型芯片相比又有何不同?
早在1981年3月,Sinclair公司推出了一款8位个人电脑ZX81,其所采用的Z80处理器则被认为是最早的ASIC原型。实际上ASIC是Application-Specific Ingrated Circuit( 应用型专用)的缩写,是一种专用芯片,是为了某种特定的需求而专门定制的芯片的统称。比如专用的、视频处理器,同时目前很多专用的芯片业可以看作是ASIC的一种。
与CPU、GPU、相比如何?
CPU与GPU都是我们常见的通用型芯片,它们在各自领域都可以高效地完成任务,但当同样应用于通用基础计算领域时,设计架构的差异直接导致了两种芯片性能的差异。
CPU作为通用处理器,除了满足计算要求,为了更好的响应人机交互的应用,它要能处理复杂的条件和分支,以及任务之间的同步协调,所以芯片上需要很多空间来进行分支预测与优化(control),保存各种状态(cache)以降低任务切换时的延时。这也使得它更适合逻辑控制、串行运算与通用类型数据运算。
而GPU拥有一个由数以千计的更小、更高效的ALU核心组成的大规模并行计算架构,大部分主要用于构建控制和Cache,而控制电路也相对简单,且对Cache的需求小,只有小部分管来完成实际的运算工作。所以大部分晶体管可以组成各类专用电路、多条流水线,使得GPU的计算速度有了突破性的飞跃,拥有了更强大的处理浮点运算的能力。这决定了其更擅长处理多重任务,尤其是没有技术含量的重复性工作,比如计算。由于通常需要大量的训练,训练算法并不复杂,但数据非常量大,而GPU的多内核、并行处理的优势,使得其相比CPU更适合深度学习运算。
FPGA(现场可编程门阵列)是一直可编程的半定制芯片,其与GPU一样具有并行处理优势,并且也可以设计成具有多内核的形态,当然其最大的优势还是在于其可编程的特性。这也意味着用户可以根据需要的逻辑功能对电路进行快速烧录。即使是出厂后的成品FPGA的逻辑块和连接,用户无需改变硬件,就可通过升级软件来配置这些芯片来实现自定义硬件功能。
相较于我们常见的CPU、GPU等通用型芯片以及半定制的FPGA来说,ASIC芯片的计算能力和计算效率都直接根据特定的算法的需要进行定制的,所以其可以实现体积小、功耗低、高可靠性、保密性强、计算性能高、计算效率高等优势。所以,在其所针对的特定的应用领域,ASIC芯片的能效表现要远超CPU、GPU等通用型芯片以及半定制的FPGA。这一点,我们从前面提到的“矿机”市场所采用的芯片的变化上就能够看到。
可编程芯片Barefoot Networks
二十多年来的ASIC一直是固定功能芯片,只能做一个功能。
该芯片将内置于网络交换机、硬件设备中,后两者在互联网指挥交通中发挥基础性作用。在数千台计算机间切换穿梭数据,这些计算机由应用程序制造商如谷歌和Facebook,和无线提供商如AT&T操作,Barefoot
Networks芯片将以显著的方式改变这些设备。最大的区别是,任何人都可以在这个芯片上进行编程。换句话说,他们可以编写软件,改变了这种芯片的功能,就像任何人都可以写一个应用程序,改变iPhone的功能。
Smart NIC即智能网卡,,将虚拟交换机功能完全从服务器CPU转移到网卡,释放昂贵的服务器CPU的计算能力以返回给应用程序,从而更好地扩展网卡功能并提供更高的性能。
其核心是通过FPGA(现场可编程门阵列)协助CPU处理网络负载,编程网络接口功能,具有以下特征:
Smart NIC能够提升应用程序和虚拟化性能,实现软件定义网络(SDN)和网络功能虚拟化(NFV)的诸多优势,将网络虚拟化、负载均衡和其他低级功能从服务器CPU中移除,确保为应用提供最大的处理能力。与此同时,智能网卡还能够提供分布式计算资源,使得用户可以开发自己的软件或提供接入服务,从而加速特定应用程序。
Smart NIC的应用场景包括: