如何获取系统可用大页尺寸?寻求非字符串解析方案
获取系统可用大页尺寸的最佳方式
目前Linux下并没有像sysconf这类直接返回大页尺寸的标准系统调用接口,你提到的两种解析文件的方式是当前主流的可行方案,但可以通过一些技巧简化字符串解析的繁琐操作:
主流实现方法
1. 解析/proc/meminfo
可以用更高效的方式提取信息,比如在shell环境下用一行命令直接获取:
grep Hugepagesize /proc/meminfo | awk '{print $2}'
返回值单位是KB,转换为字节只需乘以1024。如果用C语言实现,也可以直接定位到Hugepagesize行读取数值,避免全文件遍历。
2. 解析/sys/kernel/mm/hugepages目录
该目录下的子目录命名格式为hugepages-<size>kB,比如hugepages-2048kB对应2MB大页。shell下可快速提取尺寸:
ls /sys/kernel/mm/hugepages | grep -o '[0-9]*' | head -n1
同样返回值单位是KB,需转换为字节才能得到实际的大页字节尺寸。
关于madvise(…, MADV_HUGEPAGE)的对齐要求
要让这个调用生效,你的内存区域必须满足两个条件:
- 内存起始地址对齐到大页尺寸的整数倍
- 内存区域的总大小是大页尺寸的整数倍
可以使用posix_memalign分配对齐的内存,或者在mmap时指定MAP_HUGETLB标志(如果需要直接映射大页)来确保对齐要求。
内容的提问来源于stack exchange,提问作者Homer512
相关产品推荐
相关产品推荐

