Cache Index

在N路组相联的cache结构中,如何选择一个组(set)是很有重要的一个问题,最常用的算法是bit selection,这是最简单的实现方式。


在这个图中

Set (i) = f(r (i)) = Bit 12~6    即由第6~12位就可以确定它位于哪个组中。

虽然这是一种高效简介的实现方式,但其最大的问题在于不够随机。曾经有人 (参考1)尝试过使用pseudo-random算法来作为函数f() ,这种做法实际上是不可取的,原因在于:第一,设计芯片时,很难实现在短时间内产生一个随机数,即便最常用的LFSR(Liner Feedback Shift Register)机制也会有一个节拍的延时,而且还不是真正的随机数。第二,由于程序的 空间局部性,他们会有规律地使用这些cache,随机分配的结果反而会影响这种局部性。

实践表明(来源2)使用XOR-Mapping机制的Hash算法在效果上和Pseudo-random,但是实现起来非常简单,只需要简单的XOR门电路即可,使用这种算法选择cache 组时,冲突比Bit selection少。这种算法在容量较大的LLC层使用比较多,在追求HIT time的L1 Cache中,多数CPU使用还是bit selection。

Bit Selection最大的问题在于选择组时,冲突很厉害,这使得操作系统在选择物理内存时需要关注这个冲突,因此也产生了和物理内存分配相关的一系列Index感知的分配算法。

Linux使用分页机制管理内存,大部分情况下使用的都是4KB的页,应用程序需要使用内存时,Linux将从空闲的内存池中选取一个未使用的物理页分配给应用程序,不同的分配算法会选取出不同的物理页。

Bin Box

大部分情况下,操作系统以4K为单位分割内存页,如下图所示,4K的边界将Cache Line Index 分成两部分,在Page frame 中的部分被称为Bin index ,在Page offset中的部分被称为Offset index。因此,内存分配算法也相应地分成两种:Bin Index感知的和Offset Index 感知的分配算法。

Bin index优化算法的实现要点是,不同的物理页在使用cache时,尽量均匀分配到不同的bin box中。如下图所示,一个bin中通常含有若干组,每个组由若干个数据单元构成,当所有组中的所有数据单元都被占用时,新分配的物理页依然需要使用这个Bin box,便引发了cache冲突。也就是说,一个进程使用的虚地址空间虽然连续,但进行虚实转换之后,如果分配器没有进行优化,"随机"地选取物理页以之对应,如果随机函数选得不好,或者具有一定的规律性,那么就很容易出现本不应该有的冲突。

BSD和Solaris上叫常用的Bin-Index优化算法有 Page Coloring、Bin Hopping 、Best Bin和Hierarchical等,这几种算法均有他自己的优缺点,Linux没有使用并不代表它的性能低下。因为"从某种意义上说,不使用bin-index,也是一种bin-index算法"(参考1)


bin box

Virtual cache

程序每次访问内存都需要进行虚实地址转换,即使是容量小,结构简单的cache也必须完成这个步骤。和miss相比,cache命中的频度高得多,如果cache直接使用虚拟地址寻址,这样就可以省去地址转换的步骤,从而提高效率,这样的cache称为虚拟cache

几种Bin-Index算法中,Page Coloring算法是最简单的一种,它主要利用了virtual cache不需要染色的原理,因为在多数情况下连续的virtual page和很少在cache中冲突,因此在分配物理页时,其低位可以直接使用虚拟地址的低位,从而避免了cache冲突。

使用虚拟cache的问题在于,进程切换时,新进程的虚拟地址很可能和原进程相同,但他们使用的是不同的物理地址,因此每次都需要需要清空Cache,这对于再切换回来进程的影响是相对严重的,为了解决这个问题,分配算法往往选择使用添加进程PID一起Hash 或者XOR-Mapping。

Virtual Cache更多的是为了降低Hit time时使用,L1用得比较多,而L2或L3相对则用得很少。

Cache通道

现代处理器中,为了提高Cached数据带宽,通常设置了多个选路(Way-select)部件以组成多通道cache结构,参考Opteron的数据Cache 【上图】。CPU访问cache时,首先使用set Number访问组,在两路组相联的结构中,将有两个组被选中,之后这些数据同时进入选路部件,从两个中选取一个。

多通道的cache中,AGU(Address generation unit)也必须具备产生多套地址的能力,分别抵达不同的Tag阵列。每多使用一个通道,就得额外复制一个tag阵列,同时也带来了额外的同步开销,通道越多,越容易产生bank冲突,这使得多通道的实现代价很大,大部分CPU只在L1使用的多通道,其他层依然是单通道结构。

参考1:《Cache Memory》 Wang Qi, Yang xi等 [Mar. 2010]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容