我在研究linux的slab分配。
在Linux内核源代码mm/slab.c
之后,当我用内核中的KMALoC请求内存时,真正发生的是,平板分配器找到了与2的最大功率匹配的最大匹配,并返回准备好的缓存(如果存在的话),但是/proc/slabinfo
告诉我准备的KMAOLLC缓存的最大大小是“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 ...
内核源代码显示,超过这个大小的请求会失败(我认为我错了),但实际上,我们可以最大化128KB。
我的观点:为什么在
/proc/slabinfo
中没有kmalloc-16384、kmalloc-32768等? 最佳答案
在这种情况下,我假设它直接指向页面分配器。但我不知道它为什么要自己处理order-2分配。除非那是因为你在一个奇怪的8K页面架构上,这会使它的顺序-1。
关于linux - 平板电脑中超过8192的Linux kmalloc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11983193/