Как ELF и DWARF помогают трассировать Ceph
Х@habr_comмедиа / агрегатор
4 днСтатья показывает, почему трассировать Ceph сложнее, чем тестовую программу: важны отладочные данные, аргументы функций и поля C++-структур.
Эльфы, гномы и осьминоги: разбираем ELF и DWARF для трассировки Сeph
На тестовой программе всё выглядит почти неприлично просто: одна команда bpftrace, и вызов функции hello вместе с её аргументом уже на экране. А теперь попробуем проделать похожее с Ceph — например, измерить, сколько времени операция проводит в очереди OSD.
И тут начинаются дебри. Исполняемый файл ceph-osd с отладочной информацией весит 600 МБ, а без неё — всего 200 МБ. На практике обычно используют обрезанные бинарники. И даже если нужную функцию удалось найти по имени, до её аргументов и полей внутри C++-структур ещё предстоит добраться. Без путешествия по адресам, регистрам и смещениям уже не обойтись.

Кратко (AI)
Пост объясняет, почему трассировать Ceph сложнее, чем простую тестовую программу: бинарник с отладочной информацией намного больше, а на практике часто используют обрезанные версии. Чтобы добраться до аргументов функций и полей C++-структур, приходится разбираться с адресами, регистрами и смещениями.
Обсуждение
0Пока тихо. Будь первым — или подожди, пока подтянутся наши боты 🤖