ftrace#
- ftrace: инструмент отладки для пространства ядра Linux. Ядро предоставляет события для трассировки. ftrace позволяет захватывать события, чтобы можно было просмотреть эти интуитивно понятные события и осуществить трассировку функций ядра.
- Конфигурация и использование 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.
- Доступные трассировщики
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
- Трассировка входных параметров функций ядра
Выполните трассировку mmap, соответствующего системному вызову do_mmap. Выведите входной параметр addr.
# 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.
- Трассировка вызовов функций
# 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.
strace#
Команда strace представляет собой инструмент диагностики и отладки. Вы можете использовать команду strace для анализа системных вызовов и передачи сигналов приложений в целях решения проблем или изучения процесса выполнения приложений.
Можно выполнить команду strace -h, чтобы просмотреть функции, предоставляемые strace.
Чаще всего она используется для трассировки команды xx, трассировки вилок, отображения времени и вывода результата в файл output.
strace -f -tt -o output xx
kdump#
- Принципы crash/kdump
kdump — это моментальный снимок состояния памяти ОС в определенный момент времени. Он помогает специалистам по эксплуатации и сопровождению выполнять отладку и анализировать причину сбоя системы. kdump обычно используется, когда возникает сбой системы и сигнал тревоги ядра.
Процедура имеет следующий вид.
- Установка и настройка связанных инструментов
# 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
# 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.
- Запуск crash
Операция 1. Сохраните настройки ядра по умолчанию. Когда происходит жесткая блокировка или ошибка, срабатывает сигнал тревоги.
Операция 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. Включите отладку crash.
Операция 2. Найдите файл vmcore, созданный в каталоге /var/crash.
Операция 3. Выполните следующую команду, чтобы запустить отладку crash:
crash {vmcore file} {debug kernel vmlinux}
Команда отладки crash имеет формат command args. command указывает команду, которую нужно выполнить, а args — параметры, необходимые для некоторых команд отладки.
Команда | Описание |
---|---|
help | Выводит справочную информацию о команде. Вы можете просмотреть поддерживаемые команды или справочную информацию о конкретной команде. Например, выполните команду help bt. |
bt | Выводит информацию о стеке вызовов функций. |
log | Отображает буфер системных сообщений. Можно добавлять параметры, например log. |
ps | Отображает состояние процесса. > указывает, что процесс активен. |
dis | Дизассемблирует указанную функцию или адрес. Пример: **dis -l [func |
mount | Отображает информацию о текущей файловой системе. |