P
Performance matters!
@troubleperf1.3K подп.
2.6Kпросмотров
7 апреля 2025 г.
Score: 2.9K
Профилируя процессы в Linux хорошо бы представлять оверхед от инструментов и выбирать подходящий под задачу. На примере работы утилиты dd сравним накладные расходы strace, perf и bpftrace (eBPF). Для начала запустим dd без оберток: # dd if=/dev/zero of=/dev/null bs=512 count=100k 102400+0 records in 102400+0 records out 52428800 bytes (52 MB, 50 MiB) copied, 0.0229283 s, 2.3 GB/s Скорость в 2.3GB/s будет эталонной, с которой и будем все сравнивать. strace # strace -c dd if=/dev/zero of=/dev/null bs=512 count=100k 102400+0 records in 102400+0 records out 52428800 bytes (52 MB, 50 MiB) copied, 1.73851 s, 30.2 MB/s ... Падение скорости в ~76 раз, неплохо поработали! perf # perf stat -e 'syscalls:sys_enter_' dd if=/dev/zero of=/dev/null bs=512 count=100k 102400+0 records in 102400+0 records out 52428800 bytes (52 MB, 50 MiB) copied, 0.0287921 s, 1.8 GB/s Замедление на треть уже и не выглядит чем-то страшным:) bpftrace # bpftrace -e 'tracepoint:syscalls:sys_enter_ /comm == "dd"/ { @[probe] = count(); }' -c '/usr/bin/dd if=/dev/zero of=/dev/null bs=512 count=100k' 102400+0 records in 102400+0 records out 52428800 bytes (52 MB, 50 MiB) copied, 0.0475401 s, 1.1 GB/s Хваленный eBPF дал оверхеда более чем в 2 раза! А говорили, что "eBPF это про скорость" :( —————————————————— С strace всё ясно: он через ptrace приостанавливает dd на каждом syscall, с переходом в kernel mode и обратно. Но в чем eBPF не справился? Давайте обсудим! Важно помнить: dd генерирует много системных вызовов, поэтому такой большой оверхед у strace. Цифры выше это скорее утрированный пример, но суть отражают верно.
2.6K
просмотров
1649
символов
Нет
эмодзи
Нет
медиа

Другие посты @troubleperf

Все посты канала →
Профилируя процессы в Linux хорошо бы представлять оверхед о — @troubleperf | PostSniper