上篇文章我们主要谈了成本问题,于是有大厂问我们性能问题,问我们XPU能不能做“高性能计算”,能不能做Data Fabric,做资源池化。同时还有些没有搞明白系统架构的“技友”认为数据芯片必须是网络芯片才行。
今天我们借Nvidia GPU或者高性能计算,聊一聊Nvidia DPU的秘密。为什么Nvidia要做DPU,未来Nvidia会如何打通的DPU和GPU,DPU和GPU如何协同计算?同时在这中间XPU能起到什么作用?
一、数据处理
之前我们介绍了,数据从网络到设备是要经过CPU的。详细路径是网络、系统内存、设备内存。在整个过程中虽然CPU由于content switch的原因会增加中断和延迟,但实际高性能网络计算中,我们都会选用独占计算核心的方式加速网络处理。比如在DPDK软件架构中我们可以做两个优化来提升网络处理能力:
独占式CPU核心处理网络计算 + AVX指令
让L3缓存地址(hot memory)和网卡(NIC)的设备内存(device memory)重合,提升I/O性能
第一点是Intel CPU和现在arm CPU都开始支持的特点,在smartNIC、DPU中都利用了这一点来提升网络处理能力,技术趋势应该是增加AVX位宽或者干脆放一个阉割的GPU进来加强处理。
第二点比较难,基本除了Intel其他公司很难利用这一个特点,未来Intel肯定会在这一块上做文章,提升Intel低端CPU的网络处理能力。其他几家的技术趋势是提升内存的吞吐率,也就是将DDR4升级成HBM或者HBM2、HBM3。当DPU系统的RAM升级到HBM2之后,CPU L3的优势将不再存在,未来CPU的架构会进一步变革(GPU的性能提升除了计算核心多,另外一大原因就是显存速率极大)。

通过设计数据结构和系统架构,流量处理可以直接利用L3,数据到计算核心的路径非常短。如果每个核心可以处理10G流量,那么16个核心就可以处理160G的流量了。于是ARM多核心架构对于网络流量处理具备先天优势。所以我们可以总结如下:
高速IO有利于流量处理,直接到CPU L3或者配备HBM2高速内存最好
多核心并行处理,每个核心处理一个网络VF流量最佳
二、GPU高性能计算
“冯诺伊曼架构下的高性能计算的核心是结构化管理多host、多GPU的内存”
由于DDR4和HBM的速率是远远超过SSD等存储介质的。所以大部分SmartNIC面临的尴尬在于,如果仅仅由于网络流量加速和存储加速应用场景,Intel DPDK + FPGA是具备足够竞争力的。Intel DPDK降低网络路径,FPGA增加算力。在传统的存储加速市场,Intel的问题是要不要开放高级功能给低端CPU。因为这样会挤压Intel高端CPU的利润空间。现在Intel推出的IPU应该是沿着这一条技术路线调整,通过封装技术进一步降低成本,通过增加功能提升价格,从而提升解决方案的利润率。
真正对网络数据延迟非常敏感的行业是GPU集群技术,比如GPU集群ML训练等专用计算领域。

传统高性能计算架构中,网卡设备和GPU设备都属于CPU的PCIe设备树(Device Tree)下的一个节点。在现代操作系统中,每个设备在系统内存中存在一个缓存区域(device memory space)用于CPU和设备DMA的数据系统作用。一般来说当数据从网卡中流入系统的时候,数据包先,1)到NIC内存(NIC DMA处理),然后2)driver(系统级别)将数据搬移到GPU内存中,3)GPU的DMA再将数据从GPU内存同步到GPU显存中(GPU卡上的onboard内存)。如果网卡和GPU之间的driver开发不优化的话,可能数据还要从kernel space到user space走一圈。总结来说,在传统高性能计算中,数据流量优化主要有以下4条:
1. Bar Transfer 避免数据在host 内存中的多次读写,但一般至少得一到两次
2. 从GPU host 内存到GPU显存时,对数据进行压缩,这样充分利用PCIe的高吞吐率,但会增加系统延迟,一般根据应用来优化
3. CUDA核心读取读取显存数据的时候,一次读取整条,比如1024B,或者2048B等,提升GPU显存的吞吐量
4. 利用软件优化CUDA核心的IO和计算时间,需要对应用非常了解,同时利用GPU的scheduler特色
根据我个人多年经验来看,基本上当前采用的优化方法为1和3,2和4比较难,需要对应用和系统都非常了解。
在GPU核心数量已经达到3000+以上的今天,内存IO的问题更加明显,主要发生在网卡系统内存、和PCIe吞吐量和GPU显存上。
高性能计算系统优化方法:GPU and CUDA
三、Nvidia为什么要收购Mellanox?
前些天和一位Fungible的高管交谈中,对方说黄教主收购Mellanox做DPU得到了Fungible的很多启发。的确从名字看来Nvidia的确抄袭了Fungible,但从解决的问题出发,Nvidia的目标不在流量卸载。虽然由于技术来源Mellanox,所以当代DPU或者SmartNIC有明显的卸载和云管理特色。但从长远来看,Nvidia需要或者正在解决的是,数据如何高速从DPU“直接”到达GPU。
为什么Nvidia要收购Mellanox而不是其他网络公司呢?在硅谷和以色列存在大量的网络芯片公司,唯独Mellanox吸引了Nvidia的兴趣。原因是什么呢?
笔者从网络协议层考虑,Nvidia收购Mellanox的本质原因其实不是网络技术,而是为了IB和RDMA协议。

基于不同协议的内存管理方案
“RDMA是基于IB技术的一种远程类总线协议(共享内存)”。在HPC行业MPI对IB的支持非常悠久和成熟。所以Nvidia又开始了GPU的老套路,从HPC行业入手。所以大家看到在黄教主GPU的ppt中一般都会出现MPI,现在在DPU的ppt中也出现了MPI。笔者认为,一是因为黄教主对HPC情有独钟,二是的确HPC行业不缺钱,三是因为HPC行业对GPU和Mellanox都不陌生,基本上做HPC应用的人都知道Nvidia和Mellanox,市场切入非常快。所以笔者认为如果不在IP协议(L3层)之下创新,DPU公司无法面对Nvidia+Mellanox的竞争。
四、XPU的创新
在之前我们介绍过,XPU是一个基于PCIe技术的数据芯片,我们基于传统北桥技术,开发自己的协议和架构,构建专注于L2数据转发。从CPU为中心的架构中重新释放北桥的中心地位,构建下一代,“解耦合、可组合、高速、低成本”的计算架构。

在XPU架构中,数据转发完全不需要host CPU参与,数据可以直接传递到GPU或者SSD中。

基于PCIe Fabric的RDMA协议将实现多设备数据互联互通。由于不需要经过状态转换,XPU实现更高的数据传输效率。

XPU将彻底释放PCIe能力,无需CPU即可以构建网络和可组合基础设施
最后我们用一个动图总结当前高性能计算系统优化方法
High Performance Computing for All!
One More Thing
由于data本身的特色(参考网络通讯设备市场),数据芯片未来会分为L2/L3(交换芯片XPU)、L3以上(计算芯片DPU)、和可能的控制器(Controller,IPU)几种。我们专注于交换和软件:
XPU专注高速交换
DPU专注数据处理
IPU专注集群管理
写到最后,笔者认为,计算架构的创新是一个螺旋式发展的过程,从集中到分布,从聚合到接偶,从云到边缘,技术的主线是围绕着计算和IO的平衡来发展,驱动力却是性能和价格的平衡。在摩尔定律失效的时代,通过工艺提升来降低成本的优势不在存在,给新计算架构带来了巨大机会!

