我在研究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/

10-09 13:26