自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 漫谈IT基础设施

正在书写的书籍,计算网络存储中的算法与管理策略

2017-02-10 22:15:20 7990

原创 后科技时代--操作系统的思考

这是最好的年代,这是最坏的年代;这是智慧的岁月,这是愚钝的岁月;这是信仰的时刻,这是怀疑的时刻;这是光明的瞬间,这是黑暗的瞬间;这是希望的春季,这是失望的冬季;我们无所不有,我们一无所有;我们步入天堂,我们直下地狱… 自有文字记载开始,历史向前推进了五千余年。在这段并不算漫长的时间里,生活在今天的人类是幸运的。我们的祖先没有像今天这样容易地获取食物,在遥远的彼岸,美国用3%的农业人口养活

2017-02-12 19:48:46 835

原创 后科技时代--处理器的思考

在距离今天不到六十年的时间里,出现了几个与当今电子信息领域有着重大影响的公司和个人。最重要的公司当然是Fairchild半导体,另一些是Fairchild半导体派生出的公司。最有影响力的人选有诸多争议,有人说是Robert Noyce,也有人说是Jack Kilby,我以为只能是William Shockley。我每阅读着与Shockley有关的史料事迹,总有莫名的酸楚。他是硅谷的事实缔造者,也是

2017-02-12 19:48:44 742

原创 后科技时代的思考

我并不情愿去承认后高科技时代的到来,却无法阻挡住昔日的高科技成果,高端技术工艺,已是旧时王谢堂前燕,飞入寻常百姓家。我们不能继续回避一个事实,传统的高科技仅是依靠自身剧烈繁殖所创造的一个又一个的辉煌正在逐步成为过去;我们很难改变这样一个事实,我们所处的高科技行业不再依赖自身,而是其他领域的创新而继续发展。我们也许仍在迷恋着昔日的高科技时代,和数不尽的风流人物,那时有Intel的Robert

2017-02-12 19:48:41 2275

原创 浅谈Cache Memory--目录

序第1章有关Cache的思考1.1 Cache不可不察也1.2 伟大的变革1.3 让指令飞1.4 Crime and Punishment第2章Cache的基础知识2.1 Cache的工作原理2.2 Cache的组成结构2.3 Why Index-Aware2.4 Cache Block的替换算法12.4 Cache Block的替换算法22.5 指令Cache2.6

2017-02-12 19:48:38 2170

原创 参考资料

[1]      Opher Kahn and Bob Valentine[June 2010]. Intel Next Generation Microarchitecture Codename SandyBridge: New Processor Innovations. Intel IDF2010 San Francisco,CA. http://www.intel.com/idf/

2017-02-12 19:48:36 821

原创 结束语

搁笔不意味着结束。许久之前,我与怀临先生聊过准备书写有关Cache的文字,这不是书写的目的,这篇文章与重然诺如邱山没有太多联系。心中想着《菜根谭》中的“宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒”,不知不觉完成了这些文字。只是我依然尚不明了为何去写这些文字,不清楚如此惜寸阴,却花费了如此精力;不明了为何一直去在忽视,忍受着各种忽视去完成这篇文章。我奢求完成时可以发现少许原因。待到

2017-02-12 19:48:33 496

原创 5.4 Stream Buffer

Stream Buffer是一种广义Cache,主要功能是避免因为预读而造成的Cache Pollution问题。当采用该机制时,处理器可以将预读的数据序列放入Stream Buffer中而不是放入Cache,如果处理器使用的数据没有在Cache中命中,将首先在Stream Buffer中查找,采用这种方法可以消除预读对Cache的污染,但是也因此增加了系统设计的复杂性。Stream Buffer

2017-02-12 19:48:30 580

原创 5.3 硬件预读

采用硬件预读的优点是不需要软件进行干预,不会扩大代码的尺寸,不需要浪费一条预读指令来进行预读,而且可以利用任务实际运行时的信息(Run Time Information)进行预测,这些是硬件预读的优点。硬件预读的缺点是预读结果有时并不准确,有时预读的数据并不是程序执行所需要的,比较容易出现Cache Pollution的问题。更重要的是,采用硬件预读机制需要使用较多的系统资源。在很多情况下,

2017-02-12 19:48:28 645

原创 5.2 软件预读

软件预读机制由来已久,首先实现预读指令的处理器是Motorola的88110处理器,这颗处理器首先实现了Touch Load指令,这条指令是PowerPC处理器dcbt指令[4]的前身。后来绝大多数处理器都采用这类指令进行软件预读,Intel在i486处理器中使用Dummy Read指令,这条指令也是后来x86处理器中PREFETCHh[5]指令的雏形。使用软件预读指令可以在处理器真正需要数

2017-02-12 19:48:25 529

原创 5.1 数据预读

Prefetch指在处理器进行运算时,提前通知存储器子系统将运算所需要的数据准备好,当处理器需要这些数据时,可以直接从这些预读缓冲中,通常指Cache,获得这些数据,不必再次读取存储器,从而实现了存储器访问与运算并行,隐藏了存储器的访问延时。Prefetch的实现可以采用两种方式,HB(Hardware-Based)和SD(Software-Directed)。这两种方法各有利弊,我们首先以图5‑

2017-02-12 19:48:22 1144

原创 第5章 Data Prefetch

处理器与存储器子系统运行速度的失配,使得存储器层次结构多次引起关注,处理器系统使用了更大规模的Cache。在很多处理器系统中,LLC的大小已达十几兆字节。随着工艺的提高,使用更大规模的Cache容量,并非遥不可及。只是Cache容量依然远不能与主存储器容量增加的速度相比。在某些应用中,即便将现有的Cache容量提高一倍也于事无补。存储器访问在最后一级Cache中Miss后,指令流水可能会被迫

2017-02-12 19:48:20 929

原创 4.7 Case Study on Sandy Bridge C…

这一节是我准备最后书写的内容,在此之前最后一章的书写早已完成。待到结束,总在回想动笔时的艰辛。这些艰辛使我选择一个Case Study作为结尾,因为这样做最为容易。这些Case实际存在的,不以你的喜好而改变。缺点与优点都在你面前,你无需改变,只需要简单的去按照事实去陈述。Sandy Bridge是Nehalem微架构之后的Tock,并在Nehalem的基础上作出的较大的改动。本节重点关注Cac

2017-02-12 19:48:17 584

原创 4.6 Cache Write Policy

如果有可能,我愿意放弃使用Write操作,Write操作不是在进行单纯地进行写,而是将Read建立的千辛万苦异常小心地毁于一旦,是Cache Hierarchy设计苦难的发源地。没有写操作在Cache Block中就不会有这么多状态,更没有复杂的Memory Consistency模型。很多人都不喜欢写操作,这并不能阻挡它的真实存在。绝大多数人痛恨写操作,也不愿意去研究如何提高写操作的效率,

2017-02-12 19:48:15 1105

原创 4.5 Beyond MOESIF

事实上在图4‑10中,O不能直接迁移到I;在图4‑11中O不能直接迁移到I;在图4‑12中,ILO不能直接迁移到ILX;在图4‑13中,O也不能直接迁移到I。在整个Cache Hierarchy的设计中,合理有效解决因为Memory Consistency引发的Race Condition贯彻始终,也引入了过多的所谓“Safe State”,这些Safe State被称为Transient Sta

2017-02-12 19:48:12 298

原创 4.5 Beyond MOESIF 1

再次回顾与CacheCoherency相关的MOESIF状态位,却不知从何说起。MOESIF这些状态位似曾相识,已物是人非。在CMP处理器系统中使用的多级Cache层次结构和CMP间的Cache Coherency,改变了MOEIF这些状态位的原始形态。在一个由多个CMP组成的ccNUMA处理器系统中,Cache Coherency包含两方面内容,首先是Intra-CMP Coherence

2017-02-12 19:48:09 456

原创 4.4 To be nclusive or not to be…

在Athlon微架构中,L1 Cache的大小为128KB,分别为64KB Data和64KB Instruction Cache,运行频率与CPU Core Clock相同,在Hit时的Load-Use Latency为3个Clock Cycle。L2 Cache大小为512KB,运行频率为CPU Core Clock的一半[86][1]。L1与L2 Cache之间的比值为4,这使得Exclus

2017-02-12 19:48:07 496

原创 4.4 To be inclusive or not to be…

无数经典的体系结构书籍专注于介绍Inclusive。这使得我所接触的毕业生和工程师很少有Exclusive和NI/NE Cache的概念,包括几年前的自己。一些甚至是来自处理器厂商的工程师也对此知之甚少。也许我们早已熟悉了Inclusice这种Cache Hierarchy结构,认为CPU Core访问L1 Cache中Miss后查找L2 Cache,L2 Cache Miss后继续查找其下的层次

2017-02-12 19:48:04 364

原创 4.3 Cache Controller的基本组成

在一个处理器系统中,存储器子系统是一个被动部件,由来自处理器的存储器读写指令和外部设备发起的DMA操作触发。虽然在存储器子系统中并无易事,DMA操作依然相对较易处理。在多数设计中,一个设备的DMA操作最先看到的是LLC,之后在于其他Cache进行一致性操作。通常处理器系统的LLC控制器将首先处理这些DMA操作。随着通用处理器集成了更多的智能外部设备,这些智能设备已经直接参与到处理器系统的Ca

2017-02-12 19:48:02 2231

原创 4.2 存储器读写指令的发射与执行2

在x86处理器系统中,存储器指令大体可以分为F(reg, reg)[1],F(reg, mem)和F(mem, reg) 三大类。在这些指令中,第1个Operand为目标操作数也可以为源操作数,第2个Operand只能为源操作数。与LSU部件直接相关的指令为F(reg, mem)和F(mem, reg)。后一类指令的处理相对较为复杂,该类指令需要首先进行存储器读,进行某种运算后,再次进行存储器写

2017-02-12 19:47:59 1558

原创 4.2 存储器读写指令的发射与执行1

在CPUCore中,一条存储器指令首先经过取值,译码,Dispatch等一系列操作后,率先到达LSU(Load/Store Unit)部件。LSU部件可以理解为存储器子系统的最高层,在该部件中包含Load Queue与Store Queue。其中Load Queue与Store Queue之间有着强烈的耦合关系,因此许多处理器系统将其合称为LSQ。在多数处理器的存储器子系统中,LSU是最顶层,也

2017-02-12 19:47:56 1696

原创 4.1 Cache层次结构的引入

我经常尝试一些方法,试图去解决在存储器子系统存在的瓶颈问题,总会陷入长考。在我们所处的这个领域,这个时代,在不断涌现出一些新的变化。这些变化会我们之前历千辛万苦学得一些知识和理念荡然无存。这些变化不会依赖你的喜好而改变。1975年,Moor将其定律修正为“晶体管的数目每18月增加一倍,性能也将提高一倍”。这个定律在维持了相当长一段时间的正确性之后逐步失效。首先体现在性能提高一倍上,使用过多核编

2017-02-12 19:47:53 365

原创 第4章 Cache的层次结构

我第一次接触存储器瓶颈这个话题是在上世纪九十年代,距今已接近二十年。至今这个问题非但没有缓和的趋势,却愈演愈烈,进一步发展为Memory Wall。在这些问题没有得到解决之前,片面的发展多核,尤其是片面提高在一个CMP中的CPU Core数目几乎没有太大意义,除非你所针对的应用是风花雪月的科学计算。在越来越多的应用领域中,在一个CMP中提供的多个处理器内核很难全部发挥作用,造成了不容忽视的资源浪费

2017-02-12 19:47:50 1111

原创 3.1 Cache Coherency

CacheCoherency产生的原因是在一个处理器系统中,不同的Cache和Memory可能具有同一个数据的多个副本,在仅有一个数据副本的处理器系统中不存在Coherency问题。维护Cache Coherency的关键在于跟踪每一个Cache Block的状态,并根据CPU Core的读写操作及总线上的相应Transaction,更新Cache Block的状态,借此维护Cache Cohe

2017-02-12 19:47:48 883

原创 第3章 Coherency and Consistency

本章出现的Coherency指Cache Coherency,Consistency指Memory Consistency。许多工程师经常混淆这两个概念,没有建立足够准确的Memory Consistency概念。Consistency与Coherency之间有一定的联系,所关注的对象并不等同。MemoryConsistency的实现需要考虑处理器系统Cache Coherency使用的协议

2017-02-12 19:47:45 990

原创 2.6 Cache Never Block

在一个微架构中,有两条值得重点关注的流水线,一个是指令流水线。另一个是Cache Controller使用的流水线,下文将其简称为Cache流水线。这两条流水线的实现对于微架构的性能至关重要。指令流水线的设计与Cache流水线相关,反之亦然。1967年6月,来自IBM的ROBERT MACRO TOMASULO先生发明了最后以自己名字命令的算法[48],这个算法最终使得Alpha处理器,MIP

2017-02-12 19:47:43 635

原创 2.5 指令Cache

在一个处理器系统中,指令Cache与数据Cache的组成方式和使用规则有所不同。在现代处理器系统中,在L1 Cache层面,指令Cache与数据Cache通常分离,而在其后的Cache层次中,指令与数据混合存放,在多数情况下L1指令Cache是只读的,因此Cache Block中包含的状态较少一些,一致性处理相对较为简单。与指令Cache相比,数据Cache的设计与实现复杂得多。在此回顾指令

2017-02-12 19:47:40 4412 1

原创 2.4 Cache Block的替换算法2

对页面5的访问并没有在Cache中命中,此时需要一个Free页面进行页面替换。LIRS算法首先淘汰在Q中页面7,同时将这页面在S中的状态更改为不在Cache命中;之后页面8从S落到Q中,状态从LIR迁移到HIR,但是这个页面仍在Cache中,需要重新压栈;页面5没有在Cache中命中,但是在S中命中,需要将其移出后重新压栈,状态改变为在Cache中命中。本篇不再介绍LIRS算法的实现细节,对此有兴

2017-02-12 19:47:38 1273

原创 2.4 Cache Block的替换算法1

在处理器系统处于正常的运行状态时,各级Cache处于饱和状态。由于Cache的容量远小于主存储器,Cache Miss时有发生。一次Cache Miss不仅意味着处理器需要从主存储器中获取数据,而且需要将Cache的某一个Block替换出去。不同的微架构使用了不同的CacheBlock替换算法,本篇仅关注采用Set-Associative方式的Cache Block替换算法。在讲述这些替换

2017-02-12 19:47:35 616

原创 2.3 Why Index-Aware

在N-WaysSet-Associative方式的Cache中,CPU如何选用函数f映射Cache中的Set是一个值得讨论的话题。其中最常用的算法是Bit Selection。如图2‑3所示,CPU使用Bits 12~6选择一个合适的Set。此时f(r(i)) = Bits 12~6。这是一种最快,最简洁的实现方式,使用这种方法带来的最大质疑莫过于Set的选择不够随机。历史上曾经有人试图使

2017-02-12 19:47:33 279

原创 2.2 Cache的组成结构

由上文所述,在一个Cache中包含多行多列,存在若干类组成方式。在处理器体系结构的历史上,曾出现过更多的的组成结构,最后剩余下来的是我们耳熟能详的Set-Associative组成结构。这种结构在现代处理器微架构中得到了大规模普及。在介绍Set-Associative组成结构之前,我们简单回顾另外一种Cache组成结构,Sector Buffer方式[23]。假定在一个微架构中,Cache大

2017-02-12 19:47:30 905

原创 2.1 Cache的工作原理

处理器微架构访问Cache的方法与访问主存储器有类似之处。主存储器使用地址编码方式,微架构可以地址寻址方式访问这些存储器。Cache也使用了类似的地址编码方式,微架构也是使用这些地址操纵着各级Cache,可以将数据写入Cache,也可以从Cache中读出内容。只是这一切微架构针对Cache的操作并不是简单的地址访问操作。为简化起见,我们忽略各类Virtual Cache,讨论最基础的Cache访问

2017-02-12 19:47:28 388

原创 第2章 Cache的基础知识

很多程序员认为Cache是透明的,处理器可以很聪明地安排他们书写的程序。他们非常幸运,可以安逸着忽略Cache,也安逸着被Cache忽略,日复一日,年复一年,机械地生产着各类代码。All of them are deceived。貌似并不存在的Cache,有意无意地制造了,正在制造,并必会制造着各类陷阱。也许在历经了各类苦难后,有些人能够发现Cache的少些特性,却愈发不可控制。掌握Cach

2017-02-12 19:47:25 249

原创 1.4 Crime and Punishment

很多时候,一个架构师选择Load/StoreSpeculation的终极方法是掷硬币,只是在用一只很有技巧的手去投掷这个硬币。这些猜测是无限追求完美的人群,在屈服于最终的命运安排之后使用的赌徒方式。有人质疑这种掷硬币和闭着眼睛猜有什么区别。闭着眼睛猜确实是一种办法,只是当你睁开双眼发现迷失后,知道归时之路。Load/StoreSpeculation的结果可能正确,也可能错误。如果最终结果是

2017-02-12 19:47:22 317

原创 1.3 让指令飞

Superscalar与OOO(Out-of-order)的引入极大促进了现代处理器微架构的发展。已知的高性能处理器,如Nehalem,Sandy Bridge,Opteron,Power甚至是ARM Cortex系列处理器都使用了这种构架。这类方法在有效提高了ILP(instruction level parallelism)的同时,加大了整个Cache Memory层次结构的实现难度。在

2017-02-12 19:47:20 441

原创 1.2 伟大的变革

虚拟地址的出现可以追朔到上世纪六十年代的Atlas计算系统[2]。在当时Atlas计算系统是一个庞然大物,但也只有96K字节的内部存储器和576K字节的磁鼓作为外部存储器。我们很难深刻体会在计算机发展的初级阶段,计算机使用者的无奈。当时的使用者可能身兼数职,首先是一个有钱人,不然根本没有机会去购买和使用计算机;然后是一个精巧的工匠,不过打孔技术恐怕已经失传;还必须是一个科学家,需要使用计算机

2017-02-12 19:47:17 249

原创 1.1 Cache不可不察也

在现代处理器中,CacheHierarchy一般由多级组成,处于CPU和主存储器之间,形成了一个层次结构,这个层次结构日趋复杂。Intel甚至放弃使用阿拉伯字母对Cache的各级层次编号,而直接使用LLC(Last-Level Cache),MLC(Medium-Level Cache)这样的术语。变化的称呼表明了一个事实,Cache层次结构在整个处理器系统中愈发重要,也越发复杂。Sandy

2017-02-12 19:47:14 407

原创 第1章 有关Cache的思考

在现代处理器系统中,CacheMemory处于Memory Hierarchy的最顶端,其下是主存储器和外部存储器。在一个现代处理器系统中,Cache通常由多个层次组成,L1,L2和L3 Cache。CPU进行数据访问将通过各级Cache后到达主存储器。如果CPU所访问的数据在Cache中命中,将不会访问主存储器,以缩短访问延时。工艺的提高,使得主存储器的访问延时在持续缩短,访问带宽也在进

2017-02-12 19:47:12 494

原创

近些年,我在阅读一些和处理器相关的论文与书籍,有很多些体会,留下了若干文字。其中还是有一片领域,我一直不愿意书写,这片领域是处理器系统中的Cache Memory。我最后决定能够写下一段文字,不仅是为了这片领域,是我们这些人在受历史车轮的牵引,走向一个未知领域,所产生的一些质朴的想法。待到动笔,总被德薄而位尊,知小而谋大,力少而任重,鲜不及矣打断。多次反复后,我几乎丢失了书写的兴趣。几个朋

2017-02-12 19:47:09 277

原创 浅谈Cache Memory--目录

序第1章有关Cache的思考1.1 Cache不可不察也1.2 伟大的变革1.3 让指令飞1.4 Crime and Punishment第2章Cache的基础知识2.1 Cache的工作原理2.2 Cache的组成结构2.3 Why Index-Aware2.4 Cache Block的替换算法12.4 Cache Block的替换算法22.5 指令Cache2.6

2017-02-12 19:47:07 1245 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除