CXL、CCIX和SmartNIC助力 PCIe 5加速飞奔
过去三十年间,基于服务器的运算历经多次飞跃式发展。在1990年代,业界从单插槽独立服务器发展到服务器群集。紧接着在千禧年,产业首次看到双插槽服务器;在这之后,多核处理器也相继问世。进入下一个十年,GPU的用途远远超出了绘图处理的范畴,我们见证了基于FPGA的加速器卡的兴起。
迈入2020年,SmartNIC网络适配器(network interface card;NIC),即数据处理单元(DPU)开始风靡。它们大量采用FPGA、多核Arm丛集或是两者混合运用,每种作法都能大幅提高解决方案的效能。从股票交易到基因组定序,运算正以更快的速度求得解答。在机箱内部,数据信道是PCI Express(PCIe)。虽然几经变革,但它仍然是毫无争议的选择。
PCIe 的演进发展
PCIe于2003年首次亮相,恰逢网络准备开始从以千兆位以太网络(GbE)为主要互联的时代往更高速的时代跃进。此时,Myrinet和Infiniband等高效能运算(HPC)网络分别以2Gb/s 和8Gb/s的数据传输速率超越GbE。此后不久,10-GbE网络接口控制器(network interface controllers,NICs)崭露头角,而且拥有优异效能。它们在每个方向上的速率都接近1.25GB/s,这种8通道(x8)PCIe总线的诞生恰逢其时。
第一代 PCIe x8总线在每个方向上的速率为2GB。当时16通道(x16)的插槽尚未问世,且服务器主板一般只提供零星x8插槽和几个x4插槽。为了节省成本,部分服务器厂商甚至使用了x8连接器,但有趣的是却仅将它们连接成x4。
大部分人(例如网络架构师)都知道每一代PCIe的速率都翻了一倍。现今的第四代PCIe x8 插槽的速率大约为16GB/s,所以下一代PCIe的速率将大约为32GB/s,如果这就是第五代PCIe能达到的水平,那确实也不错。不过它还可以像阿拉丁神灯那样神奇,能以CXL和CCIX两种新协议的形式允许在CPU与SmartNIC,或是协处理器等加速器之间实现高效的通讯。
CXL
我们先来谈CXL,它提供了定义明确的主从模式。在这种模式下,CPU的根联合体(root complex)能透过与加速器卡的高带宽链接来共享高速缓存和主系统内存,如图一。
图一 : 透过CXL与处理器相连的加速器概念图(来源:Compute Express Link Specification July 2020)
这有助于主机CPU可以有效地将供作分配给加速器,并接收其处理结果。部份此类加速器使用DRAM或高带宽内存(HBM)来配备大容量高效能的本机内存。借助CXL,现在可与主机CPU共享这些高效能内存,从而更轻松地在共享内存中处理数据集(dataset)。
此外,对于不可分割交易(Atomic Transaction),CXL能在主机CPU和加速器卡之间共享高速缓存。CXL在改善主机与加速器间的通讯方面有了长足的发展,但却未能解决PCIe总线上的加速器之间的通讯问题。
2018 年,Linux内核终于推出了可支持PCIe点对点(Peer-to-peer;P2P)模式的代码。这使PCIe总线上的不同设备之间更容易共享数据。虽然P2P早在此次内核更新之前就已存在,但它需要精心调整才能运行,往往要求用户能够透过程序设计就两个对等设备进行控制。随着内核的更新,加速器与PCIe总线上的PCIe/NVMe内存或另一个加速器间的通讯方式相对简化。
随着解决方案变得日益复杂,简单的P2P已不敷使用,而且还会限制解决方案的效能。如今,我们使用DIMM插槽中的永久内存、NVMe储存和直接插在PCIe总线上的智能储存(SmartSSD),搭配各种加速器卡和SmartNIC或DPU(其中有些本身就具有很大的储存空间)。由于这些设备之间必须能互相通讯,因此昂贵的服务器处理器将化身为成本高昂的交通号志,使得海量数据流出现瓶颈。CCIX在此情形下就能大显身手了,其环境适合在PCIe总线上的设备之间建立对等关系。
CCIX
有些人认为CCIX标准与CXL大同小异,但事实并非如此。在实现总线上点对点连接,CCIX的方法与CXL截然不同,如图二。此外,它还能利用不同设备上的内存,每个设备具有不同的效能特征,对这些内存进行池化,并映像到单一的非一致性内存存取 (Non-Uniform Memory Access;NUMA) 架构。随后它建立一个虚拟地址(Virtual Address)空间,使池中的所有设备都能存取NUMA内存的完整空间。这已经远远超出简单的PCIe P2P内存间复制或是由CXL提出的主从模式。
图二 : 三种CCIX配置图例,包括直连式、交换拓扑和混合菊炼(来源:An Introduction to CCIX White Paper)
作为一种概念,NUMA自1990年代初期以来就已经存在,所以业界对它非常了解。在此基础上,当今大多数服务器都能轻松地扩展到太字节(TB)或更大容量的DRAM内存。不仅如此,还存在能映像名为持续性内存(Persistent Memory;PMEM)或储存级内存(Storage Class Memory;SCM)的新型内存的驱动程序,它能与真实内存(Real Memory)搭配,创建「巨量内存」。综合运用PCIe 5和CCIX,将会进一步使系统架构师能利用SmartSSD扩展这一概念。
运算储存
SmartSSD也称作是运算储存,它将操作数件(通常为FPGA加速器)与固态驱动器中的储存控制器紧密布局,或在控制器中嵌入运算功能,从而使SmartSSD中的操作数件能够在数据进出驱动器的过程中进行处理,进而重新定义数据的存取和储存方式。
虽然SmartSSD最初被视为成组设备,但在FPGA中安装适当的未来驱动程序后,可以当作像按字节寻址的储存器使用。现今生产的SmartSSD具有数TB的容量,但容量还是会爆炸。因此,只有透过NUMA,SmartSSD才能用于扩展巨量内存的概念,这样一来主机CPU和加速器应用就能跨众多设备存取数TB容量的内存,且无需使用该储存器重新写入应用程序。此外,藉由实现在线压缩与加密,SmartSSD还能提供更佳的TCO解决方案。
导入SmartNIC
具体应用上该如何使SmartNIC与此架构搭配呢?SmartNIC是一种特殊类型的加速器,位于PCIe总线和外部网络之间的连接处。SmartSSD将运算放在数据的附近,而SmartNIC则让运算紧临网络。为什么这一点如此重要?简单地说,我们很少关注服务器应用自身的网络等待时间、拥塞、封包遗失(Packet Loss)、协议、加密、覆盖网络(Overlay Network)或安全政策等问题。
为了解决这些问题,创建了诸如QUIC之类的低延迟协议来改善延迟问题、减少拥塞以及从封包遗失中复原。我们精心开发出了TLS并采用内核TLS(kTLS)加以扩展,以提供加密和安全的数据传输。我们现在看到kTLS被添加为SmartNIC的一项卸除功能。
为了支持虚拟机(VM)和容器(container)的协作,我们创建了覆盖网络,随后又开发出Open vSwitch(OvS)等技术定义和管理覆盖网络。SmartNIC正开始卸除OvS。
最后,我们按照政策进行管理以确保安全。这些政策有望反映在Calico和Tigera等形式的协作框架中。这些政策很快也将透过使用P4等编程match-action框架被卸除到SmartNIC。这些任务都应该卸除到称为SmartNIC的专用加速器中。
架构师可以藉由CCIX构建出一个解决方案,作为具有单个虚拟地址空间的巨量内存空间,使多个加速器直接存取真实内存和SmartSSD中的储存器。例如一个解决方案可由四个不同的加速器来构建,如图三。
图三 : 图中所示为CCIX应用范例,它使用了修改过的CCIX 4c-混合菊炼模型
SmartNIC可能装有视讯译码器,以便从摄影机导入视讯时,可以转换回未经压缩的帧,并储存在NUMA虚拟地址空间的共享帧缓冲存储器中。在这些帧可用后,执行人工智能(AI)影像辨识应用上的第二个加速器能扫描这些帧,辨识人脸或车牌。与此同时,第三个加速器可以对这些帧进行转码,用于显示和长期储存。最后,在SmartSSD上运行的第四个应用则负责在AI和转码任务成功完成后,从帧缓冲存储器中删除这些帧。这里我们用四个高度专业的加速器协同工作,形成所谓的「Smartworld」应用。
业界开始增添更多内核以解决与摩尔定律相关的问题。如今,虽然有大量的内核,但CPU与 NIC、储存和加速器等外部设备间的带宽不足。PCIe Gen5是我们的下一个关键发展点。它能大幅提高带宽,开启在CPU上进行高效能运算的时代。
例如,典型的CPU核心能处理1Gb/s+,但如果你采用128个双核CPU,那么PCIe Gen4x16是不够用的。对于需要在CPU核心和加速器之间进行密切交互的应用来说,CXL和CCIX协议提供的高速缓存一致性具有诸多优势。数据库、安全性和多媒体等主要应用作业负载现在正开始利用这些优势。
协作
这个问题的最后一个环节是协作。这项功能指Kubernetes等框架能自动发现并管理加速的硬件,并在协作数据库中将其标记为在线可用。它随后还需要知道该硬件是否支持上述一个或多个协议。随后,随着对新解决方案实例的请求进入并动态启动,能够由这些高级协议感知并加速的容器实例就可以使用该硬件。
以赛灵思资源管理器(XRM)为例,能够与Kubernetes协同工作并管理池中的多个 FPGA资源,从而提升加速器的整体利用率。这样一来,就能自动分派新发布的实例应用,使其在基础设施中最适当的高效能资源上执行,同时遵守既定的安全政策。
SmartNIC和DPU使用了PCIe 5和CXL或CCIX,将为我们提供高度互连的加速器,有助于开发复杂、高效能的解决方案。这类SmartNIC将在我们的数据中心内乃至整个世界范围内,向其他系统提供运算密集型连接。甚至可以构想这样一个未来:命令一旦进入Kubernetes控制器,就在SmartNIC资源上以原生执行的方式启动容器或Pod。这个新作业负载的大量运算随后可能会在服务器中某处的加速器组件上进行,甚至完全不需要服务器主机CPU的直接参与。
结语
为了正确发挥这样的功能,就需要进一步强化安全,使安全水平远远高于Calico和Tigera。此外,我们也需要新的加速器感知安全框架来将安全环境(通常称为安全隔离区;Secure Enclave)扩展到多个运算平台上,这样就使得机密运算有了用武之地。它应该同时提供所需架构和API,为单一个安全隔离区内多个运算平台上的在用数据提供保护。
所有敏感信息隔离设施(Sensitive Compartmented Information Facility;SCIF)都是如此。计算机中的安全隔离区应能涵盖多个运算平台,而激动人心的时刻就在眼前。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码