我正在研究 linux slab 分配。
根据 linux 内核源代码 mm/slab.c
,当我在内核中使用 kmalloc 请求内存时,实际发生的是,slab 分配器找到与数字最接近的更大匹配2 的幂并返回准备好的缓存(如果存在)但是 /proc/slabinfo
告诉我准备好的 kmalloc 缓存的最大大小是“8192”:
kmalloc-8192 29 32 8192 4 8 : tunables ...
kmalloc-4096 70 72 4096 8 8 : tunables ...
kmalloc-2048 331 336 2048 8 4 : tunables ...
内核源代码显示超过此大小的请求将失败(我认为我错了)但实际上,我们可以 kmalloc 最大 128KB。
我的疑问:为什么 /proc/slabinfo
中没有 kmalloc-16384、kmalloc-32768 等?
最佳答案
在那种情况下,我假设它直接进入页面分配器。我不确定为什么它自己处理 order-2 分配。除非那是因为你在一些奇怪的 8k 页面架构上,这会使它成为 order-1。
关于linux kmalloc 在 slab 中超过 8192,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983193/