采用Xilinx Zynq SoC 为云计算提速

新颖的可重配置硬件加速器可加速基于mapreduce编程框架的应用处理。
流视频、社交网络和云计算等新兴web应用亟需能容纳数千台服务器的仓库规模的数据中心。在数据中心和其它计算机集群中,用于处理大数据集的主要编程框架之一即为mapreduce框架[1]。mapreduce是一种运用大量节点来处理大数据集的编程模型。用户负责设定“map”和“reduce”功能,然后由mapreduce调度器将任务分配给处理器。
mapreduce框架的主要优势之一在于,其能托管在由不同类型处理器构成的多个异构集群中。大部分数据中心都纷纷采用高性能的通用型器件,如英特尔至强(intel xeon)、amd皓龙(amd opteron)和ibm power处理器等。但是,即使在应用不属于高计算密集型而属于高i/o密集型的时候,这些处理器也会消耗大量的电力。
为了降低数据中心的功耗,微服务器作为一种替代性平台近期倍受关注。这类低成本服务器通常采用嵌入式系统中使用的低功耗处理器,如arm®处理器等。微服务器主要针对轻量级或并行应用,处理此类应用最行之有效的方法是使用在节点间拥有充足i/o(而非拥有高性能处理器)的单个服务器。微服务器方案具有众多优势,如可减少购置成本、缩小占用面积,并能降低特定应用类型的功耗。
在过去的几年里,seamicro和calxeda等几家厂商已开发出基于嵌入式处理器的微服务器。但是,mapreduce框架会占用嵌入式处理器的多种资源,从而会降低运行在这些平台上的云计算应用的总体性能。
为了克服这个问题,我们的团队已为mapreduce框架开发出一种能在全面可编程平台上与arm ip核实现高效整合的硬件加速单元。为了开发并评估所提议的方案,我们选用了开发板上集成有双核cortex-a9处理器的赛灵思zynq®-7000 all programmable soc。
mapreduce硬件加速器单元
mapreduce加速单元负责处理reduce任务的高效实现。其主要工作是合并来自各个处理器的中间键/值对,并为插入新键和更新(累计)键/值对提供快速途径。我们将mapreduce加速器作为协处理器来实现,可通过共享总线作为多核处理器的扩充。图1为多核soc中加速器方框图。
如图所示,我们已在配备有一对arm cortex™- a9 ip核的zynq soc中整合了硬件加速器单元。每个内核都有其自己的指令和数据高速缓存,而每种高速缓存都可使用共享互连网络与外设进行通信。该加速器通过连接到互连网络的高性能总线实现与处理器的通信。处理器通过访问加速器的特定寄存器,给出需要更新到mapreduce加速器的键和值。map任务结束后,加速器即累加了所有键的值。处理器仅需将该键发送给加速器并读取寄存器中的最终值,即可检索该键的最终值。通过这种方法,所提议的架构就能向包含需要更新的键/值对发送无阻塞交易,从而加速mapreduce处理。
编程框架
图2为使用硬件加速器的mapreduce应用编程框架。在原始代码中,map级发射键/值对,而reduce级则搜索该键并消耗若干cpu时钟周期的时间来更新(累加)新值。使用mapreduce加速器的情况则与此相反,map级仅发射键/值对,而mapreduce加速器则合并所有的键/值对并更新相关条目,因而无需采用reduce功能。
hash函数可加速键的索引进程,但若两个键具有相同的hash值,则可能造成冲突。我们选择了cuckoo hashing作为解决hash冲突的最佳途径。
运行在linux之下的应用层与硬件加速器之间的通信通过使用存储器映射(mmap)系统调用来进行。mmap系统调用能将指定的内核存储器区域映射到用户层,因而用户能根据存储器映射过程中提供的属性对其进行读取或写入操作。
我们使用控制单元来访问这些寄存器和串行化键/值组件的更新。键/值对存储在能根据应用要求进行配置的存储器单元中。该存储器模块包含键、值和可用作标签的部分数位。这些标签用于标示存储器线路是否为空以及是否有效。为了加速键的索引进程,可用hash模块将初始键转换为存储器模块的地址。
在当前配置中,我们设计的存储器结构可容纳2千个键/值对。每个键的长度可达到64位(8个字符),值的长度达32位。存储器结构的总体大小为2k x 104位。第一个64位存储的键用于比较使用hash函数时我们究竟是命中还是错失;接下来的8位用于存储标签;再之后的32位则用于存储该值。在当前的配置中,最大键值为64位,hash函数用于将键(64位)映射到存储器地址(12位)。
cuckoo hashing
hash函数能加速键的索引进程,但在两个不同的键有着相同hash值的情况下,也可能造成冲突。为了解决这一问题,我们选择了cuckoo hashing作为解决hash冲突的最佳途径。cuckoo hashing[2]使用两个(而非一个)hash函数。在插入新的条目时,这个条目就会存储在第一个hash键的位置。如果该位置被占用,就会将旧条目移到自己的第二个hash地址。这个过程会循环往复,直到找到空闲地址为止。该算法可提供恒定的查找时间o(1)(查找只要求检查hash表中的两个位置),而插入时间则取决于高速缓存的大小o(n)。如果该流程应进入无限循环,hash表就进行重建。
使用t1和t2两个表能实现cuckoo hashing算法。ti和t2分别对应一种hash函数,每种大小为r。每个表均使用不同的hash函数(分别为h1和h2)来创建t1和t2的地址。每个组件x分别经hash函数h1或h2运算后,存储在t1或t2中,即有t1[h1(x)]或t2[h2(x)]。这样的查找方法简单明了。对每一个我们需要查找的组件x,我们仅需分别使用hash函数h1和h2检查t1和t2表中的两个可能位置。
要插入组件x,我们需要检查t1[h1(x)]是否为空。如果为空,就可以把组件x存储在这个位置。如果不为空,我们就用x替换t1[h1(x)]中已经存在的组件y。然后再检查t2[h2(y)]是否为空。如果为空,我们将组件y存储在这个位置。如果不为空,就用y替换t2[h2(y)]中的组件z。然后我们再尝试把z存储到t1[h1(z)]中,如此往复,直至找到一个空闲位置。
根据原始cuckoo hashing文章[2]的说明,如果在一定次数的尝试之后未能找到空闲位置,则建议对表中的所有组件进行重新处理。在我们当前实现的软件中,每当运算进入这种环路时,软件就会停止运行并将0返回给函数调用。然后该函数调用可能会发起重新hash处理,或者可能选择像原始代码中的做法一样,向软件存储器结构中添加特定的键。
我们将cuckoo hashing用于图1所示的mapreduce加速器。我们使用了两个block ram来存储t1和t2两个表的条目。这些bram可存储键、值和标签。在标签字段中使用1位用于标示特定的列是否有效。使用两个基于简单xor函数的hash函数将键映射到bram的地址。每次需要访问bram地址时,就需要使用hash表来创建地址,然后根据两个比较器的指示来判断能否命中bram(即创建的键与ram中存储的键一样,且有效位为1)。控制单元可协调对存储器的访问。我们将控制单元实现为可执行cuckoo hashing的有限状态机(fsm)。
性能评估
我们已在zynq soc中实现了所提议的架构。具体而言,我们将phoenix mapreduce框架映射到linux 3下的嵌入式arm ip核中。每当处理器需要更新键/值对的时候,它们就会通过特定的函数调用功能发送信息。
为了评估本系统的性能,我们使用了phoenix框架提供的三种应用,经修改后利用硬件加速器运行。这三种应用分别是字数统计、线性回归和直方图。
所提议的方案具有可配置性,能根据应用需求进行微调。为了评估phoenix mapreduce框架应用的性能,我们已为加速器配置了4k容量的存储器单元(可存储4,096个键/值对,每个bram存储容量为2k)。每个键的大小最大可为8字节。
表1显示了mapreduce加速器的可编程逻辑资源。正如您能看到的,加速器基本上由存储器组成,而控制单元则用于有限状态机,hash功能只占据器件的一小部分。
图3将原始应用和采用mapreduce加速器应用的执行时间进行了比较。这两次测量均以赛灵思zynq soc设计为基础。
在字数统计应用中,原始应用里map的任务是对字进行识别,然后提交给reduce任务。reduce任务随即收集所有的键/值对,并累积每个键的值。在加速器应用中,map的任务是识别字,然后通过高性能axi总线将数据提交给mapreduce加速器单元。将键/值对存储在寄存器(每个处理器均不相同)中,然后加速器通过访问存储器结构来累积每个键的值。
为处理器减负
执行时间缩短的原因在于,在原始代码中,reduce任务必须首先加载键/值表,再在全表范围内搜索需要的键。然后,在完成值的累积后,reduce任务必须将键存回存储器。在使用mapreduce加速器后,我们可将该处理器从这项任务中释放出来,从而缩短mapreduce应用的总体执行时间。cuckoo hashing(o(1))让键的搜索工作在加速器中完成,同时处理器在键/值对的更新过程中通畅无阻。
如图3所示,系统的总体速度提升了1.23倍到1.8倍不等。具体加速情况取决于每项应用的特征。在映射函数较为复杂的情况下,mapreduce加速器的加速性能就不那么明显了。在映射函数较为简单且占用的总体执行时间较少的应用中,加速性能比较显著,因为有大量总体执行时间可用于map和reduce功能之间的通信。因此在这种情况下,mapreduce加速器能提供非常明显的加速效果。此外,mapreduce加速器还能在处理器中创建较少的新线程,从而减少环境切换次数和执行时间。例如,在字数统计应用中,平均环境切换次数就从88次降到60次。
mapreduce框架能广泛应用于多核soc和云计算应用的编程框架。对于赛灵思zynq soc等多核soc平台以及基于mapreduce框架的云计算应用来说,我们提议的硬件加速器能通过为这些应用的reduce任务加速来降低总体执行时间。如欲了解有关如何运用zynq soc平台为云计算加速的更多详细,敬请联系首席作者christoforos kachris博士,也可访问 。

小冰公司完成 Pre-A 轮融资
未来无人机的应用市场还将继续不断向上发展
浅析Dialog可穿戴设备解决方案
可随时监控蜂巢情况的传感智能监控设备
基于PWM 通道的16位定时器/计数器精确模拟功能
采用Xilinx Zynq SoC 为云计算提速
特变电工和国电南瑞你追我赶,营收差距大幅度减小
云迁移怎样做可能失败或者成功
晶振的效果与原理图
苹果手表占据全球50%的市场份额 国内智能手表厂商没有进四强
科莱恩宣布投资增强中国乙氧基化工厂的产能
电池的内阻知识
逐渐迸发市场潜力的接触觉传感器
智能多媒体服务 Dora,让用户获得更好的音视频体验
刘洋:打造一站式平台,助力OpenHarmony商业化落地
Molex 提供突破性的 Polymicro Technologies™ 纳米毛细管
基于手机短信的温度报警控制系统设计
5G改变物联网的六种方式
英特尔处理器命名规则介绍_英特尔处理器种类_英特尔处理器排名
提升齿轮泵基本要素的回路的方法是什么