探秘神龙,洞见未来
神龙4.0在网络上做了一些非常不错的工作,eRDMA带来的云主机低延迟通信对进一步降低云计算消耗会带来很多好处,特别是用户态不修改代码直接对TCP加速在现在这个时间点上和生态上是非常不错的。而我的工作中有很大一部分类似于阿里达摩院或者华为2012实验室那样的研究工作,更多的看待的是未来五年十年体系架构的问题,所以本文对神龙进行一些分析和进一步的讨论仅限于学术交流而没有任何褒贬之意。
神龙4.0的一部分公开资料可以参考如下文章:
技术揭秘:阿里云发布第四代神龙,SMC-R让网络性能提升20%[1]
原文用一句话来描述,SMC-R (Shared Memory Communications over RDMA)是一套与 TCP/IP 平行的向上兼容 TCP socket 接口,底层使用 RDMA RC 进行数据传输的协议族。
我几个月前在阿里云讲过一个话题:
[云网融合的探索]
本质上下一个十年的计算机体系结构就是从紧耦合来提高整个云计算的效能,在软硬件之间,由于指令集(Instruction Set Arch)带来的效率问题,GPU、TPU这样的DSA专用芯片产生, 而虚拟机和物理机之间的耦合则是神龙一开始就解决的问题,通信上应用和网络的紧耦合也就变成了一个值得去考虑的话题。神龙4.0能够在这个层面上解决问题也不足为奇。
与神龙4.0借助RDMA不同的是,我们NetDAM
直接在更低层的位置解决了内存共享
的问题,延迟比RoCE低了20%:
NetDAM提供了完全用户态的内存访问接口Memif实现任意协议的通信,甚至用户可以使用golang channel直接操作memif和远程主机通信,并且整个协议软硬件都可以实现,没有RDMA那样特定的硬件依赖,在一个通用的内存抽象层上,任何主机都可以访问和调用相应的资源,甚至是一些GPU、TPU或者加解密引擎等异构处理器资源也可以让任何主机通过一个简单的UDP报文调用,没有任何硬件的依赖。
所以最终以统一的内存抽象层实现了整个云网络通信的架构,也就是以数据为中心的网络架构:
通信和共享内存的辩证关系
简单的来说,通信和共享内存的一个辩证关系有一句名言:don’t communicate by sharing memory share memory by communicating 其实很多人对这句话的理解有问题,特别是前半句。这句话真正的解释应该是不要使用带锁的共享内存的方式去解决两个实体之间的通信问题。
更确切的理解是,通信本身是一个连续不断的数据流,而内存只是这些数据流在某一个时刻的切片(Snapshot),理解了内存在时间上的特性,而任何非函数式编程的赋值操作或者通信都是一种赋予变量新的时间维度的定义,这样的时空视角上,你就能够明白了。所以起初一看SMC-R使用Shared Memory来Communication似乎有点奇怪,但是希望读者能够了解其中的辩证关系,同样思科也在很多年前提供了纯软件的方式Memif,甚至更早Golang Channel使用的CSP模型或者Erlang使用的Actor模型都是这样的思路。
Overlay的问题
从计算机体系结构上来看,几乎任何问题都可以加一层Overlay来解决,除非遇到性能问题。从原来主机内的IPC到基于TCP的RPC,然后再到RDMA来bypass Kernel,然后再到容器和虚机网络通过Memif通信,最后再到RDMA来将memif技术拉远实现虚机原生Kernel bypass. SMC-R正是这样一个思路, 从verbs到socket,并且又在操作系统上实现AF_SMC到AF_INET的无缝融合,体系架构上都是很不错的技术。redis和阿里自身java生态上依赖的thrift和netty都获得很好的性能提升。
但是这个解决方案也遇到的一些问题,正如他们自己所述:
RDMA 的一些缺陷在 SMC-R 中同样存在。特别是在建连性能上,由于 RDMA 需要与硬件交互,其建连性能远不如 TCP,所以在大量短连接的场景下,SMC-R 的表现不如 TCP;SMC-R 需要为每个连接预先分配内存,在连接数非常多的情况下,内存占用也会比 TCP 更高。另外,SMC-R 作为一种数据中心内部使用的通信方式,并不适合对公网暴露。
而我们开发的NetDAM则是以第一性原理
来充分考虑这个问题, 因此NetDAM和Ruta两个项目会从整个端到端的通信层去分析各个通信层面的损耗, 回归事物最基本的条件,将其拆分成各要素进行解构分析,从而找到实现目标最优路径的方法来实现。
最终整个架构会变成完全的以数据为中心的Serverless处理架构, 进一步降低了整个数据中心的overlay层级和开销。
首先从CPU谈起,一个CPU的I/O通常由PCIe
内存
处理器
互联等三套总线架构,更加直观的来让大家感受一下,我们通过allegro打开一张Intel Skylake的PCB图可以看的更明显
可以看到一个CPU大量的针脚被用于内存,而相对PCIe这样的串行总线针脚会少很多。
而冯诺依曼架构瓶颈正好在内存上:
芯片面积一定的情况下,扩大并行链路的代价也非常大,同时还要考虑芯片片上网络布线的问题,以及核心多了暗硅的问题。所以工业界的做法就是很简单的去从软件和应用层降低系统对内存的开销,RDMA就是在2015年这个时候逐渐从以前专用的HPC等场景走到云计算场景中的:
但是这个技术从本源上还是没有解决问题,那就是由DMA带来的主内存的使用上,即便是绕开了OS的TCP协议栈,内存还是要直接写到CPU的主存上,并且在I/O密集场景下,会带来大量的主存消耗。NanoPU或者NetDIMM等技术就开始关注于RDMA带来的PCIe DMA抖动影响,但是还是有问题,就是CPU忙的时候,大量的DMA处理即便不会影响CPU,也会影响到内存控制器和CPU的末级缓存,所以势必需要其他的一些处理方式来降低主内存使用率和影响,netDIMM正如我前面所说,芯片针脚和布线将会带来问题,而NanoPU则是对于一些复杂的处理无法实现。
进一步来看,数据中心内的incast问题也和这个事情有关,大量的多对一通信,不管主机能不能承受都会RDMA过来,然后直接DMA到主内存,虽然有一些拥塞控制的算法,但是RDMA本身的go-back-N机制使得流控的问题越来越复杂。
那么我们假想一下,如果能够隔离主内存和网络的I/O,并且直接交付给用户态的虚机或者容器的应用接口,不就好了么?所以这就是我们构建内存虚拟化层的根本原因,直接端到端应用的内存交互,然后下层把通信的Overhead降到最低:
然后让CPU去按需Pool需要的数据到主内存,一推一拉顺利的解决了数据中心incast的问题
另一方面是应用本身从虚拟化到容器化,再到云原生ServiceMesh、Serverless的过程, SideCar或者API Gateway又一次增加了一个抽象层,使得数据中心的资源再一次被浪费,特别是一些加密通信协议需要更加实时的解密处理,使用Offload卡会进一步加重内存的使用:
可以看到密文,明文数据流多次在主内存和PCIe上通过,那么是否能够在网卡上构建的内存中调用解密指令或者加密指令呢?所以针对这个场景,我们借鉴RISC-V的经验创建了可编程扩展指令集的模式
几条特殊的指令就很容易的让NetDAM进行加解密处理,而最终直接把明文写到主内存,极大的降低了主CPU的消耗。而关键的是这样的指令集
对软件是非常友好的,并不需要指定X86、ARM或者RISC-V,谁都可以通过构建一个结构体,直接写到NetDAM某个内存地址去,或者是外部主机通过UDP发送给NetDAM就好,从生态上完全用户态的RPC的处理极大的方便了用户开发。
正如 John L. Hennessy, David A. Patterson两位图灵奖获得者在2019年发布的一篇文章,未来十年正是计算机体系结构的黄金年代
NetDAM通过统一的内存抽象层和通信内存池架构,实现了对特定领域的体系结构的支持。另一方面通过在网络侧构建内存使得整个体系结构中能够更加有效的利用内存,例如传统的AI训练中需要在Allreduce阶段执行大量的加法和通信业务:
而NetDAM借助网络内存和存内计算实现了更宽的指令集支持,单条指令同时可以处理2048个32bit浮点数,有效地利用内存层次结构,降低了对主存的开销,因此针对AI分布式训练的关键任务性能是RoCE的数倍.
NetDAM FPGA上可以预留出大量的可编程逻辑,供用户构建DSA,并通过AXI或CHI总线连接,因此这样也为以特定领域语言(DSL)编写的目标程序提供了便利,您可以构建以P4为主的网络处理核,也可以使用Chisel构建一些特殊的微处理器通过AXI总线或者未来通过CHI总线和NetDAM对连。
结论
总体而言,我们在处理很多问题时,都可以借助已有的成果和生态,这也是计算机体系结构最为成功的一部分,但是在探索未来的路上,打破已有的边界,回归事物最基本的条件,将其拆分成各要素进行解构分析,从而找到实现目标最优路径的方法。
我们看到的事物最基本的条件就是:通信和共享内存的辩证关系,而最底层基于生态的考虑以太网和UDP能够让世界上几乎所有的终端访问为前提,构建了NetDAM。从根本上解决了通信的消耗问题.
通过自研DPU NetDAM
在计算机体系架构中取得了革命性的创新,实现了一种以数据为中心的可编程计算指令体系架构,并且整体通信延迟比广泛使用的RoCE技术低了20%抖动下降两个数量级,并针对下一代云计算AI关键应用实现了存内计算
和在网计算
的关键加速能力。同时构建了大规模内存池化和异构计算池化技术,也为片上网络
和先进封装
等DSA
需求预留了接口。在Google swift拥塞控制基础上实现了关键性创新,隔离I/O域和计算域,在主机拥塞控制上实现了确定性延迟和更直观的缓存深度感知, 并实现了用户态内存直达和多路径访问,配合自动驾驶网络实现了确定性转发,同时针对大象流实现了网内缓存和按包拆分的能力。最后,由于我们的用户态内存直达,实现了零损耗的计算能力,计算资源直接通过用户态内存访问,实现了整个通信栈的卸载,也方便了异构计算器件的调用。
对于终端接入云,我们实现了基于Internet 200ms全球零丢包可达的实时音视频传输RTN的关键技术创新.在接入访问控制和流量调度中,我们实现了基于人工智能的ZaDNS优选路径
和零信任接入
访问能力(已开源).在数据中心我们实现了新一代大规模数据中分布式路由协议及SDN控制技术的研发,并和广域网RTN及用户态传输融合实现了端到端的可控转发。同时针对数据中心拥塞实现了基于强化学习
的自动驾驶网络技术。
Reference
[1]
技术揭秘:阿里云发布第四代神龙,SMC-R让网络性能提升20%: https://mp.weixin.qq.com/s/VDan006o4M0htIIYh9zr-g
《探秘神龙,洞见未来》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:https://www.bookhoes.com/4376.html