大页内存属于内存管理技术,支持操作系统用更大内存页单位分配物理内存,而不是用传统较小页单位。大页内存有利于提高内存分配效率,降低内存管理开销提高大型应用性能。
要使用大页内存,需要CPU、操作系统和应用程序的支持。大页内存可以提高性能,但也可能造成内存浪费和兼容性问题,增加管理难度。因此,需要根据应用需求合理配置和管理大页内存。大页内存在云计算中常用于提高性能和优化资源,如虚拟环境中大页内存可减少宿主机和虚拟机之间内存交换,降低页表复杂性,提高虚拟机内存分配和释放效率提升虚拟机性能;数据库系统一般要处理较大数据,大页内存能减少 页表条目的数量等。
在Linux中管理大页内存的方法中,THP是Linux内核的一特性,支持内核自动把小页转换为大页,减少页表条目数量来提高内存管理效率。启动THP:
echo madvice > /sys/kernel/mm/transparent_hugepage/enabled
或在
/etc/rc.local中添加上述命令,以确保在启动时启用THP。
禁用THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
设置为内存不足时使用THP:
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
Static HugePages需在启动时配置,并在系统运行期间一直使用大页。配置hugepages文件系统:
hugetlbfs /dev/hugepages hugetlbfs pagesize=2M 0 0
其中pagesize可自定义为1G或2M。
创建pagesize池:
vm.nr_hugepages = 1024 # 设置系统需要的2M大页数量
或:
echo 1024 > /proc/sys/vm/nr_hugepages
挂载hugepages:
mkdir -p /dev/hugepages
mount -t hugetlbfs none /dev/hugepages
查看当前配置:
cat /proc/meminfo | grep -i huge
会显示当前系统中hugepages的使用情况。
给应用程序配置hugepages,可以用mmap系统调用来请求hugepages,如在C程序中:
void *addr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
其中size应该是hugepage大小的整数倍。
sysctl可以查看和修改内核参数,如hugepages相关参数:
sysctl vm.nr_hugepages
sysctl vm.hugetlb_shm_group
使用hugepages需要保证其物理内存足够大,可支持所需hugepages数量。
传统内存管理中,操作系统一般都是使用固定大小内存页,如4KB或2MB,进程都虚拟地址空间被分割成多个内页,每个页面都映射到物理内存的不同位置而大内存页面可减少页表大小、降低TLB缺失、提高内存分配效率、提升性能等。如果是生产环境中启用或配置需要充分测试,确保系统和应用程序的稳定。特殊情况下,启用hugepages还可能会影响OOM,因此要细致规划好内存空间。如果需继续了解关于hugepages的相关内容可以继续关注华纳云!