关于巨大的页面和翻译旁视缓冲区

他们混淆了我。

巨大的页面:pipe理OS内核的物理内存的方式,为了减less页表中的索引号,它被内核拆分成大页面。

我从它得到: https : //stackoverflow.com/questions/1973473/difference-between-cache-and-translation-lookaside-buffertlb

翻译旁视缓冲区:翻译旁视缓冲区(TLB)是内存pipe理硬件用于提高虚拟地址转换速度的CPUcaching。

巨大的页面(OS级别)翻译后备缓冲区(CPUcaching)

https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt文件说,/ proc / sys / vm / nr_hugepages指出了当前内核巨大页面池中的“持久”巨大页面的数量。

在我的服务器上,

echo 40 > /proc/sys/vm/nr_hugepages cat /proc/meminfo | grep -i hugepage AnonHugePages: 1675264 kB HugePages_Total: 40 HugePages_Free: 40 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB 

接下来,这是我的问题。

  1. AnonHugePages是什么意思? 为什么是1675264KB? 我认为有40 x 2048KB的巨大页面内存。 我不明白。

  2. 为什么我无法修改Hugepagesize? 理论上,内核可以修改大小。 也许只是没有内核的接口。

  3. 如何获得翻译旁视缓冲区大小? 我想系统内核知道大小,因为内核会使用它。

我希望我明确expression。
🙂

AnonHugePages被内核用于“透明的巨大页面”。 它们与meminfo中列出的“HugePages_Total”分开计算。

最初,为了使用巨大的页面,你的应用程序必须直接支持它们。 Java呢,Oracle呢。 我敢肯定还有其他大的内存用户使用它们。 他们也必须手动configuration。 或者,您的应用程序必须使用hugetlbfs,这是使用巨大页面的特定接口。 hugetlbfs使用“常规”巨大页面的系统池,比如直接使用巨大页面的应用程序。

最近,还增加了一些透明的巨大页面。 从理论上讲,这给你的巨大页面的好处没有修改你的应用程序的成本。 称为khugepaged的内核线程扫描内存并将标准页面合并到巨页中。 红帽6增加了透明的巨大页面。 我不知道还有什么其他的发行版,但我知道这是正在进行的工作。

实际上,这有时会导致系统响应问题。 我有一个系统运行大量内存繁重的Java应用程序(没有手动configuration使用巨大的页面)的问题。 该系统具有128GB的RAM并运行RHEL6。 记忆达90天后,记忆会变得分散。 在这一点上,我们会有一两分钟的系统暂停,大概是内存在khugepaged运行时被locking。 禁用透明的巨大页面立即变得更好。 我们仍然有一些性能问题,但configurationJava使用手动巨大的页面修正了事情。

这个介绍对大页面有一个很好的,深入的解释:

http://www.slideshare.net/raghusiddarth/transparent-hugepages-in-rhel-6

TLB的大小取决于CPU的品牌和型号。 当启用PAE时,巨大页面的大小是固定的(由CPU)在4 MiB或2 MiB。 AnonHugePages算在那里我不能理解,因为如果真的有40页,这将是80兆,这是远不及那个数字。