编程者所需要知道的内存知识【一】(翻译)

摘要:

随着CPU内核的速度越来越快,数量越来越多,大多数程序的限制因素现在是内存访问,而且在一段时间内还会是内存访问。

硬件设计师已经提出了越来越复杂的内存处理和加速技术——比如CPU缓存——但如果没有程序员的帮助,这些技术无法实现最佳工作。

不幸的是,大多数程序员都不清楚使用计算机内存子系统或CPU上缓存的结构和成本。本文解释了在现代商用硬件上使用的内存子系统的结构,说明了为什么要开发CPU缓存,它们是如何工作的,以及程序应该如何利用它们来实现最佳性能。

Introduction:

在早期,计算机要简单得多。系统的各个组件,如CPU、内存、大容量存储和网络接口,都是一起开发的,因此它们的性能相当平衡。例如,在提供数据方面,内存和网络接口并不比CPU快(很多)。

一旦计算机的基本结构稳定下来,硬件开发人员集中精力优化单个子系统,这种情况就改变了。突然间,计算机某些组件的性能明显落后,出现了瓶颈。对于大容量存储和内存子系统来说尤其如此,由于成本原因,它们相对于其他组件的改进速度较慢。

大容量存储的缓慢主要是通过软件技术来解决的:操作系统将最常用(也最有可能被使用)的数据保存在主内存中,其访问速度比硬盘快几个数量级。缓存存储被添加到存储设备本身,这不需要更改操作系统来提高性能。1在本文中,我们将不详细介绍大容量存储访问的软件优化。

与存储子系统不同,将主内存作为瓶颈移除要困难得多,几乎所有解决方案都需要对硬件进行更改。

如今这些变化主要以以下形式出现:

• RAM硬件设计(速度和并行性)。
• 内存控制器设计。
• CPU caches
• 设备的直接内存访问(DMA)。 

本文档主要讨论CPU缓存和内存控制器设计的一些影响。在探索这些主题的过程中,我们将探索DMA并将其纳入更大的范围。然而,我们将从今天的商品硬件的设计概述开始。这是理解有效使用内存子系统的问题和局限性的先决条件。我们还将详细了解不同类型的RAM,并说明为什么这些差异仍然存在。

本文件并非包罗万象的最终文件。它仅限于商品硬件,并进一步限于该硬件的一个子集。此外,对于本文的目标,许多主题将进行足够详细的讨论。对于此类主题,建议读者查找更详细的文档。

当谈到操作系统特定的细节和解决方案时,本文专门介绍Linux。它在任何时候都不会包含任何关于其他操作系统的信息。作者没有兴趣讨论对其他操作系统的影响。如果读者认为他/她必须使用不同的操作系统,他们必须去找他们的供应商,要求他们编写与此类似的文档。

开始前最后一句话。文本中多次出现术语“通常”和其他类似的限定词。这里讨论的技术是存在的 在现实世界中的许多变体中,本文只讨论最常见的主流版本。很少有人能对这项技术做出绝对的陈述,因此限定词也是如此。

文档结构

本文档主要面向软件开发人员。对于面向硬件的读者来说,它没有提供足够的硬件技术细节。但在我们为开发者提供实用信息之前,必须做大量的基础工作。

为此,第二部分详细介绍了随机存取存储器(RAM)。这一节的内容很好理解,但对于理解后面的章节来说并非绝对关键。在需要内容的地方添加对该部分的适当反向引用,以便焦虑的读者可以首先跳过本部分的大部分内容。

第三部分详细介绍了CPU缓存行为。图表被用来防止文本像原本那样干燥。此内容对于理解文档的其余部分至关重要。第4节简要描述了虚拟内存是如何实现的。这也是其余工作所需的基础。第5节详细介绍了非统一内存访问(NUMA)系统。

第六部分是本文的中心部分。它汇集了前面所有章节的信息,并为程序员提供了如何编写在各种情况下性能良好的代码的建议。非常不耐烦的读者可以从本节开始,如果有必要,可以回到前面的章节,以更新对底层技术的知识。

第7节介绍了可以帮助程序员做得更好的工具。即使对这项技术有了全面的了解,在一个非平凡的软件项目中,问题所在的地方也远不明显。有些工具是必要的。

在第8节中,我们最后给出了在不久的将来可以预期的技术前景,或者可能只是很好的技术。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值