《深入浅出DPDK》—第2章2.4节Cache的写策略

2.4 Cache的写策略
内存的数据被加载到Cache后,在某个时刻其要被写回内存,对于这个时刻的选取,有如下几个不同的策略。
直写(write-through):所谓直写,就是指在处理器对Cache写入的同时,将数据写入到内存中。这种策略保证了在任何时刻,内存的数据和Cache中的数据都是同步的,这种方式简单、可靠。但由于处理器每次对Cache更新时都要对内存进行写操作,因此总线工作繁忙,内存的带宽被大大占用,因此运行速度会受到影响。假设一段程序在频繁地修改一个局部变量,尽管这个局部变量的生命周期很短,而且其他进程/线程也用不到它,CPU依然会频繁地在Cache和内存之间交换数据,造成不必要的带宽损失。
回写(write-back):回写相对于直写而言是一种高效的方法。直写不仅浪费时间,而且有时是不必要的,比如上文提到的局部变量的例子。回写系统通过将Cache line的标志位字段添加一个Dirty标志位,当处理器在改写了某个Cache line后,并不是马上把其写回内存,而是将该Cache line的Dirty标志设置为1。当处理器再次修改该Cache line并且写回到Cache中,查表发现该Dirty位已经为1,则先将Cache line内容写回到内存中相应的位置,再将新数据写到Cache中。其实,回写策略在多核系统中会引起Cache一致性的问题。设想有两个处理器核心都需要对某个内存块进行读写,其中一个核心已经修改了该数据块,并且写回到Cache中,设置了Dirty位;这时另外一个核心也完成了该内存块的修改,并且准备写入到Cache中,这时才发现该Cache line是“脏”的,在这种情况下,Cache如何处理呢?之后的章节我们会继续这个话题。
除了上述这两种写策略,还有WC(write-combining)和UC(uncacheable)。这两种策略都是针对特殊的地址空间来使用的。
write-combining策略是针对于具体设备内存(如显卡的RAM)的一种优化处理策略。对于这些设备来说,数据从Cache到内存转移的开销比直接访问相应的内存的开销还要高得多,所以应该尽量避免过多的数据转移。试想,如果一个Cache line里的字被改写了,处理器将其写回内存,紧接着又一个字被改写了,处理器又将该Cache line写回内存,这样就显得低效,符合这种情况的一个例子就是显示屏上水平相连的像素点数据。write-combining策略的引入就是为了解决这种问题,顾名思义,这种策略就是当一个Cache line里的数据一个字一个字地都被改写完了之后,才将该Cache line写回到内存中。
uncacheable内存是一部分特殊的内存,比如PCI设备的I/O空间通过MMIO方式被映射成内存来访问。这种内存是不能缓存在Cache中的,因为设备驱动在修改这种内存时,总是期望这种改变能够尽快通过总线写回到设备内部,从而驱动设备做出相应的动作。如果放在Cache中,硬件就无法收到指令。

时间: 2024-10-26 09:32:46

《深入浅出DPDK》—第2章2.4节Cache的写策略的相关文章

《深入浅出DPDK》—第2章2.6节Cache一致性

2.6 Cache一致性 我们知道,Cache是按照Cache Line作为基本单位来组织内容的,其大小是32(较早的ARM.1990年-2000年早期的x86和PowerPC).64(较新的ARM和x86)或128(较新的Power ISA机器)字节.当我们定义了一个数据结构或者分配了一段数据缓冲区之后,在内存中就有一个地址和其相对应,然后程序就可以对它进行读写.对于读,首先是从内存加载到Cache,最后送到处理器内部的寄存器:对于写,则是从寄存器送到Cache,最后通过内部总线写回到内存.这

《深入浅出DPDK》—第2章2.5节Cache预取

2.5 Cache预取以上章节讲到了多种和Cache相关的技术,但是事实上,Cache对于绝大多数程序员来说都是透明不可见的.程序员在编写程序时不需要关心是否有Cache的存在,有几级Cache,每级Cache的大小是多少:不需要关心Cache采取何种策略将指令和数据从内存中加载到Cache中:也不需要关心Cache何时将处理完毕的数据写回到内存中.这一切,都是硬件自动完成的.但是,硬件也不是完全智能的,能够完美无缺地处理各种各样的情况,保证程序能够以最优的效率执行.因此,一些体系架构引入了能够

《深入浅出DPDK》—第2章2.3节Cache地址映射和变换

2.3 Cache地址映射和变换 Cache的容量一般都很小,即使是最大的三级Cache(L3)也只有20MB-30MB.而当今内存的容量都是以GB作为单位,在一些服务器平台上,则都是以TB(1TB=1024GB)作为单位.在这种情况下,如何把内存中的内容存放到Cache中去呢?这就需要一个映射算法和一个分块机制. 分块机制就是说,Cache和内存以块为单位进行数据交换,块的大小通常以在内存的一个存储周期中能够访问到的数据长度为限.当今主流块的大小都是64字节,因此一个Cache line就是指

《深入浅出DPDK》—第2章2.2节Cache系统简介

2.2 Cache系统简介随着计算机行业的飞速发展,CPU的速度和内存的大小都发生了翻天覆地的变化.英特尔公司在1982年推出80286芯片的时候,处理器内部含有13.4万个晶体管,时钟频率只有6MHz,内部和外部数据总线只有16位,地址总线24位,可寻址内存大小16MB.而英特尔公司在2014年推出的Haswell处理器的时候,处理器内部仅处理器本身就包含了17亿个晶体管,还不包括Cache和GPU这种复杂部件.时钟频率达到3.8GHz,数据总线和地址总线也都扩展到了64位,可以寻址的内存大小

《深入浅出DPDK》目录—导读

引 言 动机 2015年4月,第一届DPDK中国峰会在北京成功召开.来自中国移动.中国电信.阿里巴巴.IBM.Intel.华为以及中兴的专家朋友登台演讲,一起分享了以DPDK为中心的技术主题.表1列出了2015 DPDK中国峰会的主题及演讲者. 这次会议吸引了来自各行业.科研单位与高校的200多名开发人员.专家和企业代表参会.会上问答交流非常热烈,会后我们就想,也许是时间写一本介绍DPDK.探讨NFV数据面的技术书籍.现在,很多公司在招聘网络和系统软件人才时,甚至会将DPDK作为一项技能罗列在招

《Google软件测试之道》—第2章2.2节测试认证

本节书摘来自异步社区<Google软件测试之道>一书中的第2章2.2节测试认证,作者[美]James Whittaker , Jason Arbon , Jeff Carollo,更多章节 2.2 测试认证 Patrick Copeland在本书的序中强调了让开发人员参与测试的难度.招聘到技术能力强的测试人员只是刚刚开始的第一步,我们依然需要开发人员参与进来一起做测试.其中我们使用的一个 关键方法就是被称为"测试认证"(译注:Test Certified)的计划.现在回过头

《为自己工作——世界顶级设计师成功法则》—第2章2.2节设计学院没有教你的事

2.2 设计学院没有教你的事 终身学习会让你对自己和自己的专业有更多的认识,但不幸的是,设计学院常常会忽视这些部分. 我召集了一些设计专业的研究生,让他们写下他们希望能在学校里学到的内容.下面这些是我认为在他们的反馈中最重要的,同时也是出现频率最高的内容. 2.2.1 有效沟通 "设计学院会教你如何与其他设计师沟通,但其实还需要有另外一套完整的课程来教授如何与非设计师沟通." --Stephen Lee Ogden 大多数客户都不理解你已经非常熟悉的那些专业设计内容,所以要避免使用行话

《深入浅出DPDK》—第3章3.1节并行计算

第3章 并 行 计 算 处理器性能提升主要有两个途径,一个是提高IPC(每个时钟周期内可以执行的指令条数),另一个是提高处理器主频率.每一代微架构的调整可以伴随着对IPC的提高,从而提高处理器性能,只是幅度有限.而提高处理器主频率对于性能的提升作用是明显而直接的.但一味地提高频率很快会触及频率墙,因为处理器的功耗正比于主频的三次方. 所以,最终要取得性能提升的进一步突破,还是要回到提高IPC这个因素.经过处理器厂商的不懈努力,我们发现可以通过提高指令执行的并行度来提高IPC.而提高并行度主要有两

《深入浅出DPDK》—第1章1.2节初识DPDK

1.2 初识DPDK 本书介绍DPDK,主要以IA(Intel Architecture)多核处理器为目标平台.在IA上,网络数据包处理远早于DPDK而存在.从商业版的Windows到开源的Linux操作系统,所有跨主机通信几乎都会涉及网络协议栈以及底层网卡驱动对于数据包的处理.然而,低速网络与高速网络处理对系统的要求完全不一样. 1.2.1 IA不适合进行数据包处理吗 以Linux为例,传统网络设备驱动包处理的动作可以概括如下: 数据包到达网卡设备. 网卡设备依据配置进行DMA操作. 网卡发送