Nvidia Smart NIC是“掀起革命一角推翻x86”的起点

“建筑诗人”王大闳提案国父纪念馆设计时,因西方色彩过度浓厚,屡遭审查委员“打枪”,其中看似“小女孩扬起的裙角”掀起屋顶,连当时的蒋总统都直言“正面的屋顶不应掀起” ,但王大闳却坚定回应:孙中山既然推翻满清,要纪念他,自然不宜沿用清朝的建筑形式,且正面掀起的屋顶,隐喻的正是孙中山领导的辛亥革命“掀起革命的一角”,也成为我们现在看到的国父纪念馆。

结论先写在这里:Nvidia之所以愿意耗资70亿美元并购Mellanox,就是想干一样的好事:从Smart NIC“掀起推翻x86革命的一角”。

这次Nvidia自家GTC 2021主题演讲,“皮衣教主”黄仁勋在自家厨房端出的大餐,分量似乎有点太多了,让坊间科技媒体的报道普遍溢出满满“消化不良”的“深度分析”。

当众人眼球似乎都聚焦Nvidia“总算”推出针对高性能计算的Grace处理器(拜托,Nvidia自己做CPU又不是头一次,有点历史感的人还记得Project Denver吗?)离打倒x86霸权的终极目标,似乎又更近了一步,然后对于从Smart NIC“正名”而来的Bluefield DPU,则是“啊,反正又是更新一代罢了”,没有给予足够重视──即使Bluefield-3是塞了16个Arm A78核心的怪物。

但相较于“终于将Arm CPU与Nvidia GPU送做堆”(相信很多人多年来一直会有这样的疑惑“在GPU内塞个Arm处理器,有这么困难吗”),也不知道是否真的可解除过去GPU内存容量不足这个老毛病的Grace,本质上为“大x86服务器里的小Arm服务器”的DPU,让它越长越大,才是Nvidia有机会从看似边缘的Smart NIC“掀起推翻x86革命的一角”,更罔论Grace这东西能否适用一般云计算数据中心与符合云计算企业的泛用性标准,也是个超级大问号。

但了解什么是Smart NIC(Network Interface Controller)之前,还是得先复习两个科技人应当耳孰能详的名词:软件定义网络(SDN,Software-Defined Network)和网络功能虚拟化(NFV,Network Function Virtualization) ,和两个关键性技术:OpenFlow资料转发面协议与P4封包处理器描述语言。假如你早就很熟悉这些东西,强烈建议快转到最后一段。

近年来,因软件定义网络、OpenFlow协议、网络功能虚拟化和P4封包处理器描述语言的普及,数据中心需要高度可编程化的Smart NIC,也因为Nvidia并购Mellanox,被粘贴DPU一词。根据Nvidia皮衣教主说法:DPU意义在于将数据中心的基础架构,融入单一芯片(DOCA,Data-Center-Infrastructure-On-A-Chip Architecture),以“实现具有突破性的网络、存储和安全性能”。

这段话就道尽Nvidia神秘的野心了:让x86处理器“越来越不重要”。

不论叫Smart NIC还是DPU,性能与功能早远远超过一般个人计算机玩家认知的“只要网络有通就可以的网卡”。数据中心的以太网络带宽,动辄100Gb/s甚至迈向400Gb/s之际,只依赖多核心CPU,将难以支撑稳定的资料输出量。最起码“理论上”听起来没错啦。

那么为何Nvidia会相信目前的发展趋势,会让他们有机会推翻x86的政权?这就得先从SDN开始讲起。

让网络管理有如提线木偶的SDN

随着服务器虚拟化、云计算计算和Web化应用的普及,越来越多的小型企业机房,整合到更大更复杂的巨型数据中心,导致水涨船高的网络设备管理负担和成本。

传统网络设备如交换机和路由器,都形同某个“黑盒子”,并来自众多供应商,结果就是很难有统一管理平台,或就算有,也是限定某几间网通设备大厂。大多数ISP和数据中心企业,不可能不意识这个问题,或多或少也自行尝试开发统一管理工具,但能做的其实非常有限。不仅如此,网络管理者也难以掌握整体网络架构,因封包转发路径,很可能都是通过动态协议自动计算产生,管理员很难即时知道到底哪里发生拥塞(Congestion),是否还有更优良的路径可供选择。

偏偏一个巨大的网络架构,涉及大量琳琅满目的协议(像路由协议就有RIP、IGRP、OSPF、EGP、BGP、IS-IS),并且有些还是专属于某些厂商者(像Cisco的E-IGRP),背后技术原理也截然不同(像路由协议就可约略分为Distance Vector和Link State两种体系,还没算到BGP的Path Vector),这也激增数据中心部署新业务的时间。

所以SDN的精神,在于改变传统网络控制资料流的方式,剥离出网络设备的“控制面”,统一集中到外部服务器,为集中式控制器(SDN Controller) ,搭配使用“南向”(Southbound)资料控制协议,如最普及的OpenFlow是SDN控制器与交换机之间的交互协议,具体定义交换机在资料转发面(Data Plane)的功能,并规范封包的种类和格式,集中管理封包转发路径的所有设备,提供网络管理者全局视野,让网络管理形同“提线木偶”。

更白话一点,SDN通过软件改变网络架构与功能,分离网络设备的控制层与资料层,由取得全局视野的控制层,以便集中式管控整个网络,并对网络设备下达指令,不需要一台一台调整独立的网络设备,资料层仅负责传输封包,有效运用网络带宽,并提升网络使用率。不限于数据中心,SDN同时也适用很多网络相关应用领域,像信息安全、无线网络、企业网络和电信网络等。当然,物联网边缘运算也同,经由SDN实现“随选随用”(On-Demand)以削减网络带宽成本,也是SDN在边缘运算诉求的重点之一。

此外,这个控制器并可通过开放的“北向”(Northbound)应用程序界面(API),让上层应用程序借由编程控制,更利于让网络虚拟化,让网络配置更灵活,提高业务部署效率。

简而言之,SDN让整个网络仿佛变成“巨大的可编程软件”,可随时应对不同的业务需求动态调整。

至于说到世上最知名也最经典的商用SDN部署案例,莫过于Google同步全球12座数据中心的G-Scale广域网络的B4广域网络流量工程(TE,Traffic Engineering)。Google在2009年秘密启动OpenFlow项目,2010年1月开始导入,2012年则全面激活于所有数据中心,那时还正是一堆人“清谈”SDN的高峰期,不难想见Google在2012年的ONS2012(开放网络高峰会)公诸于世时,并努力分享Google经验时,引起多巨大的震撼和反响。

Google将网络分成三个层次,由下往上,分别是物理交换设备层(OpenFlow Switch Hardware)、局部网络控制器(Site Controller)和全局流量工程服务器(Central TE Server)。

经过SDN改造后,Google全球各地数据中心之间的广域网络,带宽利用率从30%~40%激增到逼近100%,大幅降低带宽成本,管理更简单,网络更稳定,交换机更不需配置高容量缓冲内存,况且还是Google自行设计OpenFlow交换机,再交由ODM厂商代工,价格更便宜。大多数人还在高谈SDN当下,Google早就汲取精神,并实用化。后来人工智能TPU(Tensorflow Processing Unit)也是远远走在“热门议题”之前,隐藏在背后的深意,不言可喻,这就是云计算霸主的实力,真想要做,统统都可以自己来。

但也因为Google的惊人成功,让世人产生了一些对SDN的误解,特别是交换机和网卡芯片的OpenFlow支持性“到底该做到什么程度”。支持OpenFlow的芯片,逻辑上主要由2部分组成:端口(Port)和流表(Flow Table),所谓Flow意指“在同段时间内,经过同段网络,并有相同属性(如相同TCP port)的消息”,每个流表项目(Flow Entry)对应网络传输的“一条流”,也是OpenFlow最核心的元素,就像原子组成所有物质的概念。

乍看之下,OpenFlow芯片看似无所不能,可谓“以简驭繁”,反正所有的网络传输都变成一条一条的流,转发行为如此简单,没有任何状态机(State Machine),一切都是Match(匹配)→Action(行动),想怎么动就怎么动,统统和网络协议没有任何依赖性,足以应对未来的网络技术发展。

但天底下没有白吃的午餐。依据OpenFlow标准,允许可以使用任意的字段组合,做搜索任何一张流表。这代表这张流表需要使用“内容寻址内存”(CAM,Content-Addressable Memory),事情就麻烦了。

有别于我们熟知的随机访问内存(RAM,Randon Access Memory),CAM为了判断某笔资料是否存储其中,会搜索全部的内存内容。如果找到这个人信息料字节,CAM将回复由一个或者多个地址所组成、存储这笔资料的列表。也只有三个输入的T-CAM(Ternary CAM)才能随意的掩盖掉任何想掩盖的查找字段。T-CAM电路复杂度和发热量,相当于传统DRAM“5~6倍”,让所有有志于OpenFlow芯片的厂商都如临大敌。

更何况,OpenFlow还有“多级流表”的概念,每层级的流表内容还会彼此交互,芯片厂商真的硬干出“从头到尾和任何网络协议统统无关的OpenFlow交换芯片”,固然得到无所不能的可编程能力,却创造贵到不行的巨无霸。处理器的世界,一直有条不变的真理:超大+超贵+超热=超生,网络芯片也不可免俗。

网络芯片厂商就干脆博观而约取,厚积而薄发,基于实际的应用需求,定义不同的应用框架与转发模型(如NDM,Negotiabable Data-plane Model),避免变动现有的芯片架构。因大多数应用场景,像前面提到的Google B4数据中心广域网络,追求的是SDN架构的管理便利性,并不是终极的可编程灵活性。

也因此,各家网络芯片厂商在此都各显神通,采用SRAM或更便宜的DRAM,或NPU或FPGA之类的手段,实例高容量但功能受限的OpenFlow流表,并在兼顾传统功能的基础上,“先讲求不伤身体再讲求效果”的补强功能,以应对SDN应用的实际要求。

像Google自行研发的OpenFlow交换机,就不是标准的OpenFlow流表规格,但界面仍遵循OpenFlow规范,这充分证明要引进SDN和OpenFlow,并不需要“100%量身订做”的芯片。SDN的重点是“应用”,不是完整支持OpenFlow与其他的南向协议。这背后的意义,值得各位深思,从开发产品到人生历程面对的一切问题,都是一样道理。

接着就是这票Smart NIC和DPU的重头戏:P4(Programming Protocol-independent Packet Processors)封包处理器描述语言。2017年HotChips 29,就如P4生态系统统的誓师大会,象征SDN应用进一步深化。

OpenFlow仅限“控制与转发分离”,并未定义对资料和封包的处理方式。与OpenFlow高度互补的P4语言,可用来程序化路由器、交换机和网卡的行为,以软件方式,引进新功能与协议,无需等待全新的硬件。P4语言的执行引擎,也成为高度可编程化的Smart NIC,比纯NIC更“聪明”的地方。

让网络设备变成虚拟机的NFV

但行文至此,还漏掉了一个关键名词:“网络功能虚拟化”(NFV,Network Function Virtualization),相对SDN象征着“传统网络碰到的瓶颈”,NFV则意味着“电信企业那淡淡的哀伤”。NFV是一个SDN有点交集、但又有很大差异的概念,当5G时代来临,频繁的规格升级与激增基站数量的毫米波频段(mmWave),让电信商更积极追求更低成本的硬件平台。

NFV之前,各大电信商普遍面对大量各式各样的网络设备,如交换机、路由器、防火墙、服务器、存储、计费设备等,随着推进网络服务和业务扩展而不停的导入新产品,让持续叠床架屋的硬件设备,不可避免激增电信企业运营成本,更不幸的是,消费者还越来越不愿意乖乖买单。

所以也不可免俗的,跟思想起源“学术味颇重”(又是那两间名校)的SDN不同,NFV是由一群“急着赚钱”的电信商提出来的。2010年,一票世界级网络商、电信设备供应商、IT设备供应商,成立隶属欧洲电信标准协会(ETSI,European Telecommunications Standards Institute)的NFV标准化组织,也历经数版。

NFV标准化组织的目标,希望利用目前虚拟化技术,将这些硬件设备“软件化”,在标准的硬件平台(如常见x86服务器)运行各种网络功能。如此一来,日后要扩张网络规模时,就无需购买特定功能的硬件产品,并带来更具弹性的部署方式,缩短新服务上市的时间。

讲更深入点,NFV标准化组织希望将移动核心网络、深度封包检测、信息安全(防火墙、IDS / IPS、SSL VPN)、会谈边界控制器(SBC,Session Border Controller) 、服务器复载平衡器和广域网络加速器等“计算密集”的网络服务,进行广泛虚拟化。

但请注意,像急需低延迟、高吞吐量的资料传输,现阶段的NFV则力有未逮,如高性能交换机和路由器等,无不靠特定ASIC和专职网络处理器(NP,Network Processor)为运算心脏──虽然2008年,Cisco与VMware联合开发划时代虚拟交换机Nexus 1000V,后面这两间为了VMware并购SDN先驱者Nicira而撕破脸的往事在此不论了。网络虚拟化并非本文主题,再扯下去会没完没了。

更进一步说,NFV并不一定要创建在SDN基础上,但如前面说过,两者其实高度互补,SDN可分离控制和转发,网络管理者可通过集中式SDN控制器,用统一界面控制所有运行在这些标准服务器平台的虚拟网络设备。从OSI七层网络架构查看NFV和SDN就更主动了:前者是“上面四层”,后者是“第二和第三层”,非常简单明了。

笔者用比较表规整NFV和SDN两个5G重大关键技术的差异,接着我们就要准备进入Smart NIC的神秘新世界了。

Smart NIC:“大”x86 Server里的“小”ARM Server

各位了解软件定义网络(SDN)和网络功能虚拟化(NFV)后,接着就可进入Smart NIC(智能网络适配器)和Nvidia宣称“比Smart NIC更强大”的DPU。

首先,我们必须先明确定义什么是Smart NIC,和一般NIC又有什么不同。以一度占10G以上网卡70%市场占有率的Mellanox为例(英特尔在高端网卡市场的领导地位,就这样莫名其妙翻盘了),对Smart NIC的定义是可卸载(Off Load)通常由CPU处理工作的网卡,利用独立CPU的额外运算能力与板载内存,完成更高等级的网络处理任务,减轻CPU负担并释放执行性能。

更白话一点,各位可将Smart NIC定义为“像智能手机,允许附加软件功能”的NIC。要让NIC升级成Smart NIC,不外乎插件大量ARM CPU核心、支持P4语言的网络处理器、采用FPGA或三者兼备。

目前知名的Smart NIC厂商,包含传统大厂,像身为以太网络规格制定者之一的英特尔、传统网通芯片大厂博通、因“芯片比较聪明”翻掉英特尔基本盘而被Nvidia以70亿美元并购的Mellanox、被AMD吃下的FPGA王者赛灵思,以及部分创业公司企业,如Cisco色彩浓厚的Pensando和软银投资2亿美元的Fungible。这些厂商都各擅胜场,例如很会将产品单芯片化,以取得压倒性成本优势的博通(有了解过博通机顶盒产品线的历史,就会清楚知道这方面有多厉害)。

像云计算服务企业,也多少会自己研发自用的Smart NIC,像微软用FPGA实做的Azure AccelNet和“逻辑上是个Smart NIC”的AWS Nitro。云计算服务之王Google,十之八九也势必有自家Smart NIC,只是叫什么名称,是否愿意公诸于世,对他们也不重要就是了。

那回到原点,为何在理解Smart NIC前,非得要先对SDN和NFV有点基本的认识呢?因为近年来Smart NIC崛起,主要有三个因素:SDN、25G+以太网络、网络虚拟化。

网络虚拟化的价值不外乎将边缘交换机“推入”服务器,不同实体服务器的虚拟机可相互通信,简化服务器和虚拟机部署,但往往网络会消耗多达30%的CPU运算性能,处理网络虚拟化的事务,如Open vSwitch(OvS)之类的虚拟交换机,更罔论随处可见的加密、解密、深度封包检测和动态路由协议等。博通曾公开描述Smart NIC:“大”x86服务器里的“小”ARM服务器,可谓一针见血。

总之,对Smart NIC用户来说,关键在于“软件”,出色的硬件规格,往往不代表优秀的实际表现,市场主要Smart NIC厂商也多半靠并购,设法补强软硬件的弱点,如Nvidia另外买下开源以太网络交换机操作系统企业Cumulus Networks,而Mellanox的Bluefield-2也是从2015年收购EZchip取得Tilera而诞生。

FPGA霸主赛灵思更是在2019年收购累计十年经验的Solarflare Communications,使其成为赛灵思Alveo U25 Smart NIC的研发团队主力,试图满足需要OvS卸载功能的潜在客户,现在也随着赛灵思收购案,成为AMD的一部分,让曾在NIC有一席之地的AMD,重新回到这块市场。想当年,1980年代后期,AMD的Lance系列在以太网络芯片市场可是响当当的高位货色呢。笔者个人非常期待AMD后继布局。

讲了这么多,SmartNIC到底有多重要?笔者之前听到某种说法,非常传神,值得与各位分享:

“实际上大型的数据中心和电信商,都早陆续把SDN和NFV做到Smart NIC,这也是Cisco被白牌交换机打到不要不要的主因。”极寓意深远的一句话。

那下一个被Smart NIC或Nvidia DPU打到鼻青脸肿的,会变成英特尔和AMD吗?

Nvidia“革命成功”的成功率有多大?

Nvidia以看似边缘的Smart NIC为起点,企图颠覆x86处理器在时下数据中心的主导地位,但事情会如Nvidia预期的顺利吗?笔者个人的看法是,也许Nvidia的策略是正确的(要不然还剩下多少个切入点?),x86地位也可能受到巨大动摇,但尽管审判日假以时日真的降临,Nvidia可能也不会是笑到最后的赢家。

写道最后,笔者对Nvidia挑战x86处理器地位这件事,得提醒各位最重要的大前提:

请问“微软”自己是怎么看待Nvidia的战略?又将作何打算?这才是决定x86生死存亡的真正关键。到头来,x86指令集的价值,超过80%还是创建在Windows兼容性之上。

(首图来源:Nvidia)