我正在研究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等等?
答案 0 :(得分:0)
我认为在这种情况下它会直接转到页面分配器。我不知道为什么它自己处理order-2分配。除非那是因为你使用了一些奇怪的8k页面架构,这将使它成为订单-1。