У меня есть трассировщик ввода-вывода, который использует eBPF и отслеживает операции чтения и записи на разных уровнях стека ввода-вывода (VFS, файловая система, кэш страниц и блок).
Я хочу отследить пару тестов (FIO, Postmark, YCSB, TeraSort), и мой трассировщик может фильтровать события по команде или нескольким командам, указанным в качестве аргументов.
Проблема у меня это на уровне блоков, где я хочу отслеживать события, происходящие только из тестов, а не из других приложений, но некоторые из этих тестов заставляют блоки ввода-вывода выполняться другими командами, такими как kworker или btrfs-transaction , я заметил это, потому что пытался отслеживать всю систему без фильтрации и ясно вижу повышенное количество событий блокировки при запуске теста по сравнению с системой в режиме ожидания.
Обратите внимание, что не все тесты ведут себя подобным образом, поскольку мне удалось без проблем отследить FIO.
Я надеюсь найти способ узнать происхождение операций ввода-вывода на уровне блоков, которые выполняются процессами kworker или другими, чтобы избежать отслеживания каждого блока ввода-вывода. (или любое другое решение моей проблемы)
Я пробовал различные kprobe, кроме submit_bio, но при их использовании все равно сталкиваюсь с той же проблемой.
Подробнее здесь: https://stackoverflow.com/questions/786 ... using-ebpf