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

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




上节中我们讲到,如果对内存的0-127(总共128)个物理页面做内存清零(memset)的话,其在cache中的分布是正好每一个SET(包厢)里,放入了一个cache line(包厢里的长凳子。每个凳子上32个人。每个包厢是4个凳子:4 Way)。
现在来考虑,接着对第128th 物理Page清零。我们来考察其在Cache中会落在哪里。

我们先谈结论。

结论: 第128th物理页面会与第0个页面占据同样的Cache Sets。
推论:

* 第ith物理页面会与第(128+i)th个物理页面在Cache中占据同样的Cache Sets。

* 第ith物理页面会与第(128*j+i)th个物理页面中Cache中占据同样的Cache Sets。(i,j = 0,1,2….)


属性讨论:

× 占据同样的Cache Sets,会导致潜在的Cache冲突,替换。例如,当一个N-Way的Set,如果所有的Way(长凳子)都被坐满的时候,必须按照某种算法,把倒霉蛋踢出局。

× 我们把i, 128×j+i(i,j=0,1,2,3…)等属于同一个Cache Sets映射的物理页面,称为具备同样颜色(Color)的物理页面。

×请注意,每一个4K的物理页面上映射到127个连续的SET中。是Cache SetS。学术上,这个相应的容纳这个4KPage的Cache SET的集合,叫做 Cache Bin


图示:

下面来分析一下为什么第ith个物理页面与第(128*j+i)个物理页面会是映射到同样的cache set中。

我们讨论的这个Cache是一个L2 Cache,参数如下:
–大小: 2M –SET/Way: 16384/4 Way SET –Line: 32 Bytes

16K的SET。意味着2^14。

换言之,需要物理地址贡献出14个bit,来做为定位其落在哪个Cache Set.

从上图我们知道,bit 5-18是用来选择属于哪个SET的。

× 由于一个物理Page的5-11是可变的【4K的物理Page】。因此这就是为什么上节所解释的一个物理Page一定是占据了连续的128个SET中的某一个cache line: 11-5+1 = 7. 2^7= 128.
* 对于一个已知的i,其bit 12-31【共24bit】是已经固定的,fixed的了。是不变的。

现在来考察 i 与128*j+i的关系。

很显然,物理页面i与物理页面i+128*j的低7位数完全一致的。换言之,bit 12-18是完全一致的。

例如,
128-0 = 128 = 0b1 0000000;
128*1 -0 = 0b10 0000000;
128*2 – 0 = 0b11 0000000;
……
以此类推,

128×j – 0= j(128-0) = j * (0b 1 0000000);
= 0b x 0000000;
其中 x的十进制值为j。

由此可见对于任何一个物理页面i,对应的128+i页面,128×2+i,128×j+i页面的bit 12-18是相同的。

这意味着什么?

请注意,Cache的SET的选择就是通过5-18bit来决定的。

如果两个物理页面的12-18bit是一样的,

这意味着: 这些页面的4K内容都会落在相同的128个SET中(5-11位决定的)。这些页面属于一个相同的颜色(Color)。

下图所示是当4个具有同样颜色的物理页面都被读到Cache中后,Cache的SET和Way的情况–“属于你的”包厢的4条凳子都全部坐满。

这里面, “属于你的”这个词非常重要。即使妈咪有别的包厢,但如果不属于你,你是不行的。有钱都不灵。“属于你的”其实就是你的颜色;你的颜色决定了你的出路和你的地位;

这有点类似与当年,你的阶级成分决定了你许多的将来。。。。。。由于出身论被枪毙的遇罗克同学是一个英雄。。。。。。

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

雁过留声

“浅谈高端CPU Cache Page-Coloring(3)”有35个回复

  1. 陈怀临 于 2011-04-24 7:49 下午

    下一篇,我要上公式了,做量化分析了。

  2. spike 于 2011-04-24 7:55 下午

    看了《Computer Systems A Programmer’s Perspective_2nd》再来看首席的文章,增加了不少领悟。我觉得首席的文章深入浅出的程度跟Bryant的书有得一比,而书里面主要对direct-mapped cache进行分析,适合入门者了解cache原理,而首席的文章对set associative cache进行分析,同时结合OS的page概念,更具实战价值。。。首席你真的可以考虑出一本系统架构和软件的书,广大大宋民工必定受益匪浅。

    目前我理解page frame到cache的映射还是比较直接的。32位地址的中端部分5-18bit对应set index,高端部分19-31bit对应set里面的tag,因此0-127个page中任意两个line都不能存在于同一个cache set之中,因为他们的tag是一样的,而set index必定不一样。这样的{m,t,s,b}分配方式可以让cache hit or miss直接快捷,如果任何一个set里面都没有不超过1个line,则对任一line通过set index也就是5-18 bit和cache line的valid bit就可以判断hit or miss,否则,则进一步判断tag。而page的coler通过对内存地址进行取模也可以直接得到。

    目前还不太明白page coloring需要软件做什么?需要保留额外的数据结构来trace和balance内存分配吗?

  3. Lucifer 于 2011-04-24 8:54 下午

    还是首席的货比较硬

  4. kevin 于 2011-04-24 8:55 下午

    按首席的话说,就是减少各位大爷在同一时间点某一个小妹的概率

  5. pf 于 2011-04-24 9:05 下午

    不知道page coloring 和linux的slab coloring有什么区别?

    我的理解是,对于首席里面的例子,如果CPU在某段时间里面频繁的交替访问页0,128,256,384,512五个页的0-31字节处的数据,那么从第5次访问开始,每次都会miss。因为偏移量相同,这五个页的起始数据都放在SET 0里面,而实际上cache的其他set很可能是空的。可行的做法是以bit[18-12]作为color值,color offset 为一个cache Line的字节,在每个页的相同数据结构前偏移color*line个字节。这样上面5个页的原0-31字节处的数据结构现在的偏移分别是0,32,64,96,0,全部load进cache后分别位于set 0,1,2,3,0,不会冲突,提高了cache的性能。

  6. 陈怀临 于 2011-04-24 9:12 下午

    pf同学基本上全部get points了。基础非常不错。

    我会在以后谈 Page Coloring与Slab Coloring的等价问题。

  7. 冬瓜头 于 2011-04-24 10:31 下午

    受教了,虽然很多看不懂。
    首席,我的那篇软货您老啥时候给审批一下啊

  8. 冬瓜头 于 2011-04-25 12:14 上午

    8楼,有时候太硬了,会一碰就碎的,软一点也有好处。

  9. Puppy 于 2011-04-25 3:13 上午

    期待量化中

  10. 天外有天 于 2011-04-25 4:10 上午

    这样上面5个页的原0-31字节处的数据结构现在的偏移分别是0,32,64,96,0,全部load进cache后分别位于set 0,1,2,3,0,不会冲突,提高了cache的性能
    —————————————

    如何确定那些页有可能冲突?

    结合到软件,
    我们可以知道那些数据是同时访问的。
    如何确定这些数据在那些页里面?(全局的,kmalloc的,vmalloc的)。
    如何确定这些页同时访问到相同的地址偏移,从而造成cache不够哪?

  11. 理克 于 2011-04-25 8:47 上午

    To冬瓜头:你如果遇到的是不欣赏你的人,并且如果不幸不是首席这样的君子,你就不好玩了

  12. 陈怀临 于 2011-04-25 11:11 上午

    冬瓜头,我今天早晨6点多就帮助您老编辑您的文章。。。后来give up。原因如下:
    1。 您简单的copy paste,把大量的link embedded在文字里。
    2。 您自己preview一下。看看效果。就知道以后该如何做了。
    3。 静下心来是一种磨练。共勉。例如,我写的那些略带算法分析的文章。写到最后,半天头痛。但要么不写,要么try best。

    塞塞。

  13. 冬瓜头 于 2011-04-25 6:28 下午

    实在对不住了,这个word express,实在不会玩,怎么编辑最后都是那个样,但是又不能一个字一个在重新敲一边,我再搞一搞,搞不好就不发了。

    理客,不好玩可以不玩啊,生来不是被人玩的。每个人性格不同,如果都一个所谓完美性格,那是你写出来的代码。

  14. 吴朱华 于 2011-04-25 6:31 下午

    当年一篇文章编辑了20次的飘过:)

  15. 冬瓜头 于 2011-04-25 6:36 下午

    刚编辑完,这次应该符合首席要求了,不过可悲的是,我司的安全设备实在是牛的让人咗舌,能自动识别上传太大数据的话,给你禁了,哈哈!只能晚上再搞了。

  16. 陈怀临 于 2011-04-25 6:57 下午

    我来吧。。。你司实在是,唉。。。

    我花一个小时整你的文章,基本上是对人类文明进步的犯罪。

  17. 冬瓜头 于 2011-04-25 7:09 下午

    首席一个小时写的代码可能会推动GDP大幅增长,罪过罪过。。

  18. 胡不才 于 2011-04-25 7:24 下午

    问首席个问题,这CPU的2M cahce是如何分布和访问的,也像内存一样吗,set[16384][4]? 内存上连续的4K内存映射到cpu上128个连续的set,但这128个连续的set是物理上并不是连续的?

    下面是量化的理解

    set[0][0] = 32 bytes 0×0 – 0x1f
    set[0][1] = 0×80000 – 0x8001f
    set[0][2] = 0×100000 – 0x10001f
    set[0][3] = 0×180000 – 0x18001f

    set[1][0] = 32 bytes 0×20 – 0x3f
    set[1][1] = 0×80020 – 0x8003f
    set[1][2] = 0×100020 – 0x10003f
    set[1][3] = 0×180020 – 0x18003f

    set[127][0] = 32 bytes 0xfe0 – 0xfff
    set[127][1] = 0x80fe0 – 0x80fff
    set[127][2] = 0x100fe0 – 0x100fff
    set[127][3] = 0x180fe0 – 0x180fff
    0x7f

    set[16383][0] = 32 bytes 0x7ffe0 – 0x7ffff
    set[16383][1] = 0xfffe0 – 0xfffff
    set[16383][2] = 0x17ffe0 – 0x17ffff
    set[16383][3] = 0x1fffe0 – 0x1fffff
    0x3fff

  19. kernelchina 于 2011-04-25 8:58 下午

    1) windows live writer本来是个很好的工具,但是在弯曲用不起来,首席注册一个测试帐号,用普通用户试一下,看看行不行
    2)page color解决什么问题?进程之内的冲突,还是进程之间的冲突?还是两者都有?slab color解决内核里面对象之间的冲突,但是实际效果并没有多好,而且用color的方式解决冲突,在对象很多的情况下,由于cache容量有限,冲突是不可避免的。能不能在l2就把code和data分开,我现在还没有一个感觉,就是code和data之间的冲突有多大?

  20. 陈怀临 于 2011-04-25 9:34 下午

    In general(不同的vendor有不同的设计),cache mem是SRAM。physically分为两块: Tag SRAM和Data SRAM。各种管一滩。

    SET,不管是V还是P Index。一个local add bus,直接打到Tag和Data SRAM。同时结果都出来。。。然后一通胡比较。。。

    反正最后就落到AND, OR等电路级别上了。。。。。。

  21. cypk 于 2011-04-27 12:11 上午

    关注了近几期陈首席的关于Page Coloring解析,深感受用,比看英文文献了解得透彻多了(不是别人写的不好),感谢首席。

  22. 陈怀临 于 2011-04-27 6:27 上午

    谢谢。学术的东西一定可以从生活中找到映射。。。
    Page coloring的paper都写的比较晦涩。

  23. 理客 于 2011-04-27 12:39 下午

    写好技术文章,尤其是书,是需要有相应的素质、功夫和训练的,能写得上好的人不多

  24. chinomango 于 2011-04-28 4:49 下午

    to 5/6楼:“0,128,256,384,512五个页的0-31字节处的数据“ 如果这样做coloring,是否会在另外一种模式遇到同样的问题?

  25. Anonymous 于 2011-04-30 6:51 上午

    不得不提一下Octeon的cache算法,他是有一种模式是对所有物理比特做hash再来去计算set index. 这样,从硬件上就解决了cache coloring 的问题。

  26. cndy 于 2011-04-30 7:26 上午

    首席好,经常看您写的文章,注意到网友pf关于page color留言 “用bit[18-12]作为color值,color offset 为一个cache Line的字节,在每个页的相同数据结构前偏移color*line个字节。这样上面5个页的原0-31字节处的数据结构现在的偏移分别是0,32,64,96,0,全部load进cache后分别位于set 0,1,2,3,0,不会冲突”,有点不是很明白,bit 18-12共7bit表示为 00(color吗?) 00000(color offset吗?),即color*line字节.这里有点晕。

  27. 陈怀临 于 2011-04-30 7:46 上午

    12-18就是所谓的color bit了。别再在color bit再做细分了。

    这里面关键的关键是:12-18是OS可以操控的了。【属于OS 层面Page Frame的bits】。

    Thus,OS可以影响cache的行为了。。。

  28. 胡不才 于 2011-04-30 10:12 上午

    首席有个问题,如果加一个2M的cache给应用程序直接用,那么OS的优化是不是就不那么重要了?

  29. 理客 于 2011-04-30 11:54 上午

    看应用,2M的cache,即使只用指令,也支持不了多大应用程序。intel类通用CPU属于计算型,对数据cache要求低,而通讯设备里业务处理用的处理器,是一定要集成大的数据cache

  30. yile 于 2011-05-18 4:02 上午

    首席讲得有意思,看起来也过瘾。有个问题没明白,请教一下:

    进了包厢以后,怎么知道哪个凳子是自己的?

  31. 陈怀临 于 2011-05-18 3:29 下午

    很简单的道理。如果你在包厢里,占了凳子。但相比其他哥哥,你不办事。。。,不消费,妈眯一定是赶你走。。。,留下有动作的。。。--LRU算法。

  32. kevin 于 2011-05-18 9:46 下午

    你经常光顾,跟妈咪混个脸熟,妈咪看见你,即使你不消费,也能让你多待一会。。。。。。–WLRU算法。。。不过妈咪累的半死不说,新来的客人可惨了。可能刚进门,还嘿咻的时候就被踢到大街上去了。。。

  33. yile 于 2011-05-19 2:45 上午

    To 首席,kevin,

    哈哈,多谢。这个倒是明白,让我把问题改一下:

    现在假设你指挥扫黄,包围了一个包厢,妈咪告诉你县委书记在里面,你如何找到他?进一步讲,如果你就是去抓书记的,这个问题就更准确了嘿

    谷哥说,进包厢的时候,书记身上挂了个牌子(31-18bits),写了“我是书记”,是这么个事么?

  34. kevin 于 2011-05-19 10:55 上午

    似乎没有这种场景
    一般你问妈咪,书记在不在
    妈咪回答
    1.不在。今天没来。
    2.在,人已经给你抓来了。你自己看着办吧

  35. yile 于 2011-05-20 9:48 上午

    看来不在工作范围呢,O了,谢啦