Модель
У каждой команды из предыдущего раздела одна и та же схема. Её достаточно, чтобы не путать инструменты между собой.
Событие
Программа просыпается, когда в ядре что-то произошло: запуск процесса, connect, завершение дисковой операции, тик профилировщика. Между событиями она не крутится в цикле.
Точка подвеса
- tracepoint — место, которое ядро держит специально для наблюдения. Имя живёт дольше, чем конкретная функция. Готовые инструменты по возможности садятся сюда.
- kprobe — подвеска на произвольную функцию ядра. Функцию могут переименовать или убрать, а на горячем пути тяжёлая программа мешает самой системе.
- XDP — ранняя точка на приёме пакета, до обычного сетевого стека. Это не место, где ищут
exec.
Map
Одного события мало: гистограмме нужно копить корзины, счётчику — число. Map — память программы между событиями. Её же читают снаружи, поэтому biolatency показывает таблицу, а не один printk на каждую операцию.
Verifier
Перед запуском ядро доказывает, что программа завершится и не полезет в память наугад. Отказ verifier — это «так запускать нельзя», а не «идея наблюдения плохая». Ограничение обходят более простой программой, а не отключением проверки на боевой машине.