Часто используемые инструменты
ftrace
ftrace — инструмент отладки для пространства ядра Linux.
Ядро предоставляет события для трассировки.
ftrace позволяет захватывать события, чтобы можно было просмотреть эти интуитивно понятные события и осуществить трассировку функций ядра.
Чтобы использовать ftrace, нужно скомпилировать его зависимости в ядро.
По умолчанию openEuler выполняет компиляцию средства ftrace.
Если средство ftrace не включено, его можно включить, выбрав в menuconfig ().
Кроме того, нужно скомпилировать debugfs, выбрав ().
Настройка функции ftrace
ftrace предоставляет интерфейсы доступа для пользовательского пространства через debugfs.
После настройки debugfs в ядре создается каталог /sys/kernel/debug.
debugfs подключается к этому каталогу.
Если ядро поддерживает элементы конфигурации, связанные с ftrace, каталог tracing создается в debugfs.
debugfs подключается к этому каталогу.
Пример части содержимого каталога /sys/kernel/debug/tracing/:
-r--r-----. 1 root root 0 Jan 1 1970 available_events
-r--r-----. 1 root root 0 Jan 1 1970 available_filter_functions
-r--r-----. 1 root root 0 Jan 1 1970 available_tracers
-r--r-----. 1 root root 0 Jan 1 1970 buffer_percent
-rw-r-----. 1 root root 0 Jan 1 1970 buffer_size_kb
-r--r-----. 1 root root 0 Jan 1 1970 buffer_total_size_kb
-rw-r-----. 1 root root 0 Jan 1 1970 current_tracer
-rw-r-----. 1 root root 0 Jan 1 1970 dynamic_events
...
Знакомство с интерфейсом 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.
-
Доступные трассировщики:
cat available_tracersПример вывода:
timerlat osnoise hwlat blk function_graph wakeup_dl wakeup_rt wakeup function nop -
События трассировки
# 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Пример вывода:
# tracer: nop # # etries-in-buffer/entries-written: 1/1 #P:96 # # _-----=> irqs-off # / _----=> need resched # | / _---=> hardirq/sofirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | kworker/0:0-5 [000] d... 242677.832248: arm_event: cpu: 73; -
Трассировка входных параметров функций ядра
Выполните трассировку mmap, соответствующего системному вызову
do_mmap.unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf)Выведите входной параметр
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.Пример вывода:
cat-595914 [019] d... 3018798.114650: probe1: (do_mmap+0x0/0x1f0) addr=0xaaaadf820000 cat-595914 [019] d... 3018798.114662: probe1: (do_mmap+0x0/0x1f0) addr=0xaaaadf83f000 cat-595914 [019] d... 3018798.114674: probe1: (do_mmap+0x0/0x1f0) addr=0x0 cat-595914 [019] d... 3018798.114680: probe1: (do_mmap+0x0/0x1f0) addr=0xffffbe621000 -
Трассировка вызовов функций
# 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.Пример вывода:
# tracer: function graph # # CPU DURATION FUNCTION CALLS # | | | | | | | 65) ==========> | 65) | gic_handle_irq() { 65) | do_read_iar() { 65) 0.460 us | gic_read_iar(); 65) 1.550 us | } 65) | __handle_domain_irq() { 65) | irq_enter() { 65) | irq_enter_rcu() { 65) | tick_irq_enter() { 65) 0.380 us | tick_check_oneshot_broadcase_this_cpu(); 65) | ktime_get() { 65) 0.570 us | arch_counter_read(); 65) 1.250 us | }
strace
Команда strace представляет собой инструмент диагностики и отладки.
Вы можете использовать команду strace для анализа системных вызовов и передачи сигналов приложений в целях решения проблем или изучения процесса выполнения приложений.
Можно выполнить команду strace -h, чтобы просмотреть функции, предоставляемые strace.
Чаще всего она используется для трассировки команды xx, трассировки вилок, отображения времени и вывода результата в файл output.
strace -f -tt -o output xx
kdump
Принципы crash/kdump
kdump — это моментальный снимок состояния памяти ОС в определенный момент времени. Он помогает специалистам по эксплуатации и сопровождению выполнять отладку и анализировать причину сбоя системы. kdump обычно используется, когда возникает сбой системы и сигнал тревоги ядра.
Процедура имеет следующий вид.

-
Установка и настройка связанных инструментов:
yum install kernel-debuginfo-$(uname -r) kexec-tools crash -y -
В параметры загрузки ядра добавьте параметр
crashkernelсо значением1024M. Для этого:-
В конфигурационном файле
/etc/default/grubв значение параметраGRUB_CMDLINE_LINUXдобавьте строкуcrashkernel=1024M. -
Обновите настройки GRUB:
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
-
-
Включите автоматический запуск службы
kdump:systemctl enable kdump -
Перезагрузите компьютер.
Запуск crash
Операция 1
Сохраните настройки ядра по умолчанию.
sysctl -a | grep panic
Когда происходит жесткая блокировка или ошибка, срабатывает сигнал тревоги:
Операция 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
Анализ сбоя
-
Включите отладку crash.
-
Найдите файл
vmcore, созданный в каталоге/var/crash. -
Выполните следующую команду, чтобы запустить отладку crash:
crash {vmcore file} {debug kernel vmlinux}
Команда отладки crash имеет формат command args.
command указывает команду, которую нужно выполнить, а args — параметры, необходимые для некоторых команд отладки.
- help
-
Выводит справочную информацию о команде.
Вы можете просмотреть поддерживаемые команды или справочную информацию о конкретной команде. Например, выполните команду:
help bt - bt
-
Выводит информацию о стеке вызовов функций.
- log
-
Отображает буфер системных сообщений.
Можно добавлять параметры, например
log. - ps
-
Отображает состояние процесса.
>указывает, что процесс активен. - dis
-
Дизассемблирует указанную функцию или адрес.
Пример:
dis -l [func | addr] - mount
-
Отображает информацию о текущей файловой системе.