Как проверить, используется ли конкретный аллокатор памяти ядра в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) мы рассмотрим, как проверить, используется ли конкретный аллокатор памяти ядра в Linux. Мы добьемся этого, изучая статистику аллокатора, конфигурацию ядра и системные логи.

Сначала мы используем команду cat /proc/slabinfo для просмотра статистики аллокатора слябов (slab allocator) ядра, которая дает представление о работе менеджмента памяти. Затем мы проверим, какой аллокатор используется, просмотрев файл конфигурации ядра с помощью команды zcat /proc/config.gz. Наконец, мы изучим логи аллокатора в выводе команды dmesg для поиска соответствующей информации. Эти шаги помогут вам понять, как определить и проверить, какой аллокатор памяти ядра используется.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558906{{"Как проверить, используется ли конкретный аллокатор памяти ядра в Linux"}} linux/less -.-> lab-558906{{"Как проверить, используется ли конкретный аллокатор памяти ядра в Linux"}} linux/grep -.-> lab-558906{{"Как проверить, используется ли конкретный аллокатор памяти ядра в Linux"}} end

Проверка статистики аллокатора с помощью команды cat /proc/slabinfo

На этом этапе мы рассмотрим, как проверить статистику аллокатора с использованием команды cat /proc/slabinfo. Эта команда предоставляет подробную информацию об аллокаторе слябов (slab allocator) ядра, который отвечает за эффективное управление памятью. Понимание этой информации может быть полезно для отладки проблем, связанных с памятью, и оптимизации производительности системы.

Сначала выполним команду:

cat /proc/slabinfo

Эта команда отобразит список кэшей слябов (slab caches) вместе с соответствующей статистикой. На первый взгляд вывод может показаться сложным для понимания, но мы разберем его по частям.

Вот пример того, что вы можете увидеть:

slabinfo - version: 2.1
kmem_cache            48     72    192    19    1    1
...
kmalloc-192           48     72    192    19    1    1
...

Каждая строка представляет собой кэш сляба. Столбцы содержат информацию о кэше, например:

  • name: Имя кэша сляба.
  • <active_objs>: Количество активных объектов в кэше.
  • <num_objs>: Общее количество объектов в кэше.
  • <objsize>: Размер каждого объекта в байтах.
  • <objperslab>: Количество объектов в каждом слябе.
  • <pagesperslab>: Количество страниц в каждом слябе.
  • <flags>: Флаги, связанные с кэшем.

kmem_cache - это универсальный кэш, в то время как kmalloc-192 - кэш для объектов размером 192 байта.

Для того чтобы сделать вывод более удобочитаемым, вы можете использовать команду less:

cat /proc/slabinfo | less

Это позволит вам просматривать вывод по страницам. Чтобы выйти из less, нажмите q.

Вы также можете использовать grep для фильтрации вывода и фокусировки на конкретных кэшах слябов. Например, чтобы найти информацию о кэше kmalloc-192, вы можете использовать следующую команду:

cat /proc/slabinfo | grep kmalloc-192

Эта команда отобразит только строки, содержащие "kmalloc-192".

Изучая вывод команды cat /proc/slabinfo, вы можете получить представление о том, как ядро управляет памятью, и определить потенциальные области для оптимизации.

Проверка аллокатора в выводе команды zcat /proc/config.gz

На этом этапе мы проверим конфигурацию аллокатора, изучив файл конфигурации ядра, который обычно сжат и находится по пути /proc/config.gz. Этот файл содержит параметры конфигурации, использованные при сборке ядра, в том числе те, которые связаны с выделением памяти.

Сначала используем команду zcat для распаковки и просмотра содержимого файла конфигурации:

zcat /proc/config.gz

Команда zcat похожа на cat, но она автоматически распаковывает файлы в формате gzip. Вывод будет представлять собой длинный список параметров конфигурации ядра.

Для поиска параметров, связанных с аллокатором, можно использовать grep для фильтрации вывода. Например, чтобы найти параметры, связанные с аллокатором слябов (slab allocator), можно использовать следующую команду:

zcat /proc/config.gz | grep SLAB

Эта команда отобразит строки, содержащие "SLAB". Вы, возможно, увидите что-то вроде этого:

CONFIG_SLAB=y
## CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLUB=y
## CONFIG_SLOB is not set

Эти параметры указывают, какой аллокатор слябов включен в ядре. CONFIG_SLAB=y означает, что включен оригинальный аллокатор слябов, а CONFIG_SLUB=y - что включен аллокатор SLUB. Должен быть включен только один из них. CONFIG_SLOB - это упрощенный аллокатор для встроенных систем.

Вы также можете искать другие параметры, связанные с аллокаторами, например, те, которые относятся к аллокатору страниц (page allocator) или системе бадди (buddy system). Например:

zcat /proc/config.gz | grep PAGE_ALLOC

Это покажет параметры, связанные с выделением страниц.

Изучая файл конфигурации ядра, вы можете проверить, какой аллокатор используется и какие параметры включены. Это может помочь понять поведение системы при управлении памятью.

Проверка журналов аллокатора с помощью команды dmesg

На этом этапе мы проверим буфер сообщений ядра с использованием команды dmesg, чтобы найти журналы, связанные с аллокатором памяти. Команда dmesg отображает сообщения из кольцевого буфера ядра, который может содержать ценную информацию о системных событиях, включая выделение и освобождение памяти.

Для просмотра сообщений ядра просто введите:

dmesg

Это выведет большое количество текста. Чтобы отфильтровать вывод и сосредоточиться на сообщениях, связанных с аллокатором, можно использовать grep. Например, чтобы найти сообщения, связанные с аллокатором слябов (slab allocator), используйте:

dmesg | grep slab

Вы, возможно, увидите вывод, похожий на следующий:

[    0.000000] SLUB: HWalign slab flags
[    1.234567] kmem_cache_create: slab created at <memory_address>

Эти сообщения могут предоставить информацию о создании, уничтожении кэша слябов и других событиях.

Вы также можете искать сообщения, связанные с ошибками выделения памяти:

dmesg | grep alloc

Или сообщения, связанные с ситуациями нехватки памяти (Out-of-Memory, OOM):

dmesg | grep OOM

Эти сообщения могут помочь вам диагностировать проблемы, связанные с памятью.

Для того чтобы сделать вывод более управляемым, можно использовать less для прокрутки сообщений:

dmesg | less

Нажмите q для выхода из less.

Изучая вывод команды dmesg, вы можете получить представление о поведении аллокатора памяти и выявить потенциальные проблемы.

Резюме

В этом практическом занятии (лабораторной работе) мы изучили, как проверять статистику аллокатора памяти ядра с помощью команды cat /proc/slabinfo. Эта команда предоставляет подробное представление о аллокаторе слябов (slab allocator) ядра, отображая список кэшей слябов и связанную с ними статистику, включая имя кэша, количество активных и общего числа объектов, размер объекта, количество объектов в слябе, количество страниц в слябе и флаги.

Мы также узнали, как использовать less для улучшения читаемости вывода и grep для фильтрации вывода и фокусировки на конкретных кэшах слябов, например, kmalloc - 192. Изучая вывод, мы можем понять, как ядро управляет памятью.