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

MT.*_*MT. 5 memory linux

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

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

(来自平板)

  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
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*tti 4

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

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

Linux 将尽可能多的数据保留在 RAM 中以加快访问速度。inode 和 dentry 缓存可以加快对文件系统的访问速度。如果您有极其激进的进程,Linux 由于试图占用过多内存而将其杀死,那么调整缓存清理参数可能会有所帮助,但可能性不大。有关此类信息,请参阅vfs_cache_Pressure文档。