INTRODUCTION TO THE FIRST EDITION

据说迪斯雷利曾观察到:"谎言有三种:谎言、该死的谎言和统计数据!"阅读本文的读者将有幸亲身了解最后一种类别,因为缓存设计是一门不精确的艺术,它基于不完全测量的统计前提,在某些软件性能基准中表现良好,但在其他情况下则失败。在整个文本中,我们将试图重新强调缓存性能与代码结构的依赖关系。
本书面向从事系统设计工程师,而非大学生。每章末尾没有问题。本书的目的是供自学和作为参考资料使用。如果你想学习特定方面的主题,可以在目录或词汇表中查找讨论该主题的页码。本书更像是一个实用的指南,而不是学术著作,因为它更多地采用定性而非定量的方法,这种方法可以通过缓存性能高度依赖正在设计的特定系统中使用的代码和硬件来证明。我通常会假设读者面临的挑战是设计一个缓存以优化使用现有CPU的系统性能,可能还有现有的总线和现有的代码。如果软件、总线和尤其是CPU能够被设计成与缓存和存储子系统的性能最佳匹配,那么可以使用几种独特的节省费用和时间的方法,但大多数系统并不适用于这个类别。
本书采用了一种直观而非分析的方法,因为除了本文之外,还有很多论文和论文支持几乎任何缓存架构的论点。这里的风格是非正式的、技术详细的,希望是可读的!我最不想让你们做的事情就是在词典中查找某个词汇。在这本书中,你不会找到"基础设施"或"范式"这样的词,章节名称也不以"On"开头(即"论基于计算得出的物质界面等高线波前边界效应")。
其实,缓存并不难理解。曾经在学校里被要求应用史密斯图表的工程师知道设计可以多么艰深。 (从我上大学的那些日子开始,我就对凡是姓史密斯的都心生怀疑。)另一方面,缓存设计非常直接,无论用多少行话来掩盖它。
基本原则是尽可能地作弊。我曾经教过一些把缓存当作一种需要学习的新语言的课程。背后的理论是,缓存设计师倾向于使用他们领域独特的术语。为了与设计组之外的任何人讨论你的设计理念,你需要学习这种行话。本书的术语表中列出了与缓存设计相关的250多个专用行话。术语表与首次定义该单词的章节和部分进行交叉引用。我费尽心思确保我所知道的每个行话都得到了清楚的讨论。阅读完本书后,你应该能够清楚地理解"全关联写透主逻辑缓存"和"直接映射扇区监听复制式二级缓存,带有分配写入、并发线路回写和通过包含来进行主要失效"之间的区别。
由于缓存语言的独特性和技术的新颖性,一个严重的劣势就是术语处于不断变化的状态,你经常会看到在文本中使用的词汇被完全不同地使用,或者更糟的是,用不同的词来描述相同的功能。一些设计社区(例如IBM和DEC)往往使用不同的流行词汇,与大多数其他缓存设计师不同。作者曾经认真考虑将这本书命名为《流行词汇:缓存设计书》。缓存不是唯一发生这种情况的领域。作者的一些软件倾向的朋友曾经愉快地称自己为“黑客”,把系统破坏者称为“海盗”,直到媒体混淆了事实并广泛地将“黑客”一词与臭名昭著的软件犯罪行为联系起来。英语是动态的,处于技术前沿的人注定要遭受后果。
本书仅涉及CPU缓存,而不涉及磁盘缓存。两种设备的操作原理类似,但是磁盘缓存通常是使用软件控制在动态RAM(DRAM)中实现的,而CPU缓存则以如此高的速度运行,必须使用硬件控制,并且缓存本身必须在静态RAM(SRAM)中实现。支持CPU缓存的统计数据已经得到了充分的发展,并与代码编写方式有关。磁盘缓存的统计数据完全不同,取决于特定软件在系统上运行时所引起的操作系统调用,并且不能直接从本文中介绍的任何内容中推导出来。
同样,本文中介绍的大多数映射算法也被用于内存映射单元(MMU),谢天谢地,它们被纳入了大多数现代CPU中。如果没有它们,大部分系统设计人员将被迫以两种不同的方式面对相同的问题。一些读者可能会在读懂本文后再次查看其系统中MMU的规格。
//CPU缓存和磁盘缓存的区别:
/*
CPU缓存和磁盘缓存是两种不同的缓存类型,它们的作用和机制也有所不同。
CPU缓存是指位于CPU内部的高速缓存,用于存储处理器频繁使用的数据和指令。CPU缓存可以大幅提高计算机处理速度,因为它比主存储器更快且响应更快。CPU缓存通常分为三级,其中一级缓存最快,容量最小,而三级缓存相对较慢,但容量更大。CPU缓存的容量较小,通常只有几百KB到数MB之间。
磁盘缓存则是指位于硬盘驱动器内部的高速缓存,用于存储读写硬盘的数据。磁盘缓存可以很好地平衡磁盘读写性能与容量之间的关系。当CPU需要从硬盘读取或写入数据时,数据将被缓存在磁盘缓存中,以便下一次读取时可以更快地访问数据。磁盘缓存通常由硬件控制器或操作系统管理,并且其容量通常比CPU缓存大得多,可以达到几GB甚至更多。
总之,CPU缓存和磁盘缓存都是用于提高计算机性能的缓存技术,但它们的位置、作用和容量都不同。CPU缓存是位于CPU内部的高速缓存,用于存储处理器频繁使用的数据和指令,容量较小;而磁盘缓存是位于硬盘驱动器内部的高速缓存,用于存储读写硬盘的数据,容量较大。
*/
NOTE: SOME ASSEMBLY REQUIRED
缓存设计师需要了解系统中正在执行的代码,这对于良好的缓存设计至关重要。本书将使用代码来说明支持缓存操作的基本现象。这并不意味着使用的算法很深奥,但我假设读者不会被文本中使用的非常简单的汇编代码示例所困扰。在设计过程中,鼓励设计者与其硬件设计团队的其他成员以及依赖于缓存设计性能的软件设计师进行讨论。这些软件设计师还可以尝试编写会导致缓存性能下降的代码,这不仅是为了友好竞争的精神,还可以熟悉应避免使用的代码结构,以最大化系统性能。
同样,我假设读者对处理器接口、系统总线(至少了解一个CPU, 多个直接内存访问[DMA]设备和通用背板)有很高的了解。如果这是一个问题,可以从处理器制造商、系统制造商以及教育和技术出版商那里找到大量的出版物,其中大部分都能很好地解决这个问题。

这本书分为五个章节。第一章是对缓存理论的介绍,接下来第二章概述了缓存架构。第三章回顾了RISC CPU的缓存需求,而第四章则着重讨论了一致性问题,并展示了商业可用机器中使用的技巧。作者花了很多心思来简洁地定义了当今与缓存相关的所有术语。
书的最后一章描述了一些现实生活中的离散缓存设计示例,这些设计支持商业可用微处理器。这些设计提供了非常详细的信息,以便进行仔细研究,设计师们可以借鉴这些示例来设计自己的缓存系统。
根据康涅狄格州纽黑文的专利数据库公司MicroPatent的数据,在1991年9月至1992年9月的一年间,仅在美国就授予了96项涵盖缓存设计的专利。显然,缓存设计是一门快速发展的技术,尽管我已经尽力跟上最新动态,但这本书无法跟上所有新的进展。请忽略任何遗漏之处。我希望有机会在未来的版本中加以补充。如果有任何批评或意见,欢迎通过出版社与我联系,以帮助改进或澄清未来版本的内容。
关于本书遵循的惯例,有几点需要说明。首次出现的流行词以粗体显示,并在词汇表中引用该词的唯一用法。我尽力确保任何单词的首次出现都附有其定义。数字有三种格式:十进制、十六进制和二进制。十进制是默认格式,任何具有超过三位精度的十进制数使用美国习惯,用逗号分隔(例如1,000)。十六进制数用于地址,并且以每四位数字之间有空格的方式分组(例如9ABC DEFO)。在极少数情况下使用二进制表示法时,它的格式将与十六进制数字相同,并且文本将解释正在使用二进制表示法。为了清晰起见,不会使用其他表示法(例如八进制)。缩写形式如8K和1 Meg代表常见的用法,即8K = 2的13次方,1 Meg = 2的20次方。
最后值得一提的是讽刺之处:本书的所有文本和图形均由作者在Macintosh Plus和Macintosh SE计算机上创建,这两者都没有缓存内存,也无法充分利用缓存,因为它们基于16 MHz的68000微处理器。是的,有些操作,特别是创建一些更复杂的图形和重新排版文本,如果使用更好、更快的CPU和缓存的机器,速度会快得多,也不会那么令人沮丧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值