当用户程序需要时,slab内存会被释放吗?

当用户程序需要时,slab内存会被释放吗?

我想澄清的是,如果用户空间程序需要,Linux slab 内存是否会被释放(或大部分被释放)。

我注意到我的一个Linux系统为“slab”分配了大量内存:

(摘自 slabtop)

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   
834768 834766  99%    0.94K  24552       34    785664K ext4_inode_cache
694092 354151  51%    0.19K  33052       21    132208K dentry

我意识到如果我想的话我可以使用(sync; echo 3 > /proc/sys/vm/drop_caches)手动清除它,但是我需要这样做吗,或者 Linux 会在需要时自行释放它吗?

答案1

简而言之,是的,内核将释放slab以便为用户空间应用程序腾出空间。

您提到的“slab 内存”是内核使用一种技术分配的内存,用于减少 RAM 碎片。它不是为某些特殊数据保留的特定类型的内存或空间。它从内核版本 2.2 开始可用。诀窍是分配固定大小的内存块供适合这些块的对象使用,并在需要时管理整个块的分配和释放。

Linux 尽可能多地将数据驻留在 RAM 中,以加快访问速度。inode 和 dentry 缓存用于加快对文件系统的访问速度。如果您有非常激进的进程,而 Linux 正在终止这些进程,因为它们试图占用太多内存,则调整缓存清理参数可能帮助,但可能性不大。有关此类信息,请参阅vfs_cache_压力文档。

相关内容