Рейтинг: 36
не верифицирован
Всего отзывов: 0
  • Работ в портфолио: 1
  • Типовых услуг: 0
  • Работ на продажу: 1
  • Зарегистрирован: 19.06.2025
Был на сайте:

KernelScope — eBPF-профилировщик латентности Linux-процессов без модификации кода приложения

Используемые навыки:

Описание

Современные production-системы страдают от латентности, причины которой сложно диагностировать стандартными
инструментами: strace создаёт огромный overhead, perf требует глубокого погружения, а APM-агенты требуют изменений в коде приложения. При этом команды тратят часы на поиск узких мест — будь то длинные системные вызовы, ожидание на блокировках или I/O-stall'ы.

KernelScope решает эту задачу: инструмент в реальном времени показывает, какой процесс теряет время и где именно — на CPU, вне CPU, в syscall, в I/O или в lock contention — не требуя ни изменений в коде, ни деплоя агентов, ни прав на модификацию целевого процесса. Целевая аудитория — backend-инженеры, SRE и performance-специалисты, которым нужна диагностика на уровне ядра с минимальным порогом входа.

Решение

Ядро инструмента построено на eBPF + libbpf + CO-RE: BPF-программы цепляются к tracepoint'ам ядра
(sys_enter, sys_exit, sched_switch, sched_process_exec/exit) и передают события в userspace через
BPF ring buffer — это даёт упорядоченный поток событий с минимальными потерями и без per-CPU буферов.

Для стеков использован bpf_get_stackid() с BPF_MAP_TYPE_STACK_TRACE, для переносимости между
версиями ядра — CO-RE поверх BTF, для встраивания BPF-байткода в бинарь — bpf skeleton
(bpftool gen skeleton). Итог: один исполняемый файл без внешних BPF-зависимостей в рантайме.

Userspace написан на C++23: отдельные слои для коллектора, агрегатора (скользящие окна,
гистограммы, p50/p95/p99), символизатора (ELF symtab + /proc/pid/maps) и TUI на базе FTXUI.
Классификация задержек — детерминированная: on_cpu, off_cpu, syscall_blocked, io_wait,
lock_wait, unknown_wait.

Дополнительно реализован record/replay — бинарный формат .ksr позволяет воспроизводить
trace-сессии без root и без живого ядра, что критично для тестирования. Экспорт поддерживает
JSON, OpenTelemetry-compatible spans и Prometheus-style метрики.

Результат

Получился production-ready CLI/TUI-инструмент (~5000 строк кода, C + C++23): overhead на умеренной
нагрузке — менее 2–3%, потребление памяти — до 36 МБ RSS, старт — меньше секунды.

Инструмент покрыт 44 unit-тестами и 22 интеграционными тестами с реальными workload'ами
(cpu_stress, io_stress, futex_stress, net_stress). Benchmark-suite замеряет overhead и утечки
памяти в 5 сценариях — все проходят с 0 dropped events.

На практике применяется для диагностики production-процессов без остановки сервиса: достаточно
запустить kscope top --pid <N> и через несколько секунд видна полная картина задержек с привязкой
к стекам. Экспорт в JSON/Prometheus позволяет интегрировать снимки в существующий
observability-пайплайн без дополнительной инфраструктуры.

Ссылки на примеры реализации

 github.com/MatthewAura444/KernelScope

Презентация проекта

9af34fba-83b9-43d8-adcd-2d1740093f6d.png

Оценили проект:

0