pi@raspberrypi:~$ cat /proc/buddyinfo
Node 0, zone Normal 41 19 14 8 7 3 1 1 4 2 102
/proc/buddyinfo 输出是 Linux 内核中 伙伴系统(Buddy Allocator) 的内存分配状态。它是内核用来管理 页框(page frame)分配 的一种机制,尤其用于分配连续的物理页。
📘 什么是 Buddy Allocator?
Linux 将物理内存划分为多个阶层(order),每个阶层表示 2ⁿ 个连续页:
| Order | 页数 | 大小(以 4KB 页为单位) |
|---|---|---|
| 0 | 1 | 4 KB |
| 1 | 2 | 8 KB |
| 2 | 4 | 16 KB |
| 3 | 8 | 32 KB |
| ... | ... | ... |
| 10 | 1024 | 4 MB |
当内核需要分配连续的物理页时,它会从这些阶层中寻找合适的块。
🧾 你的输出解析
Node 0, zone Normal 41 19 14 8 7 3 1 1 4 2 102
-
Node 0:你的系统只有一个 NUMA 节点(树莓派是单节点架构) -
zone Normal:这是用于普通内存分配的区域(非 DMA 或高端内存) -
后面的数字对应每个阶层(order 0 到 order 10)中当前可用的块数量:
| Order | 可用块数 | 总大小(每块) |
|---|---|---|
| 0 | 41 | 4 KB |
| 1 | 19 | 8 KB |
| 2 | 14 | 16 KB |
| 3 | 8 | 32 KB |
| 4 | 7 | 64 KB |
| 5 | 3 | 128 KB |
| 6 | 1 | 256 KB |
| 7 | 1 | 512 KB |
| 8 | 4 | 1 MB |
| 9 | 2 | 2 MB |
| 10 | 102 | 4 MB ✅ |
📊 总结分析
-
低阶块(order 0–4):数量较多,适合小内存分配。
-
高阶块(order 10):你有 102 个 4MB 块,说明系统当前内存碎片不严重,仍能分配大块连续内存。
-
中阶块(order 5–9):数量较少,可能是内核或驱动程序已经使用了部分中等大小的连续内存。
🧠 为什么这很重要?
-
如果高阶块数量为 0,系统可能无法分配大块内存,会导致某些驱动或模块加载失败。
-
Buddy Allocator 不能合并非伙伴页,因此内存碎片会影响性能和稳定性。
-
你可以通过观察这个文件来判断系统是否需要重启或优化内存使用
/proc/buddyinfo:伙伴系统内存分配状态
这个文件显示的是内核的 伙伴系统(Buddy Allocator) 的内存块分布情况。它用于管理页框分配,尤其是连续物理页的分配。
示例输出:
Node 0, zone Normal 110 17 11 13 5 5 2 1 4 2 102
-
Node 0, zone Normal:表示这是单节点系统(树莓派),使用的是“Normal”内存区域。 -
后面的数字代表每个阶层(order)中可用的页块数量:
-
order 0:单页(4KB) -
order 1:2 页(8KB) -
order 2:4 页(16KB) -
依此类推,直到
order 10(1024 页 = 4MB)
-
这可以帮助你判断系统是否容易出现内存碎片或分配失败。
🧩 /proc/vmallocinfo:vmalloc 区域分配详情
这个文件列出了所有通过 vmalloc() 分配的虚拟内存区域。你需要 sudo 权限才能访问它。
示例片段:
0x7a02c5ac-0xda825f0f 462848 load_module+0x9b4/0x266c pages=112 vmalloc
-
地址范围:虚拟地址起止
-
大小(字节):如
462848表示约 452 KB -
来源函数:如
load_module+0x9b4/0x266c表示该区域由模块加载时分配 -
pages=112:分配了 112 个页(约 448 KB) -
类型:
vmalloc表示使用了 vmalloc 而非 kmalloc
这些区域通常用于模块、驱动程序、内核数据结构等需要连续虚拟地址但不要求连续物理地址的场景。
🔍 你可以进一步探索的内容
-
查看模块使用的内存:
bash
lsmod cat /proc/modules -
查看 slab 分配器状态:
bash
cat /proc/slabinfo -
查看物理内存分布:
bash
cat /proc/zoneinfo

被折叠的 条评论
为什么被折叠?



