【发布时间】:2015-12-15 15:37:36
【问题描述】:
我在 Linux 上有一个 C++ 应用程序,它对延迟非常敏感。我的内存使用量约为 2GB,因此对于 4kb 页面和 64 个 TLB 条目,我将遇到 TLB 未命中。
我在英特尔开发人员手册中阅读了 2MB(或 4MB?)“巨大”页面只会将 TLB 条目的数量减少一半,因此内存范围的增加抵消了 TLB 条目的减少,并且会更好地提高性能.
如何在 C++ 应用程序中使用“巨大”页面分配内存?有什么我应该注意的取舍吗?
我的 Linux 是 Red Hat 发行版。
【问题讨论】:
-
IIRC 你不能混合分配类型。您必须配置您的操作系统以使用其中一种。我没有完全通读它,但linuxgazette.net/155/krishnakumar.html 似乎做了你想做的事。
-
@RedX:不,您可以在“正常”系统上拥有一些 2M 的大页面。
grep Huge /proc/meminfo显示正在使用的数量。在我的桌面(Ubuntu 15.04)上,大约 400MB 的常规malloc分配目前由 HugePages 支持,这要归功于内核注意到一堆连续的 4k 页面都在使用中。 developerblog.redhat.com/2014/03/10/… 请注意,大多数台式机 CPU 甚至不支持 1G HugePages,即使支持,固定这么多内存也是一个更小众的用例。 -
@OP:“减少 TLB 条目的数量”。你在这里捣乱。 TLB 对 4k 页面有有限数量的条目,对 HugePages 有一个单独的、较小的、有限数量的条目。因此,为您的某些数据设置 HugePages,为所有常规内容设置常规页面,实际上增加了可用的 TLB 条目总数,并极大地增加了所有 TLB 条目可以覆盖的地址空间量.
标签: c++ linux performance optimization memory-management