近期由于DPDK的学习,了解到EAL初始化过程中针对大页内存的查询依托于/proc/mounts文件下的一个特殊的机制进行,具体来说就是:
1、使用下面这个命令进行大页内存的申请,注意是只要写入就会申请:
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
对应的cat效果是:

只要是对这个文件里写入数字,就会自动触发内存的分配。
可以使用cat /proc/meminfo、cat /proc/buddyinfo来进行大页内存分配。
2、使用mount -t hugetlbfs nodev /mnt/huge命令,来将具体的文件系统路径写入到/proc/mounts文件内。
这里就可以看出这个机制的典型作用——就是用于在/proc文件夹下,以mounts文件来向所有的用户态程序展示一些关键的参数。
后续在DPDK中,就是通过mounts文件中的描述,用于给EAL初始化中进行路径描述的。EAL初始化会在其描述的路径中,使用mmap函数中填充对应此处路径的方式,在已经被申请到的大页内存中于此路径进行mmap的创立。
各种文件一览
buddyinfo
显示内核伙伴系统中空闲内存块的分布情况
cgroups
列出当前系统中已挂载的控制组
cmdline
显示内核启动时传递的命令行参数
consoles
显示当前系统注册的控制台设备列表及其状态
cpuinfo
显示CPU硬件信息
crypto
列出内核中已注册的所有加密算法和密码模块
devices
显示当前内核已加载的字符设备和块设备
diskstats
提供每块磁盘设备的详细IO统计信息
dma
显示当前正在使用注册的ISA DMA通道信息
execdomains
列出内核当前支持的执行域
fb
列出系统注册的帧缓冲设备
filesystems
列出当前内核支持的文件系统类型
interrupts
显示每个IRQ的中断计数和分布情况
iomem
展示物理内存地址空间的分配映射情况
ioports
列出当前已注册的IO端口范围
kallsyms
导出内核中所有导出的符号及其地址
kcore
提供整个物理内存和内核空间的ELF格式核心转储镜像
keys
列出当前会话中已加载到内核密钥环中的密钥
key-users
显示每个用户ID在内核密钥子系统中占用的资源配额统计
kmsg
提供内核环形缓冲区中的日志消息的流式接口
kpagecgroup
按物理页框号索引,显示每个物理页所属的Memory Cgroup ID
kpagecount
按物理页框号索引,显示每个物理页被映射的次数
kpageflags
按物理页框号索引,显示每个物理页的标志位
loadavg
显示系统的平均负载
locks
列出当前内核持有的所有文件锁
mdstat
RAID子系统的状态
meminfo
提供系统物理内存和交换空间的详细统计信息
misc
列出注册在杂项字符设备主号下的所有设备号及其对应驱动名称
modules
已加载的可加载模块
mounts
显示当前系统所有已挂载的文件系统列表
mtrr
显示x86架构下的内存类型范围寄存器设置
net
这是一个目录,包含大量网络子系统的统计信息和状态文件
pagetypeinfo
提供伙伴系统中页面类型和碎片化的详细统计
partitions
列出内核识别到的所有块设备分区及其大小
sched_debug
提供linux调度器的内部实时状态快照
schedstat
提供调度器的统计摘要信息,通常比sched_debug更轻量,侧重于累积统计数据
self
这是一个符号链接,指向当前访问该文件的进程对应的目录
slabinfo
展示slab分配器中各个缓存的详细统计信息
softirqs
显示每个CPU核心上各类软中断的处理计数
stat
提供系统自启动依赖的全局CPU时间统计及其他核心内核计数器
swaps
列出当前系统已启用的交换分区和交换文件
sysrq-trigger
允许用户空间程序触发内核的SysRq功能,向此文件写入特定字符可执行紧急内核操作,常用于系统死机或无响应时的调试和恢复
thread-self
类似于self的文件指向,但是这个会指向当前线程对应的目录
timer_list
列出内核中所有活跃的高精度定时器和时钟事件设备状态
uptime
显示系统启动至今的时间和累计空闲时间
version
显示编译当前内核的GCC版本和编译时间
version_signature
提供内核版本的签名或构建标识符
vmallocinfo
展示内核vmalloc区域的分配详情,列出每个vmalloc分配的起始地址、结束地址、大小、调用者、页面属性等
vmstat
提供虚拟内存子系统的详细统计计数器
zoneinfo
展示每个内存区域的详细状态