Пин (компьютерная программа)

Приколоть
Разработчик(и)Интел
Стабильный релиз
3.31 / 30 июня 2024 г. ( 2024-06-30 )
Операционная системаLinux , Windows , MacOS
ПлатформаIA-32 , x86-64 , Intel Xeon Phi
ТипИнструментарий , Профайлер
ЛицензияЗапатентованный , PIN-код предоставляется бесплатно для любого использования в соответствии с упрощенной лицензией Intel на программное обеспечение .
Веб-сайтwww.intel.com/software/pintool

Pin — это платформа для создания инструментов анализа. Инструмент pin включает в себя процедуры инструментирования, анализа и обратного вызова . Процедуры инструментирования вызываются, когда код, который еще не был перекомпилирован, должен быть запущен, и позволяют вставлять процедуры анализа. Процедуры анализа вызываются, когда запускается связанный с ними код. Процедуры обратного вызова вызываются только при выполнении определенных условий или при возникновении определенного события. Pin предоставляет обширный интерфейс прикладного программирования (API) для инструментирования на разных уровнях абстракции, от одной инструкции до целого двоичного модуля. Он также поддерживает обратные вызовы для многих событий, таких как загрузка библиотек, системные вызовы, сигналы/исключения и события создания потоков.

В 2020 году он получил премию Programming Languages ​​Software Award от ACM SIGPLAN . [1]

Pin выполняет инструментирование, беря под контроль программу сразу после ее загрузки в память. Затем точно в срок перекомпилирует (JIT) небольшие разделы двоичного кода с помощью pin непосредственно перед его запуском. Новые инструкции для выполнения анализа добавляются к перекомпилированному коду. Эти новые инструкции поступают из Pintool. Большой набор методов оптимизации используется для получения минимально возможного времени выполнения и накладных расходов на использование памяти. По состоянию на июнь 2010 года средние базовые накладные расходы Pin составляют 30 процентов (без запуска pintool). [2]

Функции

Режимы работы приборов

Pin поддерживает два режима инструментирования, называемые режимом JIT и режимом Probe. Режим JIT поддерживает все функции Pin, в то время как режим Probe поддерживает ограниченный набор функций, но работает намного быстрее, практически не добавляя накладных расходов к времени выполнения программы. Режим JIT использует компилятор just-in-time для перекомпиляции всего программного кода и вставки инструментирования, в то время как режим Probe использует трамплины кода для инструментирования.

Независимость от платформы

Pin был разработан для переносимости инструмента , и несмотря на JIT-компиляцию из одной ISA в ту же ISA (и не используя единое промежуточное представление для всего кода), большинство его API не зависят от архитектуры и операционной системы . Он также был разработан так, чтобы быть переносимым, тщательно изолируя платформенно-зависимый код от универсального кода, что позволяет быстро адаптировать Pin к новым платформам. Примерно половина кода является универсальной, а остальная часть зависит либо от архитектуры, либо от ОС. [3]

Оптимизации

Pin использует множество методов для оптимизации кода инструментирования и анализа, используя такие методы, как встраивание , анализ жизнеспособности и интеллектуальное выталкивание регистров . Pin выполняет эти оптимизации автоматически, когда это возможно, без необходимости для пользователей вставлять какой-либо дополнительный код для встраивания. Естественно, некоторые оптимизации по-прежнему требуют подсказок пользователя, и некоторые структуры кода легче встраивать, чем другие. Также используются прямая ссылка на разделы кода, сжатые с помощью jit, метод, называемый трассировкой связывания , и согласование привязки регистров , которое минимизирует выталкивание и переназначение регистров.

Простота использования

API и реализация Pin нацелены на то, чтобы сделать инструменты pin простыми в написании. Pin полностью отвечает за то, чтобы код инструментирования из инструмента pin не влиял на состояние приложения. Кроме того, API позволяет коду инструментирования запрашивать множество фрагментов информации из Pin. Например, код инструментирования в инструменте pin может использовать API Pin для получения адреса памяти, к которому обращается инструкция, без необходимости подробного изучения инструкции.

Инструменты

Существует множество Pintools, которые используются для различных задач.

  • Компоненты Intel Parallel Studio активно используют pintools для отладки памяти, анализа производительности, анализа корректности многопоточности и подготовки к распараллеливанию.
  • Intel Software Development Emulator — это инструмент, позволяющий разрабатывать приложения с использованием расширений набора инструкций, которые в настоящее время не реализованы в оборудовании.
  • CMP$IM — это профилировщик кэша, созданный с использованием pin. [4]
  • PinPlay позволяет захватывать и детерминированно воспроизводить выполнение многопоточных программ под pin. Захват выполнения программы помогает разработчикам преодолеть недетерминизм, присущий многопоточности. [5]
  • Pin сам по себе поставляется с множеством примеров инструментов, которые используют его возможности. Эти инструменты лицензированы по лицензии типа BSD.

Альтернативы инструменту Pin

Существует множество других инструментов для сбора данных об использовании ресурсов запущенных программ в системе, например, инструмент Strapon от Bell Lab и инструмент Dyninst и т. д. Инструмент Bell Lab использует технологию Strap On, которая запускает инструмент для сбора ресурсов одновременно с программой, но этот инструмент совместим только с программами, которые позволяют другим программам работать одновременно с ними. [6] Кроме того, инструмент Dyninst использует двоичную перезапись исполняемых и реализуемых команд программы внутри программы для проверки использования ресурсов и является очень эффективным. Однако он очень нестабилен, поскольку является относительно новым инструментом и дает сбой в крупных программах. [7] Наконец, инструмент Intel Pin использует статическую двоичную инструментацию и запускает программу как часть себя, отслеживая все ее ресурсы. [8] Этот подход больше подходит для антивируса, поскольку он может легко запускать все процессы под собой и может завершать программы, если они достигают максимального выделенного предела, определенного антивирусом.

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

Примечания

  1. ^ «Премия за лучшее программное обеспечение для языков программирования». www.sigplan.org .
  2. ^ Анализ параллельных программ с помощью Pin
  3. ^ Pin: Создание специализированных инструментов анализа программ с помощью динамического инструментирования
  4. ^ CMP$im: многоядерный кэш-симулятор на основе выводов «на лету»
  5. ^ PinPlay: фреймворк для детерминированного воспроизведения и воспроизводимого анализа параллельных программ
  6. ^ Гупта, Чандрашекхар (2007). «Создание безопасных продуктов и решений». Bell Labs Technical Journal . 12 (3): 21-38. doi :10.1002/bltj.20247. S2CID  30412754.
  7. ^ Ли, Шульц (2007). «Динамическое двоичное инструментирование и агрегация данных в крупномасштабных системах». Международный журнал параллельного программирования . 35 (3): 207–232. doi :10.1007/s10766-007-0036-3. S2CID  6653468.
  8. ^ Бах, М.; Чарни, М.; Кон, Р.; Демиховский, Э.; Девор, Т.; Хейзелвуд, К.; Джалил, А.; Лук, Чи-Кеунг; Лайонс, Г. (март 2010 г.). «Анализ параллельных программ с помощью PIN». Computer . 43 (3): 34–41. doi :10.1109/MC.2010.60. ISSN  0018-9162. S2CID  15155077.

Ссылки

  • Moshe Bach; Mark Charney; Robert Cohn; Elena Demikhovsky; Tevi Devor; Kim Hazelwood; Aamer Jaleel; Chi-Keung Luk; Gail Lyons; Harish Patil & Ady Tal (март 2010 г.). "Analyzing Parallel Programs With Pin". Computer . 43 (3). IEEE: 34–41. doi :10.1109/mc.2010.60. S2CID  15155077. Архивировано из оригинала 29.12.2010 . Получено 05.07.2010 .
  • Чи-Кенг Люк; Роберт Кон; Роберт Мут; Хариш Патил; Артур Клаузер; Джефф Лоуни; Стивен Уоллес; Виджай Джанапа Редди и Ким Хейзелвуд (июнь 2005 г.). "Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation" (PDF) . Труды конференции ACM SIGPLAN 2005 г. по проектированию и реализации языков программирования . Чикаго, Иллинойс, США: ACM. стр. 190–120.
  • Алекс Скалецкий; Теви Девор; Надав Чачмон; Роберт Кон; Ким Хейзелвуд; Владимир Владимиров; Моше Бах (апрель 2010 г.). «Динамический программный анализ приложений Microsoft Windows» (PDF) . Международный симпозиум по анализу производительности программного обеспечения и систем (ISPASS) . Уайт-Плейнс, Нью-Йорк. С. 2–12.
  • Pin: домашняя страница инструмента динамического бинарного инструментирования
  • Pinheads, список рассылки для сообщества пользователей Pin
  • Обнаружение ошибок чтения перед записью (а-ля Valgrind)
  • Pin++, фреймворк для создания Pintools
Получено с "https://en.wikipedia.org/w/index.php?title=Pin_(компьютерная_программа)&oldid=1237088825"