浅谈高端CPU Cache Page-Coloring(1)

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享

现代CPU是越来越狠。x86+PCI-E 3似乎要横扫一切的样子。Tilera等高端CPU也咄咄逼人。RMI 832也似乎在朝着大型CPU的方向靠拢。换言之,经典Server和Desktop CPU与网络CPU在融合,convergence。 你中有我;我中有你。

不久的将来,Software-Based 各种设备,估计顶到Edge的层面,似乎都不奇怪。

但,要把大型CPU用的好,绝非写写胶片,就能搞定。

胶片一分钟;台下N年功。

其中,对大型CPU的大Cache的有效利用是其中重中之重。

这就好比,你忽悠了一个美女到家里,但是美女发现你不能很好的满足她的各种需求【此处省略249字。。。】

观察业界的各种大CPU,最凸显的就是L2,L3 Cache的巨大。而且L3都已经在Die里。

对桌面和服务器系统来说,这些Cache的管理基本上与业务无关。OS基本上全Cover了。

但对于通信系统,必须aware。

为啥涅?

通信系统的Data Path(含数据结构)是非常要求realtime的。是线速要求的关键之处。

友善的Cache命中率可以使得一个系统的性能让人不相信,让人觉得是一个863的成果,或者核高基项目的汇报演出:-)。

那么如何分配数据结构? 如何Cache Friendly?

有许多方法,但其中一个重要的手筋就是–Page Coloring

Page Coloring方面比较绕人。要搞懂,基本上需要对OS和CPU都明白。要能真正的敢用,估计江湖上也就陈首席一个人了。。。。。。要用好,目前没看见过。 Panabit系统估计在Cache方面用的比较好。但是否用了Page Coloring目前看不出来。

什么是Page Coloring?

首先不要上来就去看学术文章。

最好的学术一定是来源于生活。例如,陈首席的多核与公厕的悖论原理

× Page Coloring其实就是要让OS在内存管理方面Cache Aware。Cache感知。
× OS VM对物理页面的分配机制与CPU Cache的管理机制不是和谐的。
×Page Coloring的前提是这个CPU必须是Physically Indexed。

下面通过一张精选的图示,来看看什么是Page Coloring。

在大多数OS的VM管理中,当分配一个页面Page[Note: 一定要牢牢记住,Page的概念是OS的概念,而非CPU的概念。这个问题出现混淆,请买豆腐撞死】,通常是4K一个页面。这里是否是4K不重要,就是一个happen to 4K而已。

如果是4K,如何分配的?

一定是0-11 bits是Offset(2^12=4K)。31-12bits是Page Number。这就是上图的所谓Page Frame。

那么请问,这些一个个Physical的Page是如何落入Cache的手里的?

这个问题的等价问题是(用洋文说是,reduced to):

Cache是如何Allocate,Hit的?

现代CPU基本上都是Set-Associative的管理方式。

我们来简单的看看一个大Cache的Set-Associative的管理方式是如何与经典OS的Page管理方式脱节的。

这种脱节是导致了Page Coloring算法出现的唯一动机。

算法的胶片是要解决问题的。否则就是YY(意淫)。

例如一个1M的Cache Line大小为32Byte的8Way Set Cache。

8Way的意思是:一个SET(集合)有8个Cache Line。

那么这个CPU能有多少个SET?

1M/(32*8) = 2^20/2^8 = 2^12 = 4K = 4096

这个CPU有4096个SET。每个SET是8个Cache Line。

一个问题涌现了: 如何使得OS层面上物理页面(Page)的分配能够比较均匀的落在CPU层面上的SET中。从而可以避免自相残杀和互相挤兑?

上述命题可以reduce成为这样一个命题:

一个基于4K为页面大小的OS层面的Page分配机制与一个基于32 byte Cache Line大型的SET-Assoc分配机制的Cache管理基本上没有任何逻辑关系?

但这种关系的弱映射是至关重要的。

我们如何来解决?如何把一个OS与底层的CPU在语义上来紧耦合?

最关键的地方出现了。

就是上述我辛勤画出的这个x的值。x的位置。

(36个打分, 平均:4.22 / 5)

超级强震:Facebook开源服务器和数据中心核心技术

今天世界最受关注的新闻大概已经从利比亚内战转移到了日本再次发生强震。而对于信息产业而言,美国发生的一条新闻恐怕不亚于一次地震。Facebook北京时间今天凌晨在其总部举行发布会,宣布启动名为The Open Compute Project的新项目(http://opencompute.org/servers/)(http://opencompute.org/datacenters/),将其底层服务器和数据中心技术开源。

值得注意的是,Facebook此次不仅公开了技术文档,甚至连服务器和数据中心的CAD图纸设计也完全公开。

Facebook CEO Mark Zuckerberg称,将开放他们领先业界的定制服务器和数据中心技术的规范和文档,以回馈社区,促进生态系统成长,推进技术进步。他表示,Facebook团队为此已经工作了一年。 Facebook的数据表明,他们的定制硬件各方面指标比业界标准要高得多,与公司从设备厂商购买的同类现成产品相比,效率提升38%,成本则降低了28%。而整个数据中心的能耗按PUE(Power Usage Effectiveness,电能使用效率)衡量是1.07,大大低于业界通常的1.5。

Facebook的运营负责人Jonathan Heiliger表示,公司前七年也是租用数据中心,但后来意识到其中有很多改进空间,于是决定自建。目前已经开始建设第二个数据中心。与此同时,他们还自己设计了服务器。随着Facebook开源这些技术,其他创业公司将有可能根据自己的需求,在其基础上进行进一步的定制,可以想像,会有更多创新涌现。

目前,Facebook的硬件项目合作伙伴包括英特尔、AMD、戴尔和惠普。

惠普行业标准服务器和软件业务首席技术官格雷格·哈弗(Greg Huff)说:“拥有庞大计算需求的企业仍将寻找创新技术,以便突破当今的障碍。”

戴尔服务器平台副总裁佛雷斯特·诺罗德(Forrester Norrod)表示,他的公司已经根据Facebook的新设计为一些企业提供了部分系统。“这意味着你将拥有一个开放的创新平台。”他说。

Facebook此举将对其他网络巨头构成压力,他们正在很多技术问题上与Facebook争夺“开放性”。谷歌发言人说:“我们仍在熟悉这个项目,但总体而言,我们会支持那些能够推动最佳措施,并方便企业部署节能设计的计划。”

Facebook此举堪与2004年Google陆续发表MapReduce等论文相提并论。Google当年的开放措施实际上直接启动了如今如火如荼的云计算运动。而Facebook今天将云计算之火烧到了硬件和数据中心领域。 Heiliger在今天发布会上的一句话非常耐人寻味。他说,数据中心的神秘面纱该去掉了。两年前,Google曾对其数据中心服务器进行了粗略的介绍,TechCrunch的记者认为,Facebook此举是在讽刺Google,后者的数据中心和服务器领域技术公认非常领先,但一直视为独门绝技,密不示人。

(5个打分, 平均:5.00 / 5)