4

Я хотел бы уточнить, будет ли освобождена (или, в основном, освобождена) память Linux-slab, если это потребуется программам пользовательского пространства.

Я заметил, что одной из моих систем 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

Я понимаю, что могу очистить это вручную, если захочу с помощью (sync; echo 3> /proc /sys /vm /drop_caches), но нужно ли мне или Linux освободит его самостоятельно при необходимости?

1 ответ1

2

Короче говоря, да, ядро освободит плиты, чтобы освободить место для приложений в пользовательском пространстве.

"Память slab", на которую вы ссылаетесь, - это память, выделенная ядром с использованием метода уменьшения фрагментации оперативной памяти. Это не определенный тип памяти или пространство, зарезервированное для некоторых дополнительных специальных данных. Он был доступен с версии ядра 2.2. Хитрость заключается в том, чтобы выделить фрагменты памяти фиксированного размера для использования объектами, которые вписываются в эти блоки, и управлять распределением и освобождением блоков в целом, когда это необходимо.

Linux хранит как можно больше данных в оперативной памяти для ускорения доступа. Коды Inode и Dentry предназначены для ускорения доступа к вашей файловой системе. Если у вас чрезвычайно агрессивные процессы, которые Linux убивает, потому что они пытаются потребовать слишком много памяти, настройка параметров очистки кэша может помочь, но это маловероятно. Для такого рода информации см. Документацию vfs_cache_pressure .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .