sha*_*lom 1 linux memory redhat central-processing-unit mtu
我们在集群中有几台服务器,我们想知道在什么情况下我们需要配置大页面?
我也有几个问题
在我的 linux 服务器中,我输入了以下命令来验证默认内存页面大小
grep Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
getconf PAGESIZE
4096
Run Code Online (Sandbox Code Playgroud)
但正如大家在这里看到的,我们得到了不同的结果,为什么?
使用大页面有什么风险?
剂量禁用透明大页面 - 意味着禁用大页面选项?
当应用程序需要随机访问的大型映射时,Hugepages 很有趣,因为这对于 Translation Lookaside Buffer (TLB) 来说是最糟糕的情况。您可以权衡 TLB 条目的映射粒度。
页,包括大页,只能映射到相同大小的物理内存块,并与该大小对齐。所以2MB的hugepage需要映射到物理RAM中的2MB边界上,1GB的hugepage需要映射到1GB的边界上,因为低位寻址页面内部的数据,这里不能加偏移量。
这意味着大页面通常在系统启动时保留,此时物理内存尚未碎片化。可以识别大页面的应用程序可以hugetlbfs用来分配它们。
您必须使用内核参数来决定大页面的大小是 2MB 还是 1GB,不能混合使用。正常的 4kB 页面始终可用。
最常见的用例是虚拟机(qemu/kvm 可以使用大页面),这允许将 VM 的整个内存映射保留在少量 TLB 条目中,因此永远不会被驱逐,因此 VM 内部的内存访问需要一个页面仅在来宾上下文中查找表。
一些数据库系统也支持大页面,但这通常只有在处理大型数据集和索引时才有用。
问题:
有普通 (4kB) 页面和巨大 (2MB 或 1GB) 页面。查询页大小时,得到的是普通页的大小,查询大页大小时,得到的是大页的设置。普通页面和大页面都可以并行使用,但不能混合使用不同的大页面大小。
你会得到不同的结果,因为这是两件不同的事情。普通页面的大小在硬件中是固定的,所以它不是一个设置。
大页面需要尽早分配,虽然内存在技术上是“空闲的”,但除了知道大页面的应用程序外,它不能用于任何其他应用程序,因此除了这些应用程序之外,所有应用程序的可用内存都将减少。这通常不是问题,因为您会在专用于 VM 或数据库等需要大量内存的应用程序的机器上使用大页面。
透明大页尝试使内存可用作缓冲区和缓存(与 #3 相反),并尝试将大页提供给映射大内存块的应用程序,因此不知道大页面的应用程序仍然可以从中受益——基本上是一个应用程序如果可能,请求 2MB/1GB 内存块将被分配一个大页面。这是否有助于或损害性能取决于您的应用程序。如果您有一个支持大页面的应用程序并且想要手动分配内存,则需要禁用 THP,而具有不理解大页面的数据库应用程序的系统可能会受益。