Часто используемые инструменты

ftrace#

  1. ftrace: инструмент отладки для пространства ядра Linux. Ядро предоставляет события для трассировки. ftrace позволяет захватывать события, чтобы можно было просмотреть эти интуитивно понятные события и осуществить трассировку функций ядра.
  2. Конфигурация и использование ftrace: чтобы использовать ftrace, нужно скомпилировать его зависимости в ядро. По умолчанию openEuler выполняет компиляцию средства ftrace. Если средство ftrace не включено, его можно включить, выбрав Kernel hacking (Доработка ядра) > Tracers (Трассировщики) > Trace syscalls (Трассировка системных вызовов) в menuconfig. Кроме того, нужно скомпилировать debugfs, выбрав Kernel hacking (Доработка ядра) > Generic Kernel Debugging Instruments (Универсальные инструмент отладки ядра) > Debug Filesystem (Отладка файловой системы).
  • Настройка функции ftrace

ftrace предоставляет интерфейсы доступа для пользовательского пространства через debugfs. После настройки debugfs в ядре создается каталог /sys/kernel/debug. debugfs подключается к этому каталогу. Если ядро поддерживает элементы конфигурации, связанные с ftrace, каталог tracing создается в debugfs. debugfs подключается к этому каталогу. На следующем рисунке показано содержимое этого каталога.

  • Знакомство с интерфейсом debugfs для ftrace

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

available_tracers: available tracers

current_tracer: running tracer

available_events: lists all available trace events in the OS

events: This directory differentiates events by module.

set_event: lists the events to be traced.

tracing_on: enables or disables tracing. echo 0 > tracing_on indicates that tracing is disabled, and 1 indicates that tracing is enabled.

trace: queries trace data.
  • Доступные трассировщики

zh-cn_image_0000001373373585

function: a function call tracing program that does not require parameters
function_graph: a function call tracer that uses subcalls
  • События трассировки
# Specify the arm_event of the RAS to be traced.
echo ras:arm_event > /sys/kernel/debug/tracing/set_event

# This file contains the event format and fields to be printed.
cat /sys/kernel/debug/tracing/events/ras/arm_event/format

# Start tracing.
echo 1 > /sys/kernel/debug/tracing/tracing_on

#  Observe the trace output.
tail -f /sys/kernel/debug/tracing/trace

c50cb9df64f4659787c810167c89feb4_1884x257

  • Трассировка входных параметров функций ядра

Выполните трассировку mmap, соответствующего системному вызову do_mmap. Выведите входной параметр addr.

zh-cn_image_0000001373379529

# Trace through the kprobe.
echo 'p:probe1 do_mmap addr=%x1' > kprobe_events

# Enable kprobe.
echo 1 > events/kprobes/probe1/enable

# Start tracing.
echo 1 > tracing_on

# View trace data.

zh-cn_image_0000001322379488

  • Трассировка вызовов функций
# Select a tracing type.
echo function_graph > current_tracer

# Set the PID of the process to be filtered.
echo <pid> set_ftrace_pid

# Start tracing.
echo 1 > tracing_on

# View trace data.

zh-cn_image_0000001322219840

strace#

Команда strace представляет собой инструмент диагностики и отладки. Вы можете использовать команду strace для анализа системных вызовов и передачи сигналов приложений в целях решения проблем или изучения процесса выполнения приложений.

Можно выполнить команду strace -h, чтобы просмотреть функции, предоставляемые strace.

zh-cn_image_0000001322112990

Чаще всего она используется для трассировки команды xx, трассировки вилок, отображения времени и вывода результата в файл output.

strace -f -tt -o output xx

kdump#

  1. Принципы crash/kdump

kdump — это моментальный снимок состояния памяти ОС в определенный момент времени. Он помогает специалистам по эксплуатации и сопровождению выполнять отладку и анализировать причину сбоя системы. kdump обычно используется, когда возникает сбой системы и сигнал тревоги ядра.

Процедура имеет следующий вид.

en-us_image_0000001321685172

  1. Установка и настройка связанных инструментов
# Use Yum to install the corresponding software package.
yum install kernel-debuginfo-$(uname -r) kexec-tools crash -y

# Set the reserved memory size for **crashkernel**.
vim /etc/default/grub

zh-cn_image_0000001372821865

# Regenerate the grub configuration file.
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
reboot

# Start the kdump service.
systemctl start kdump #Start kdump.
systemctl enable kdump #Set the kdump to start upon system startup.
  1. Запуск crash

Операция 1. Сохраните настройки ядра по умолчанию. Когда происходит жесткая блокировка или ошибка, срабатывает сигнал тревоги.

zh-cn_image_0000001372824637

Операция 2. Измените настройки. Следующие команды позволяют применить настройки лишь однократно и сделать их недействительными после перезапуска системы.

# Set a soft lock to trigger a panic.
echo 1 > /proc/sys/kernel/softlockup_panic

# Trigger a kernel panic when an out of memory (OOM) error occurs.
echo 1 > /proc/sys/vm/panic_on_oom

# A panic occurs when a process is hung.
echo 1 > /proc/sys/kernel/hung_task_panic

# Set the timeout interval of the hung task mechanism.
echo 60 > /proc/sys/kernel/kernel.hung_task_timeout_secs

Операция 3. Чтобы конфигурация действовала постоянно, запишите следующие параметры в файл /etc/sysctl.conf и выполните команду sysctl -p:

kernel.hung_task_panic=1
kernel.hung_task_timeout_secs=60
kernel.softlockup_panic=1
vm.panic_on_oom=1
  1. Анализ сбоя

Операция 1. Включите отладку crash.

Операция 2. Найдите файл vmcore, созданный в каталоге /var/crash.

Операция 3. Выполните следующую команду, чтобы запустить отладку crash:

crash {vmcore file} {debug kernel vmlinux}

zh-cn_image_0000001372748125

Команда отладки crash имеет формат command args. command указывает команду, которую нужно выполнить, а args — параметры, необходимые для некоторых команд отладки.

Команда Описание
help Выводит справочную информацию о команде. Вы можете просмотреть поддерживаемые команды или справочную информацию о конкретной команде. Например, выполните команду help bt.
bt Выводит информацию о стеке вызовов функций.
log Отображает буфер системных сообщений. Можно добавлять параметры, например log.
ps Отображает состояние процесса. > указывает, что процесс активен.
dis Дизассемблирует указанную функцию или адрес. Пример: **dis -l [func
mount Отображает информацию о текущей файловой системе.