Как стать автором
Обновить
94.71
ITSumma
Эксперты в производительности

Linux ”perf” ускорили в 60 раз

Время на прочтение2 мин
Количество просмотров14K
Многие инструменты для визуализации производительности под Linux типа FlameGraph интенсивно используют профайлер perf из ядра Linux. В частности, такие «пламеграфы» наглядно показывают, сколько времени программа тратит на выполнение различных подпрограмм.

Для записи логов нужно или обернуть программу в вызов perf record, или инструмент просто подключается к текущему процессу. В любом случае затем мы прогоняем записанные данные через perf script, а несколько перловых скриптов генерируют «пламеграфы» из этих данных.

Проблема только в том, что perf record очень медленно работает под Debian по юридическим причинам. Всем разработчикам Linux это известно, но они ничего не могут сделать. Поэтому независимый программист Тони Гарнок-Джонс (Tony Garnock-Jones) выпустил патч, который ускоряет perf примерно в 60 раз.

Дело в том, что программа perf лицензирована только под GPL v2 (не 2+, а конкретно 2), а необходимая для её работы библиотека libbfd — инструмент GNU, выпущенный под GPL v3+.

Так что мейнтейнеры Debian не имеют права собирать perf с библиотекой libbfd для публичного дистрибутива.

В результате perf запускает новый процесс для каждого поиска адреса (функция addr2line) вместо того, чтобы вызвать библиотеку, что приводит к очень медленной работе. Баг задокументирован.

Тони Гарнок-Джонс — один из тех, кому нужна быстрый perf под Debian. Видя бессилие мейнтейнеров, он реализовал идею Стейнара Гундерсона из списка рассылки @bugs.debian.org, который предложил написать для addr2line долгоживущий процесс типа talk-through-a-pipe, примерно так:

        scnprintf(cmd, sizeof(cmd), "addr2line -e %s %016"PRIx64,
                  dso_name, addr);

        fp = popen(cmd, "r");

Это сработало.

Было:

$ time /usr/bin/perf_5.10 script -i perf.data >/dev/null

real    12m51.499s
user    11m57.455s
sys     0m53.821s

Стало:

$ time perf script -i perf.data >/dev/null

real    0m11.335s
user    0m11.047s
sys     0m0.309s

Ускорение примерно в 68 раз. То есть выполнение perf script вместо нескольких минут теперь занимает несколько секунд.

Скачать патч можно здесь.

Довольно иронично, что RMS задумал копилефт именно для повторного использования кода, а здесь как раз свободная лицензия этому «помешала». Но это ни в коему случае не аргумент против свободных лицензий, а скорее наоборот — позитивная демонстрация их вирусной эффективности.
Теги:
Хабы:
Всего голосов 26: ↑24 и ↓2+34
Комментарии21

Другие новости

Информация

Сайт
www.itsumma.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
ITSumma