我们在集群中有几台服务器,我们想知道在什么情况下我们需要配置大页面?
我也有几个问题
- 剂量“内存页面大小”等于巨大的页面?
在我的 linux 服务器中,我输入了以下命令来验证默认内存页面大小
grep Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
getconf PAGESIZE
4096
但正如大家在这里看到的那样,我们得到了不同的结果,为什么?
使用大页面有什么风险?
剂量禁用透明大页面 - 意味着禁用大页面选项?
我们在集群中有几台服务器,我们想知道在什么情况下我们需要配置大页面?
我也有几个问题
在我的 linux 服务器中,我输入了以下命令来验证默认内存页面大小
grep Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
getconf PAGESIZE
4096
但正如大家在这里看到的那样,我们得到了不同的结果,为什么?
使用大页面有什么风险?
剂量禁用透明大页面 - 意味着禁用大页面选项?
当应用程序需要对它们进行随机访问的大型映射时,大页面很有趣,因为对于翻译后备缓冲区 (TLB) 而言,这是最坏的情况。您可以权衡 TLB 条目的映射粒度。
页面,包括大页面,只能映射到相同大小的物理内存块,并与该大小对齐。所以2MB的hugepage需要映射到物理RAM中2MB的边界,1GB的hugepage需要映射到1GB的边界,因为低位寻址的是page里面的数据,这里不能加offset。
这意味着大页面通常在系统启动时保留,此时物理内存还没有碎片化。大页面感知的应用程序可以
hugetlbfs
用来分配它们。您必须使用内核参数来决定大页面的大小应该是 2MB 还是 1GB,您不能混合使用这些。正常的 4kB 页面始终可用。
最常见的用例是虚拟机(qemu/kvm 可以使用大页面),这允许将 VM 的整个内存映射保留在少量 TLB 条目中,因此永远不会被驱逐,因此 VM 内部的内存访问需要一个页面仅在来宾上下文中查找表。
一些数据库系统也支持大页面,但这通常仅在您使用大型数据集和索引时才有用。
问题:
有普通(4kB)页面和巨大(2MB 或 1GB)页面。查询页面大小时,获取普通页面的大小,查询大页面大小时,获取大页面的设置。普通页面和大页面都可以并行使用,但不能混合使用不同的大页面大小。
你会得到不同的结果,因为这是两个不同的东西。普通页面的大小在硬件中是固定的,因此不是设置。
大页面需要尽早分配,虽然内存在技术上是“空闲的”,但它不能用于除了大页面感知应用程序之外的任何应用程序,因此除了这些应用程序之外的所有应用程序都将拥有更少的可用内存。这通常不是问题,因为您会在专用于内存密集型应用程序(如 VM 或数据库)的机器上使用大页面。
透明大页尝试使内存可用作缓冲区和缓存(与#3相反),并尝试将大页提供给映射大内存块的应用程序,因此不知道大页的应用程序仍然可以从中获利——基本上是一个应用程序如果可能,请求 2MB/1GB 内存块将获得一个大页面。这是否有助于或损害性能取决于您的应用程序。如果您有一个支持大页面的应用程序并且想要手动分配内存,则需要禁用 THP,而具有不理解大页面的数据库应用程序的系统可能会受益。
大页面的明显用例是当 PageTables(在 /proc/meminfo 中可见)变为数十 GB 时。这意味着仅跟踪内存会产生大量内存和 CPU 开销。它发生在巨大的内存块、大量进程或两者兼而有之的情况下。通常在数据库应用程序中。
大页面显着减少了这种开销,因为单个页表条目现在可以处理更多的内存,比如 2,048 KB 而不是 4 KB。(在其他平台上有不同的大小,例如 AIX on POWER 支持 16 MB 大页面。)
Linux 上的大页面可能不会用于文件缓存,并且对于非共享内存的 malloc() 来说,对于几 MB 来说是烦人且效率低下的。因此管理员必须分配只能用于某些目的的大页面池。这是使用大页面的弊端。
透明大页面 (THP) 试图通过自动将连续内存“碎片整理”成大页面来减少管理的烦人。这个想法是这使得预先分配的大页面成为可选的。好处是高度特定于工作负载的,它可能会花费过多的 CPU 而不值得。禁用 THP 意味着您仍然可以手动使用分配大页面。有时关闭 THP 并将数据库的共享内存段放在大页面中是值得的。
关于 Linux 大页面的最后一个抱怨:我觉得管理它很烦人。