Мы в компании «СерверПро» — большой хостинг-провайдер, у нас целых 400 физических серверов. Наша команда из 6 инженеров поддерживала всю эту махину, используя привычные инструменты вроде top, iotop, tcpdump и strace. И вот однажды мы столкнулись с проблемой: на одном из серверов, где крутилось 200 контейнеров, периодически начинала проседать сеть. Представляете, tcpdump в таких случаях генерировал гигабайты трафика, а strace просто тормозил процессы аж на 40%!
eBPF, или extended Berkeley Packet Filter, — это такая классная технология, которая даёт нам возможность запускать изолированные программы прямо внутри ядра Linux. Самое крутое, что для этого не нужно ни менять исходники ядра, ни перезагружать систему! При этом, прежде чем загрузиться, каждая eBPF-программа обязательно проходит верификацию ядром — и именно это служит нашей гарантией безопасности.
| Инструмент | Overhead | Нужен перезапуск? | Гранулярность |
|---|---|---|---|
| strace | 30-50% | Да (attach) | Syscall уровень |
| tcpdump | 10-20% | Нет | Пакетный уровень |
| perf | 5-15% | Нет | CPU/память |
| eBPF/bpftrace | 1-3% | Нет | Любой уровень ядра |
Чем eBPF хорош именно для production:
- Минимальный overhead — 1-3% vs 30-50% у strace
- Безопасность — верификатор ядра проверяет каждую программу перед запуском
- Динамическая загрузка — подключайте и отключайте трейсинг на лету
- Универсальность — от трейсинга syscall до фильтрации сетевых пакетов и профилирования CPU

Комментарии 0