Как проверить, активна ли конкретная настройка слайба ядра в Linux

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

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

Введение

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

В рамках лабораторного занятия вы научитесь проверять статистику слайбов с помощью файла /proc/slabinfo, проверять связанные настройки с использованием команды sysctl vm и изучать соответствующие логи в выводе команды dmesg. Эти шаги дадут вам необходимые навыки для понимания и устранения проблем с поведением слайбов ядра.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558759{{"Как проверить, активна ли конкретная настройка слайба ядра в Linux"}} linux/cat -.-> lab-558759{{"Как проверить, активна ли конкретная настройка слайба ядра в Linux"}} linux/grep -.-> lab-558759{{"Как проверить, активна ли конкретная настройка слайба ядра в Linux"}} linux/env -.-> lab-558759{{"Как проверить, активна ли конкретная настройка слайба ядра в Linux"}} end

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

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

Файловая система /proc представляет собой виртуальную файловую систему, которая предоставляет информацию о процессах и другой системной информации. Файл /proc/slabinfo содержит конкретные сведения о кэшах слайбов ядра.

Для просмотра содержимого файла /proc/slabinfo вы будете использовать команду cat. cat - это стандартная утилита Unix, которая последовательно считывает файлы и выводит их на стандартный вывод.

Если терминал еще не открыт, откройте его. Для этого нажмите на значок Xfce Terminal слева на рабочем столе.

Теперь введите следующую команду и нажмите Enter:

cat /proc/slabinfo

Вы увидите вывод, похожий на следующий (точное содержимое может отличаться в зависимости от активности системы):

slabinfo - version: 2.1
## name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_expect      0      0    128   63    1 : tunables    0    0    0 : slabdata      0      0      0
nf_conntrack      10     10    320   25    2 : tunables    0    0    0 : slabdata      1      1      0
request_sock_TCP      0      0    192   42    1 : tunables    0    0    0 : slabdata      0      0      0
... (много других строк)

Разберем вывод:

  • name: Имя кэша слайбов (например, nf_conntrack, request_sock_TCP).
  • <active_objs>: Количество объектов, в настоящее время используемых в этом кэше.
  • <num_objs>: Общее количество объектов, выделенных в этом кэше.
  • : Размер каждого объекта в байтах.
  • : Количество объектов, которые помещаются в один слайб.
  • : Количество страниц памяти, используемых одним слайбом.
  • tunables: Параметры, которые можно настроить для этого кэша.
  • slabdata: Информация о самих слайбах.

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

Вы успешно просмотрели статистику аллокатора слайбов. Нажмите Continue, чтобы перейти к следующему шагу.

Проверка настроек слайбов с помощью sysctl vm

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

Параметры ядра - это настройки, которые влияют на поведение ядра Linux. Многие из этих параметров находятся в файловой системе /proc/sys. sysctl предоставляет удобный способ доступа к этим параметрам и управления ими без прямого взаимодействия с файлами в /proc/sys.

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

Для просмотра всех параметров ядра, связанных с виртуальной памятью, используйте команду sysctl с аргументом vm:

sysctl vm

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

vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.compact_memory = 0
vm.compact_unevictable_percentage = 1
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirtytime_expire_seconds = 43200
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.highmem_is_dirtyable = 0
vm.laptop_mode = 0
vm.lowmem_reserve_ratio = 256   256     32      0       0
vm.max_map_count = 65530
vm.min_free_kbytes = 67584
vm.min_slab_ratio = 5
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 65536
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.numa_balancing = 1
vm.numa_balancing_scan_delay_ms = 1000
vm.numa_balancing_scan_period_min_ms = 20
vm.numa_balancing_scan_period_max_ms = 10000
vm.numa_balancing_scan_size_mb = 32
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100

Найдите параметры, которые могут быть связаны с кэшированием или давлением на память, например vm.vfs_cache_pressure или vm.min_slab_ratio. Эти параметры могут влиять на то, как ядро управляет различными типами кэшей, включая кэши слайбов.

Вы также можете просмотреть конкретный параметр, указав его полное имя. Например, чтобы увидеть значение параметра vm.vfs_cache_pressure:

sysctl vm.vfs_cache_pressure

Эта команда выведет:

vm.vfs_cache_pressure = 100

Параметр vm.vfs_cache_pressure контролирует склонность ядра освобождать память, используемую для кэширования объектов каталогов и inode. Более высокое значение означает, что ядро более активно освобождает эту память.

Понимание этих параметров поможет вам настроить поведение памяти вашей системы.

Нажмите Continue, чтобы перейти к следующему шагу.

Проверка журналов слайбов в dmesg

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

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

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

dmesg

Однако вывод может быть очень длинным. Чтобы найти сообщения, конкретно связанные с аллокатором слайбов, вы можете передать вывод команды dmesg в команду grep и искать ключевые слова, такие как "slab" или "SLUB" (SLUB - это современная реализация аллокатора слайбов).

Введите следующую команду в терминале и нажмите Enter:

dmesg | grep -i "slab\|slub"

Разберем эту команду:

  • dmesg: Выводит буфер сообщений ядра.
  • |: Это конвейер (pipe), который передает вывод команды слева в качестве входных данных команде справа.
  • grep: Командная утилита для поиска в текстовых данных строк, соответствующих регулярному выражению.
  • -i: Этот параметр делает поиск регистронезависимым, поэтому он будет находить "slab", "SLAB", "slub", "SLUB" и т.д.
  • "slab\|slub": Это шаблон поиска. slab ищет слово "slab", \| действует как оператор ИЛИ, а slub ищет слово "slub".

Вывод будет показывать все строки из буфера сообщений ядра, содержащие "slab" или "slub" (регистронезависимо). Вы можете увидеть сообщения о инициализации аллокатора слайбов во время загрузки или потенциальные предупреждения и ошибки, если есть проблемы.

[    0.000000] kmem_cache_init
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] SLUB: TotalObjects=0, ObjectsPerSpan=0, SpansPerChunk=0
[    0.000000] SLUB: min_objects.limit=0, min_objects.batchcount=0
[    0.000000] SLUB: tunables.limit=0, tunables.batchcount=0, tunables.sharedfactor=0
[    0.000000] SLUB: Not setting slab_nomerge.
[    0.000000] SLUB: Not setting slab_debug.
[    0.000000] SLUB: Not setting slab_max_order.
[    0.000000] SLUB: Not setting slab_alias_debug.
[    0.000000] SLUB: Not setting slab_pad.
[    0.000000] SLUB: Not setting slab_red_zone.
[    0.000000] SLUB: Not setting slab_poison.
[    0.000000] SLUB: Not setting slab_freelist_debug.
[    0.000000] SLUB: Not setting slab_freelist_random.
[    0.000000] SLUB: Not setting slab_freelist_hardened.
[    0.000000] SLUB: Not setting slab_trace.
[    0.000000] SLUB: Not setting slab_reclaim_account.
[    0.000000] SLUB: Not setting slab_way.
[    0.000000] SLUB: Not setting slab_sizes.
[    0.000000] SLUB: Not setting slab_caches.
[    0.000000] SLUB: Not setting slab_test.
[    0.000000] SLUB: Not setting slab_order.
[    0.000000] SLUB: Not setting slab_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_memcg.

Эта команда представляет собой мощный способ фильтрации сообщений ядра и поиска соответствующей информации для устранения неполадок в конкретных подсистемах ядра.

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

Нажмите Continue, чтобы завершить этот практический урок.

Резюме

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

Затем вы проверили настройки слайбов с помощью команды sysctl vm, которая позволяет изучать и изменять параметры ядра, связанные с виртуальной памятью, включая настройки, специфичные для слайбов. Наконец, вы узнали, как проверять журналы, связанные с слайбами, в dmesg (буфере сообщений ядра), чтобы выявить любые ошибки или предупреждения, связанные с аллокатором слайбов. Эти шаги в совокупности предоставляют комплексный подход к пониманию и устранению неполадок в поведении слайбов ядра.