Введение
В этом практическом занятии (лабораторной работе) мы рассмотрим, как проверить, используется ли конкретный аллокатор памяти ядра в Linux. Мы добьемся этого, изучая статистику аллокатора, конфигурацию ядра и системные логи.
Сначала мы используем команду cat /proc/slabinfo для просмотра статистики аллокатора слябов (slab allocator) ядра, которая дает представление о работе менеджмента памяти. Затем мы проверим, какой аллокатор используется, просмотрев файл конфигурации ядра с помощью команды zcat /proc/config.gz. Наконец, мы изучим логи аллокатора в выводе команды dmesg для поиска соответствующей информации. Эти шаги помогут вам понять, как определить и проверить, какой аллокатор памяти ядра используется.
Проверьте статистику аллокатора с помощью команды 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. Изучая вывод, мы можем понять, как ядро управляет памятью.



