Perf (Linux) - Perf (Linux)

Perf
Репозиторийhttps://github.com/torvalds/linux/tree/master/tools/perf
Написано вC
Операционная системаЯдро Linux
ТипМониторинг производительности и тестирование
ЛицензияGNU GPL
Интернет сайтперф.wiki.kernel.org/индекс.php/Главный_Страница

перф (иногда называют perf_events[1] или же инструменты perfизначально Счетчики производительности для Linux, PCL)[2] это анализ производительности инструмент в Linux, Доступна с Ядро Linux версия 2.6.31 в 2009 году.[3] Пространство пользователя управляющая утилита, названная перф, доступен из командная строка и предоставляет ряд подкоманды; он способен к статистическому профилированию всей системы (как ядра, так и кода пользователя).

Он поддерживает счетчики производительности оборудования, точки трассировки, программные счетчики производительности (например, hrtimer) и динамические зонды (например, kprobes или uprobes).[4] В 2012 году два IBM инженеры признали perf (вместе с OProfile ) как один из двух наиболее часто используемых счетчик производительности инструменты профилирования в Linux.[5]

Выполнение

Интерфейс между утилитой perf и ядром состоит только из одного системный вызов и делается через дескриптор файла и отображенная область памяти.[6] В отличие от LTTng или более старые версии профиль, не обслуживается демоны необходимы, поскольку большая часть функций интегрирована в ядро. Утилита perf выгружает необработанные данные из сопоставленного буфера на диск, когда буфер заполняется. По словам Р. Витилло (LBNL ), профилирование, выполняемое с помощью perf, требует очень малых накладных расходов.[6]

По состоянию на 2010 г., архитектуры, обеспечивающие поддержку аппаратных счетчиков, включают x86, PowerPC 64, UltraSPARC (III и IV ), РУКА (v5, v6, v7, Cortex-A8 и -A9 ), Альфа EV56 и SuperH.[4] Использование записей последней ветки,[7] а отслеживание веток реализация доступна в Intel Процессоров с Pentium 4, доступен как патч.[6] Начиная с версии 3.14 Основная линия ядра Linux, выпущенный 31 марта 2014 г., perf также поддерживает рабочий предел средней мощности (RAPL) для измерения энергопотребления, который доступен как функция некоторых процессоров Intel.[8][9][10]

Perf изначально поддерживается во многих популярных дистрибутивах Linux, включая Red Hat Enterprise Linux (с версии 6, выпущенной в 2010 году)[11] и Debian в пакете linux-tools-common (так как его Сжимать версия выпущена в 2011 году).[12]

Подкоманды

perf используется с несколькими подкомандами:

  • стат: измерить общее количество событий для отдельной программы или для системы в течение некоторого времени
  • верх: верх -подобный динамический просмотр самых горячих функций
  • записывать: измерять и сохранять данные выборки для одной программы[13]
  • отчет: анализировать файл, сгенерированный функцией perf record; может создавать плоский или графический профиль.[13]
  • аннотировать: аннотировать источники или сборку
  • расписание: отслеживание / измерение действий и задержек планировщика[14]
  • список: список доступных событий

Критика

Документация по perf не очень подробная (по состоянию на 2014 год); например, он не документирует большинство событий и не объясняет их псевдонимы (часто внешние инструменты используются для получения имен и кодов событий[15]).[16] Инструменты Perf также не могут профилировать на основе истинного времени настенных часов.[16]

Безопасность

Подсистема perf ядер Linux от 2.6.37 до 3.8.8 и ядра RHEL6 2.6.32 содержала уязвимость безопасности (CVE -2013-2094 ), который был использован для получения привилегий root локальным пользователем.[17][18] Проблема заключалась в использовании неправильного типа (32-битное int вместо 64-битного) в пути кода проверки event_id.[19]

Смотрите также

Рекомендации

  1. ^ Винс Уивер, Неофициальная веб-страница Linux Perf Events
  2. ^ Особенности и накладные расходы на событие Linux perf // Семинар FastPath 2013, Винс Уивер
  3. ^ Джейк Эдж, Perfcounters добавлены в основную линию, LWN 1 июля 2009 г., "счетчики перфокартона включены в основную ветку во время недавно завершенного окна слияния 2.6.31"
  4. ^ а б Арнальдо Карвалью де Мело, Инструменты New Linux 'perf', презентация Linux Kongress, сентябрь 2010 г.
  5. ^ А. Занелла, Р. Арнольд. Оцените производительность Linux на POWER. Анализируйте производительность с помощью инструментов Linux, 12 июня 2012 г. // Техническая библиотека IBM DeveloperWorks
  6. ^ а б c Роберто А. Витилло (LBNL ). РАЗРАБОТКИ ЭФФЕКТИВНЫХ ИНСТРУМЕНТОВ, 16 июня 2011 г., презентация с конференции «Будущие вычисления в физике элементарных частиц»
  7. ^ Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3B: Руководство по системному программированию, часть 2. Intel. Июнь 2009. с. 19-2 т. 3.
  8. ^ Джейк Эдж (9 апреля 2014 г.). «Множество новых функций производительности». LWN.net. Получено 2014-04-22.
  9. ^ Джейкоб Пэн (2013-04-02). "Драйвер RAPL (ограничение средней мощности)". LWN.net. Получено 2014-04-22.
  10. ^ "kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux". Git.kernel.org. 2014-01-20. Получено 2014-03-31.
  11. ^ 6.4. Счетчики производительности для инструментов Linux (PCL) и perf // Руководство разработчика RHEL
  12. ^ "Debian - Подробная информация о пакете linux-tools-2.6.32 в сжатом виде". Packages.debian.org. Получено 2014-03-31.
  13. ^ а б Урс Фесслерформат файла perf В архиве 2012-12-14 в Wayback Machine, ЦЕРН OpenLab, 2011
  14. ^ Инго Мольнар, 'perf sched': Утилита для сбора, измерения и анализа задержек и поведения планировщика., 17 сен 2009
  15. ^ Как отслеживать весь спектр событий производительности процессора // Боян Николич, 2012
  16. ^ а б Роберт Хаас (PostgreSQL), perf: хорошее, плохое, уродливое // 06 июня 2012 г.
  17. ^ Майкл Ларабель (15.05.2013). «Использована новая уязвимость ядра Linux». Фороникс.
  18. ^ корбет (15.05.2013). «Локальная корневая уязвимость в ядре». LWN.
  19. ^ Джо Дамато (20 мая 2013 г.). «Более пристальный взгляд на недавнюю ошибку повышения привилегий в Linux (CVE-2013-2094)».

внешняя ссылка