简述
系统大页(Huge Pages 或 Large
Pages)是指操作系统为了提高内存管理性能而使用的一种内存分配技术。在默认情况下,大多数操作系统使用标准内存页大小进行内存管理,如 4KB
的页大小。然而,对于具有大量内存和高性能需求的应用程序来说,这可能会导致不必要的开销,从而降低系统性能。
使用大页可以减少页表项数量、降低内存管理开销、降低 TLB(Translation Lookaside
Buffer,快速地址翻译缓冲区)缺失的次数并提供更高的内存访问效率。系统大页技术通过将多个小页组合成一个大页来实现,例如将 2MB
或更大的大页与 4KB 的小页相比较。
在支持大页的系统上,操作系统和应用程序可以利用大页功能显著提高性能。例如,大数据和数据库应用程序、高性能计算等密集型任务可以从大页中受益。但需要注意的是,并非所有场景都适用于使用大页,因为它可能导致内存浪费(大页可能无法完全利用预分配的空间),所以在考虑部署大页时要审慎评估其优缺点。
ARM系统
ARM系统也支持大页(Large Pages),也称为大内存页或者巨大页。在ARM体系结构中,这项功能被称为Large Physical
Pages或者Supersections。启用大页可以有助于提高性能,因为CPU可以在较少的时间内访问更多的内存地址空间。
虽然,ARM平台上的处理器和计算机系统都可以支持大页功能,但具体取决于特定的硬件和操作系统。在支持大页的处理器和系统中,大页可以通过内核参数进行配置,但在不支持大页的系统中不能使用大页功能。同时,支持大页的系统中还需要对应用程序进行优化,以使其能够正确地使用大页。因此,需要查看特定的硬件和操作系统的规格说明和文档,以确定它是否支持大页功能。
确定是否支持系统大页
要确定一个系统是否支持大页功能,你需要考虑以下几个方面:
- 硬件支持:大多数现代ARM处理器都支持大页,但仍有一些较早期的处理器不支持。你需要查看你的处理器规格说明来确定它是否支持大页。
- 操作系统支持:大页需要操作系统的支持,特别是内核支持。你可以查看操作系统的文档,了解它是否支持大页功能。通常,现代Linux和其他类Unix操作系统都支持开启大页。
- 配置文件设置:如果你的系统支持大页,你需要查看操作系统的文档以了解如何在配置文件中开启大页功能。在Linux系统中,你可以在 /etc/sysctl.conf 或 /etc/sysctl.d 文件夹下设置相应的内核参数。
- 应用程序支持:你需要检查你的应用程序是否支持大页功能。有些应用程序可能需要特定的设置或编码才能正确地使用大页。如果有必要,你需要修改应用程序以支持大页。总之,要确定一个系统是否支持大页功能,你需要了解硬件、操作系统和应用程序的支持情况,并进行相应的配置和修改。
命令查询
- 要使用命令查看一个系统是否支持大页功能,你可以在终端中运行以下命令:
- 确定处理器是否支持大页:
grep -E "lm|vmx|svm" /proc/cpuinfo
如果上述命令的输出结果包含 “pse36” 或 “pdpe1gb”,则表示你的处理器支持大页。
- 要查看操作系统内核是否已启用大页支持,
你可以打开终端并输入以下命令:
grep 'CONFIG_TRANSPARENT_HUGEPAGE' /boot/config-$(uname -r)
如果上述命令的输出结果为"CONFIG_TRANSPARENT_HUGEPAGE=y" 或"CONFIG_TRANSPARENT_HUGEPAGE=m",则表示内核已启用大页支持。
- 使用以下命令查看你的操作系统是否启用了大页:
sysctl vm.nr_hugepages
如果上述命令的输出结果不为零,则表示系统已启用大页。如果输出结果为零,则表示系统未开启大页。
- 如果你想查看你的系统是否支持大页,也可以使用以下命令:
grep -i Huge /proc/meminfo
如果你的系统支持大页,命令输出中应该含有一个 Hugepagesize 的参数值,那么系统支持的大小就是这个值。
如果 Hugepagesize 参数值为 0,则表示系统不支持大页内存。否则,这就是系统支持的大页大小,单位为 KB。
使用内存大页的优缺点
以下是关于大页(Huge Pages)的一些补充信息:
- 优点 大页主要用于减少内核维护的 Translation Lookaside Buffer(TLB)条目数量。TLB 是处理器中用来缓存虚拟地址到物理地址转换的特殊高速缓存。大页能够显著降低查找开销,从而提高应用程序访问内存的效率。这对于需要频繁访问大量内存的工作负载特别重要,如数据库和科学计算。
- 缺点 尽管大页能提高性能,但它也有一些潜在的问题。例如,大页会降低内存碎片和可用性,因为使用和管理不同规模的内存块容易引入更多的碎片。此外,某些系统上可能默认禁用大页,所以在启用大页时请确保你明确了解你的环境。
- 配置 为了利用大页,在 Linux 系统上通常需要进行以下配置:
- 调整内核参数:修改 /etc/sysctl.conf 并设置 ‘vm.nr_hugepages’ 参数以指定大页面的数量。
- 设置每个进程大页使用限制:你可以通过 ‘ulimit -Hl’ 命令或者编辑 /etc/security/limits.conf 文件来配置用户的大页限制。
- 将应用程序启动时使用大页面:可以在应用程序的环境变量中设置 ‘LD_PRELOAD’,使其加载 libhugetlbfs.so 库。
- 对于 NUMA 架构,请确保每个节点有适当数量的大页。
- 高级技巧 对于支持 Transparent Huge Pages (THP) 的 Linux 系统,你可以考虑将 THP 设置为自动模式。 THP
允许操作系统根据工作负载的需求自动管理大页。这使得配置更加简单,并在某些情况下还能获得更好的性能。然而,某些应用场景(如数据库)可能要求增加特定的优化参数才能获得最佳性能。具体取决于不同系统和应用程序的特性。