服务器 频道

消除多核环境时延 Core-Direct技术详解

    【IT168 专稿】Mellanox公司是一家致力于为数据中心提供高性能计算、存储和云服务解决方案的知名企业。截止2009年12月,Mellanox已经成功为全球数据中心交付了超过500万个互联端口,并协助5个超级计算机跻身Top 500前十名,而Top500中的前100名里也有63台采用了Mellanox公司的互联方案。前不久,IT168记者采访了Mellanox公司高级技术总监Gilad Shainer先生(详见:智能互联解放CPU 技术下移开启新纪元),并深入了解了Mellanox在高性能计算领域所做的努力。

    本文主要解析Mellanox公司在HPC应用的网络加速上所取得的突破性成果——Core-Direct技术的相关细节。

    首先简要介绍一下Core-Direct的意义,该技术是由美国能源部投资研发的一种智能化的算法,与Infiniband网卡一同协作,可以在大规模HPC集群中有效减少处理器之间的通讯延迟,从而较大幅度的提升计算性能。但是说归说,到底改在什么地方,为什么笔者认为Core-Direct技术是重大突破,先要从高性能计算集群的工作原理说起。

    大家都知道高性能计算集群拥有是一大堆服务器节点组建的,也可以抽象理解为数以千计的CPU处理器(现今已经都是多核处理器)组成。忽略每个节点内多核CPU的通讯问题——这是服务器制造商要考虑的,单看整个高性能计算集群之间不同的服务器之间的通讯——这是一个非常棘手的问题。

    我们都知道,CPU计算是以每秒2~3GHz的时钟周期进行的,如此多的处理器在一起并行运算,如何互相传递数据?如何保证互相之间没有冲突?先看看传统的递归逻辑:一个任务管理节点,将一个大型的运算任务分割为多个小任务(与CPU内核数相当数量级),然后分发给到各个处理器内核进行运算,运算完毕之后,各处理器再发回计算结果,由管理节点聚合成最后的结果。

    问题在于,分发出去任务再收回来的方法会造成网络拥塞,一瞬间回到管理节点的数据量巨大,管理节点的网络和运算能力就都成了瓶颈。因此,这种递归优化为,处理器算完自己的任务之后,将结果告知其他处理器,当所有处理器都算完之后,将结果聚合在一起返回,然后所有处理器统一进入下一个运算任务。

    如上图所示,其实高性能计算集群的任务分配和多处理器之间的协作要复杂的多,但是总的逻辑如此。这种协作有两个问题,其一是网络传输问题,从机房最东面的机器中的一个内核,将数据传到最西面机架上的一个处理器内核中,时延是多少?顶尖的超级计算机通过Infiniband网络模块,将这个时延控制在1us之内(端到端),将RoCEE延迟控制在3us之内,而满负荷情况下的交换延迟小于100us(us=微秒)。可见,超级计算机通过专用网络在传输数据上几乎没有瓶颈——或与其他瓶颈相比可以忽略。

    其实,今天讨论Core-Direct的目的就在这里:一旦这种处理器之间的互相传输发生错误,则会致命的造成一系列延迟。举例如下:


    这是一个CPU计算完成任务之后的二重递归算法,我们暂且设这个系统由8个处理器内核需要交换数据,其最简单的交换法则就是二重递归,每次只传给一个对象,按层次传输。注意:纵向的四个层式可以看做是时间轴。这是一个理想状态的传输环境,实际上会经常出现以下的问题:


    突然编号为1的处理器内核计算出错,或者发生了延迟中断,可以看出,在以下的三个时间点,这个处理器仍然处于错误状态。


    结果就是,第二个时间点,1个处理器延迟;第三个时间点,1和3两个处理器延迟——原因是3没有得到来自1的数据,处于等待状态;也因此,在第四个时间点,出现了四个处理器延迟——我们可以推算出更大规模的计算集群,在这种情况下延迟将会呈几何级数上升。而其他完好的处理器也受制于一个内核出错而相继中断——这是目前高性能计算机的老大难问题——也因此所有数据中心集群机器都会非常看重高可用性和网络稳定性,就是为了避免类似情况的发生。

     Mellanox的Core-Direct顾名思义,让CPU内核直接将数据传递给下一个内核,然后不用等待整个系统的数据交换完成(即便中间出现错误,运算也能进行下去——错误由效验机制命令出错的处理器重新运算,而不用整个系统一起陪着等待)。其核心技术是Collective Offload引擎——世界上第一个HPC应用卸载架构。

    据Gilad先生介绍,利用ConnectX-2 Core-Direct技术,HPC计算中超过80%的CPU计算资源可以得到利用,而传统模式中当负载为20%时,就因为处理器之间的各种延迟使得整体系统延迟呈指数级上升——到60%左右就延迟到不可接受的地步。

   由于目前高性能计算中普遍采用GPU做并行计算单元,因此Mellanox也优化了GPU的数据传输逻辑。这里简单说说新传输方式与旧方式的区别(如下图):


本图体现了GPU计算过程中数据是如何传递的:CPU从内存中读取需要GPU计算的原始数据,传递给北桥芯片的PCI-E控制器,北桥芯片将数据传给GPU,GPU将其存入缓存,计算的结果也存入GPU缓存(注意这一过程是不断进行的,动态的);计算结果再从GPU缓存流经GPU传回给北桥控制器,北桥传回CPU,CPU将之存入内存。

    如果说以上过程足够繁琐,效率很低的话。那么来看看GPU计算好的结果是如何传输的——CPU从内存里重新读取GPU计算的结果,将需要传输的部分再存入内存中网络模块读取的指定区域——infiniband网卡通过CPU再读取相关信息传出去。因此可以说,GPU计算时的数据传输是最大瓶颈。


Mellanox的解决方案很简单,在不改变现有IT架构的情况下——意即原先那套计算流程不变。变化只有一点点:GPU计算结果在存储到内存之后,直接被infiniband读取传输走,减少了再次通过CPU读取转存的步骤。从而降低了数据传输的时延——这一点点的改进使得GPU之间的时延降低30%,消除了数据在infiniband和GPU之间的拷贝,用心良苦可以想见。

0
相关文章