加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

一种全新的低功耗服务器架构

(2012-10-16 16:54:56)
标签:

低功耗

服务器架构

预处理器

it

分类: 专利、硬件工程

文/林祥

数据中心主要分为网络、服务器以及存储三大部分,其中大量的服务器的能耗占比相当高,消耗的电量惊人。根据Gartner的调研结果:“过去五年来, IT设备的能源需求增长已超过五倍”,而未来更是呈规模式增长。由于数据中心中的服务器是常年不间断运行的,如果每台服务器可以节约一点点功耗,经过大量服务器和长时间的积累,可以节约的总体能耗将会非常可观。

服务器是绝大部分网络数据的源头,随着数据访问需求的不断提高,对服务器的整体性能的要求在不断的提升。现有技术为了满足服务器的高性能要求,往往采用高功耗的x86架构处理器或RISC架构的处理器。如果单颗处理器性能不能满足要求,通常要求这些处理器提供互连接口(比如Intel的QPI总线和AMD的HT总线等),使多颗芯片并行工作,系统软件和应用软件可以认为多颗芯片上共享物理内存等系统资源,从而使系统能够协调运行。然而大部分主流的CPU功耗基本保持在接近甚至超过100瓦的水平,一方面要降低服务器CPU的功耗,另一方面还需要尽可能地提高性能,这看起来是矛盾的。

服务器的CPU除了要做数据运算之外,还需要处理大量与外界的通信业务。处理器对报文的处理过程中,一般会根据报文的内容读写一些业务表。为了减少业务表的互斥访问,业界通用的做法是使一条业务流被保持在一个处理器上处理,不同处理器上的数据流没有关联关系,从而可以减少业务表的互斥访问,提升处理性能。现有技术依赖软件来解决关联流问题,对分片报文处理流程复杂,因此对处理器的性能要求很高。这制约了服务器对低功耗处理器的使用。这类处理器虽然性能相对低一些,但具有极高的性能功耗比,比如Marvell公司ARM架构的1.5GHz主频的四核心处理器的功耗只有7瓦。这类处理器的主要目标市场是消费类电子,不需要多颗处理器协同工作,所以一般不提供处理器间的互连总线,不能简单地应用到服务器领域。那么,有没有办法解决这个问题,让服务器使用性能功耗比高的处理器?

H3C提出一种创新的设计理念——预处理器。预处理器的主要工作就是做流分类以及分片处理等工作,这样后端的低功耗处理器就不需要应对这些工作了从而可以集中于其他工作。引入预处理器,可以使多颗具有高性能功耗比的处理器协同工作,代替现有高能耗的服务器方案,降低整个服务器系统的功耗(如图1,图2所示)。

 

http://www.h3c.com.cn/res/201112/20/20111220_1307689_02_736166_30008_0.GIF图1 低功耗服务器系统架构示意图

http://www.h3c.com.cn/res/201112/20/20111220_1307690_03_736166_30008_0.GIF

 

图2 预处理器处理流程框图

预处理器可以划分为以下四个模块。

  • IP分片报文处理模块

IP分片报文处理模块处理分片报文,对于非分片报文直接发送给流分类模块。对分片报文,如果首片先到达,在分片记录表中记录下分片报文的五元组信息和ipid信息,当后续分片到达时,以作为key查分片记录表,获得信息,将端口信息也传递给流分类模块,从而对后续分片报文也能根据五元组信息进行正确分片。当后续分片报文先于首片到达时,查找分片记录表失败,这时对后续分片进行缓存,当首片到达时,记录下分片信息,同时对缓存的后续分片根据分片信息进行正确流分类,对乱序报文进行调整。

  • 流分类模块

流分类模块根据报文的五元组信息查通过流表维护模块查找流表,如果找到对应的流表,将报文发送到流表中指定的处理器。如果没有查到对应的流表,那么通过流表维护模块创建流表,并根据处理器信息表获得负载最小的处理器,填充到流表中,该流的后续报文根据这个新流表项进行流分类。

同时,流分类模块对部分协议报文进行解析,根据需要创建关联流。这样当新的数据连接报文到达时,查流表(如表1所示)就可以转发到控制连接希望的处理器上处理。

名称

长度(字节)

说明

sip

4

源IP地址

dip

4

目的IP地址

sport

2

源端口号

dport

2

目的端口号

protocol

2

协议号

cpu

2

这条流将要发送到该处理器

age

4

老化计数。流表维护模块使用,创建时为0,每秒钟加1,该值到达MAX_AGE_TIME(默认是60秒)时老化掉该表项。

表1 流表

  • 流表维护模块

流表维护模块提供创建、查找、老化流表的功能。流分类模块调用流维护模块创建流表。流表维护模块为流分类模块提供流表查找功能,每次成功查找到流表后,将流表老化计数清0。每秒钟遍历流表,将老化计数加1,对于超过MAX_AGE_TIME的流表进行删除(即老化掉该表项),为新创建流表项提供空间。

  • 处理器监控模块

处理器监控模块完成各个处理器的状态监控,包括负载情况和运行是否正常。由于处理器的负载是预处理器分配的,所以预处理器创建流表时,选择一个负载比较轻的处理器来处理新流,每个查流表的后续报文都更新该处理器处理报文的信息。这样可以实现各个处理器间负载的均衡。以下举例说明处理器监控模块的实现。

1、处理器监控模块为每个处理器维护一个监控表项(如表2所示)。

名称

长度(字节)

说明

status

4

如果为0,表示该处理器异常,暂时不能处理异常。1表示正常,可以处理报文。

packets

4

以报文计算的该处理器的报文负载。每报文加1,每秒钟将该值减小一半。

bytes

4

以字节计算的该处理器报文负载。每报文增加报文字节长度,每秒钟将该值减小一半。

表2 处理器监控表

2、 处理器监控模块每秒遍历一遍监控表,检查处理器是否异常。比如处理器监控模块每秒钟给处理器发送一个探测报文(如ping报文),如果在指定时间内监控模块接收到了处理器返回的探测报文,那么就认为该处理器正常,否则就认为异常。

3、 每次流分类模块通过流表向指定的处理器发送报文时,更新该处理器对应的监控表的packets和bytes字段。


 预处理器的完整流程(如图3所示)

http://www.h3c.com.cn/res/201112/20/20111220_1307688_image003_736166_30008_0.png

图3 预处理器处理流程图

1、 IP报文首先进入IP分片报文处理模块,如果不是分片报文直接发送到流分类模块。如果是分片报文做分片处理后再发送到流分类模块。

2、 报文进入流分类模块后,通过流表维护模块查找流表,如果找到,根据流表中的信息将报文发送到指定的处理器处理。如果没有查到流表,则通过流表维护模块建立一个新的表项,根据处理器信息表选择一个合适的处理器。根据新创建的表项,将报文发送到指定的处理器处理。

3、 每次流分类模块向指定处理器发送一个报文,更新该处理器的负载信息。

专利点评:

处理器架构和设计技术决定了不同类型的芯片具有不同的性能功耗比。本项技术创新可以使一些原本不适合做服务器使用的、具有高性能功耗比的芯片应用到服务器上,从而降低系统整体功耗,同时由于预处理器执行了一些处理器上的功能,使处理器的处理流程得到了简化,所以也提升了处理效率。预处理器器件以Altera公司的EP2AGX125为例,其实现预处理功能的功耗大约为12瓦,如果配合10颗1.5Ghz主频的四核心的Marvell 78x30处理器,总功耗大约为82瓦。如果采用目前典型的服务器类处理器,比如六核心的2.266Ghz的Intel Xeon E6540,性能显然不如新架构服务器强大,但是单颗处理器的典型功耗却是105瓦。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有