linux kmalloc 在 slab 中超过 8192

标签 linux caching memory kernel

我正在研究 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 中没有 km​​alloc-16384、kmalloc-32768 等?

最佳答案

在那种情况下,我假设它直接进入页面分配器。我不确定为什么它自己处理 order-2 分配。除非那是因为你在一些奇怪的 8k 页面架构上,这会使它成为 order-1。

关于linux kmalloc 在 slab 中超过 8192,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983193/

相关文章:

linux - 使用 sed 从日志文件中提取目录

ios - 下载多个图像以在 UI 上显示

java - 缺少内存 : size of young generation includes only one survivor space

c - 为什么我可以分配比 RAM 更大的数组?

java - Infinispan JDBC 缓存存储

performance - 为什么嵌套的 MaybeT 会导致指数分配

在 Linux CentOS 中写入文件时出现 PHP 权限错误

Java 错误 (hsqldb)

c - 验证电子邮件域的更好方法?

java - Guava 缓存获取和放置行为