欢迎光临中国机器人网站,我们致力于各行业应用研究

每个程序员都应该知道的记忆知识,第1部分

作者:木子      发布时间:2021-04-22      浏览量:0
原文:每个程序员都应该知道的内存,第1部

原文:每个程序员都应该知道的内存,第1部分。

1.对

早期计算机的介绍相对简单。各种系统组件,如CPU、内存、海量存储和网络接口都是一起开发的,因此它们的性能更加平衡。例如,当向CPU提供数据时,内存并不比网络接口快(很多)。当计算机的基本结构固化,硬件开发人员开始关注子系统的优化时,这种情况发生了变化,一些计算机组件的性能明显落后,成为瓶颈。特别是,由于成本原因,大容量存储和内存子系统的改进速度比其他组件慢。与海量存储不同,

解决内存瓶颈的难度更大,几乎每种方案都需要对硬件进行更改。目前,这些变化主要表现在以下几个方面:

当本文提到操作系统的具体细节和解决方案时,据说Linux并不包含任何关于其他操作系统的信息,作者无意讨论其他操作系统的情况,如果读者不得不使用其他操作系统,他们必须要求供应商提供类似于本文的关于他们的操作系统的文档。

如果读者认为他/她必须使用另一个操作系统,他或她必须要求供应商提供类似于本文的文档。

1.1文档结构

第3章详细讨论了CPU缓存行为。我们会用一些图表来防止你觉得它太无聊。第三章是理解全文的重要内容。第四章简要介绍了如何实现虚拟内存,这也是理解全文其他部分的必要依据。

第5章详细讨论了非统一内存访问体系结构(NUMA)。

的第6章是本文的主要部分,它回顾了前几章中的信息,我们将向程序员提供如何在所有情况下都能很好地编写代码的建议,有害的读者可以直接阅读这一章,并在必要时建议学习上一章。

第7章描述了可以帮助程序员更好地完成任务的工具。即使你对技术有一个全面的理解,在一个实际的软件项目中,问题仍然不明显,一些工具是必要的。

在第8章中,我们将给出一个可以在不久的将来展望的技术展望。

1.2反馈

1。3谢谢你

我要感谢Johnray Fuller,特别是JonathanCorbet,承担了把作者的英语翻译成更加标准化的表格这一艰巨任务的一部分。MarkusArmbruster就文本中的问题和遗漏提供了许多有价值的建议。

1.4本文的标题是对大卫·戈德伯格的经典论文“每个计算机科学家应该知道的关于浮点运算的知识”(Goldberg)的赞扬。

2.商用硬件

的现状,随着专业硬件的逐步退出,对商用硬件的理解是非常重要的。今天的扩展通常是横向的,而不是垂直的,使用许多小型的相互连接的商业计算机,而不是几个非常大、速度异常快(但却很昂贵)的系统,成本效益更高。这是因为快速和廉价的网络硬件已经成为流行。大型专用系统仍有一席之地,这些系统仍然是商机,但整体市场与商业硬件市场相形见绌。2007年,RedHat预计,对于未来的产品,大多数数据中心的“标准构建块”将是一台计算机,每个插槽上将有多达四个插槽和一个四核CPU,对于英特尔CPU来说,这将是超线程的(超线程允许两个或多个使用单个处理器核心并行执行,只需要少量的额外硬件),这意味着数据中心的标准系统将有多达64个虚拟处理器。当然,更大的机器也是可能的,但是四端口插槽、四CPU核心配置被认为是最好的配置,而且大多数优化都是针对这种配置的。

商用计算机的结构有很大差异。即便如此,我们仍然关注最重要的差异,能够覆盖90%以上的硬件。值得注意的是,这些技术细节往往变化迅速,因此建议读者考虑撰写本文的日期。多年来,个人计算机和小型服务器已经标准化为由两部分组成的芯片组:North Bridge和South Bridge,如图2.1所示。

计算机中的所有CPU都通过总线(FSB)连接到北桥。北桥包含一个存储器控制器,它的实现决定了在计算机中使用的RAM芯片的类型。不同类型的RAM(如DRAM、Rambus和SDRAM)需要不同的内存控制器。

为了能够访问其他系统设备,北桥必须与南桥(俗称I/O桥)通信,它通过各种总线处理与设备的通信。目前,PCI、PCIExpress、SATA和USB总线是最重要的,但南桥也支持PATA、IEEE 1394、串口和并行口。旧的系统有连接到北桥的AGP沟槽。这就是性能原因,北桥与南桥的连接速度不够快。然而,当前的PCI-E插槽连接到南桥.

这个系统结构有许多值得注意的地方:

在此设计中,立即出现了两个瓶颈。第一个瓶颈涉及到早期PC机之间的通信,RAM的设备访问设备(通过南北桥)必须通过CPU,这对整个系统的性能产生负面影响。为了解决这个问题,一些设备可以直接访问内存(DMA)。DMA允许设备在NorthBridge的帮助下,将数据存储到RAM或访问RAM数据,而无需CPU干预(及其固有的性能成本)。今天,所有连接到任何总线的高性能设备都可以使用DMA.虽然这大大减少了CPU的工作量,但它占用了北桥的带宽,并与CPU竞争。因此,必须考虑到这一问题。第二个瓶颈

来自从北桥到RAM的总线。总线的详细信息取决于安装的内存类型。在旧系统中,只有一条总线连接到所有RAM芯片,因此不能并行访问。最近的RAM类型需要两条单独的总线(或称为DDR 2的通道,参见图2.8),这是可用带宽的两倍。北桥分配两个通道之间交错的内存访问。最近的存储技术,如FB-DRAM,增加了更多的通道.

在可用带宽有限的情况下,我们需要以最小化延迟的方式安排内存访问。正如我们将要看到的,尽管使用了CPU缓存,但处理器比内存快得多,必须等待才能访问内存。如果多个超线程内核或处理器同时访问内存,则访问内存的等待时间甚至更长。DMA操作也是如此。

但是,除了并发性之外,访问模式本身也会对存储子系统的性能产生重大影响,特别是在多个存储通道的情况下。有关RAM访问模式的更多信息,请参见2.2节。

在一些比较昂贵的系统上,North Bridge实际上不包括内存控制器。相反,NorthBridge可以连接到许多外部内存控制器(其中四个在下面的示例中)。

这个体系结构的优点是有多个内存总线,所以总带宽增加了。此设计还支持更多的内存。并发内存访问模式通过同时访问不同的内存区域来减少延迟。当多个处理器直接连接到NorthBridge时,尤其如此,如图2.2所示。对于这样的设计,主要的限制是北桥的内部带宽,这在这个体系结构中是显而易见的(来自Intel)。为了完整起见,应该注意的是,这个内存控制器可以用于其他目的,比如“内存RAID”,以及可热交换内存。<;节点名称>;),模板名将采用不同的格式。

使用多个外部内存控制器并不是增加内存带宽的唯一方法。另一种日益流行的方法是将内存控制器集成到CPU中,并将内存连接到每个CPU。该体系结构已广泛应用于基于AMD的Opteron处理器的SMP系统中。图2.3显示了这样一个系统。另一方面,Intel支持来自Nehalem处理器的公共系统接口(CSI),这基本上是相同的方法:集成内存控制器为每个处理器提供本地内存。

使用这种体系结构,可用的内存库(内存库)可以和处理器一样多。在一个四CPU机器上,内存带宽是四倍,不需要复杂的北桥和巨大的带宽。将内存控制器集成到CPU中还有一些额外的优点;我们不会在这里深入研究这一技术。

体系结构也有缺点:首先,由于机器仍然必须使所有处理器都能访问系统的所有内存,所以内存不再统一(NUMA以这一名称命名)。处理器以正常速度访问本地存储器(与处理器连接的内存)。当访问连接到另一个处理器的内存时,情况就不同了。在这种情况下,必须使用处理器之间的互连通道。要从CPU 1访问连接到CPU 2的内存,您需要通过互连通道进行通信。如果需要访问CPU 4的内存,则需要跨越两个互连通道。

每个这样的通信都有相关的成本。当我们描述访问远程内存所需的额外时间时,我们使用“NUMA因子”这个词。图2.3中的示例体系结构对于每个CPU有两个级别:相邻CPU和两个互连之外的CPU。在更复杂的系统中,有更多的层次。还有一些机器架构(如IBM的x 445和SGI的Altix系列),其中有多种类型的连接。CPU被组织成节点;在节点内部,访问内存的时间可能是相同的,或者可能只有一个很小的NUMA因素。但是,节点之间的连接可能很昂贵,NUMA因素可能相当高。

目前,商用NUMA机已经存在,并可能在未来发挥更大的作用。预计从2008年底开始,每台SMP机器都将使用NUMA。在NUMA上运行的每个程序都应该知道NUMA的成本。在第5节中,我们将讨论更多的体系结构和Linux内核为这些程序提供的一些技术。

除了本节描述的技术之外,还有其他几个因素影响RAM的性能。它们不能被软件控制,这就是为什么在本节中不讨论它们的原因。有兴趣的读者可以在2.1节中了解其中的一些因素。这些技术之所以被引入,仅仅是因为它们让我们对内存技术有了更全面的理解,或者在人们购买计算机时可以提供一些帮助。

的以下两部分主要介绍了一些入门级的硬件知识,并讨论了存储器控制器与DRAM芯片之间的访问协议。这些知识解释了内存访问的原理,程序员可能会得到一些启示。然而,这部分不需要阅读,焦虑的读者可以直接跳转到第2.2.5节。

将继续。