Пин (компьютерная программа)
Разработчик(и) | Интел |
---|---|
Стабильная версия | 3.31 / 30 июня 2024 г. |
Операционная система | Линукс , Виндовс , МакОС |
Платформа | IA-32 , x86-64 , Intel Xeon Phi |
Тип | Инфраструктура инструментирования , Профайлер |
Лицензия | Запатентованная версия Pin предоставляется бесплатно для любого использования в соответствии с упрощенной лицензией на программное обеспечение Intel . |
Веб-сайт | www |
Pin — платформа для создания инструментов анализа. Инструмент вывода включает в себя процедуры инструментирования, анализа и обратного вызова . Подпрограммы инструментирования вызываются, когда код, который еще не был перекомпилирован, собирается быть запущенным, и позволяют вставить подпрограммы анализа. Подпрограммы анализа вызываются при запуске связанного с ними кода. Подпрограммы обратного вызова вызываются только при выполнении определенных условий или при возникновении определенного события. Pin предоставляет обширный интерфейс прикладного программирования (API) для инструментирования на разных уровнях абстракции, от одной инструкции до целого двоичного модуля. Он также поддерживает обратные вызовы для многих событий, таких как загрузка библиотеки, системные вызовы, сигналы/исключения и события создания потоков.
В 2020 году он получил награду Programming Languages Software Award от ACM SIGPLAN . [1]
Пин выполняет инструментирование, беря на себя управление программой сразу после ее загрузки в память. Затем перекомпилирует (JIT) небольшие участки двоичного кода, используя PIN-код, непосредственно перед его запуском. В перекомпилированный код добавляются новые инструкции для выполнения анализа. Эти новые инструкции взяты из Pintool. Для достижения минимально возможного времени работы и использования памяти используется большой набор методов оптимизации. По состоянию на июнь 2010 года средние базовые накладные расходы Pin составляют 30 процентов (без использования Pintool). [2]
Функции
[ редактировать ]Режимы приборов
[ редактировать ]Pin поддерживает два режима инструментирования: режим JIT и режим зонда. Режим JIT поддерживает все функции Pin, а режим Probe поддерживает ограниченный набор функций, но он намного быстрее и почти не увеличивает время работы программы. В режиме JIT используется JIT-компилятор для перекомпиляции всего программного кода и вставки инструментов, а в режиме Probe используются батуты кода для инструментов .
Независимость от платформы
[ редактировать ]инструмента Pin был разработан для переносимости , и, несмотря на JIT-компиляцию из одной ISA в одну и ту же ISA (и не использование единого промежуточного представления для всего кода), большинство его API не зависят от архитектуры и операционной системы . Он также был спроектирован так, чтобы быть переносимым, тщательно изолируя код, специфичный для платформы, от общего кода, что позволяло быстро адаптировать Pin к новым платформам. Примерно половина кода является общей, а остальная часть зависит либо от архитектуры, либо от операционной системы. [3]
Оптимизации
[ редактировать ]Pin использует множество методов для оптимизации кода инструментирования и анализа, используя такие методы, как встраивание , анализ живучести и интеллектуальное перераспределение регистров . Pin выполняет эти оптимизации автоматически, когда это возможно, без необходимости вставки пользователем дополнительного кода для включения встраивания. Естественно, некоторые оптимизации по-прежнему требуют подсказок пользователя, а некоторые структуры кода легче встроить, чем другие. Также используются прямое связывание фрагментов кода, метод, называемый связыванием трассировки , и согласование привязки регистров , которое сводит к минимуму разлив и переназначение регистров.
Простота использования
[ редактировать ]API и реализация Pin направлены на упрощение написания инструментов Pin. Компания Pin берет на себя полную ответственность за то, чтобы код инструментария инструмента Pin не влиял на состояние приложения. Кроме того, API позволяет инструментальному коду запрашивать множество фрагментов информации у Pin. Например, код инструментирования в инструменте вывода может использовать API-интерфейс Pin для получения адреса памяти, к которому осуществляется доступ с помощью инструкции, без необходимости подробного изучения инструкции.
Инструменты
[ редактировать ]Существует множество инструментов Pintools, которые используются для различных задач.
- Компоненты Intel Parallel Studio активно используют инструменты Pintools для отладки памяти, анализа производительности, анализа правильности многопоточности и подготовки к распараллеливанию.
- Эмулятор разработки программного обеспечения Intel — это инструмент, позволяющий разрабатывать приложения с использованием расширений набора команд, которые в настоящее время не реализованы на аппаратном уровне.
- CMP$IM — это профилировщик кэша, созданный с использованием pin. [4]
- PinPlay позволяет захватывать и детерминированное воспроизведение выполнения многопоточных программ под PIN-кодом. Регистрация выполнения программы помогает разработчикам преодолеть недетерминизм, присущий многопоточности. [5]
- Сам Pin поставляется со многими примерами инструментов, которые используют его возможности. Эти инструменты лицензируются по лицензии BSD.
Альтернативы инструменту «Закрепить»
[ редактировать ]Существует множество других инструментов для сбора данных об использовании ресурсов запущенных в системе программ, таких как Bell Lab инструмент Dyninst , инструмент и т. д. Инструмент Bell Lab использует технологию ремня, которая запускает инструмент для сбора ресурсов одновременно с программой. но этот инструмент совместим только с программами, которые позволяют другим программам запускаться одновременно с ними. [6] Кроме того, инструмент Dyninst использует двоичную перезапись исполняемых и реализуемых команд программы внутри программы для проверки использования ресурсов и является очень эффективным. Однако он очень нестабильен, поскольку это относительно новый инструмент, и он дает сбой в крупномасштабных программах. [7] Наконец, инструмент Intel Pin использует статический двоичный инструментарий и запускает программу как часть самой себя, отслеживая при этом все ее ресурсы. [8] Этот подход больше подходит для антивируса, поскольку он может легко запускать все процессы самостоятельно и уничтожать программы, если они достигают максимального выделенного лимита, определенного антивирусом.
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ «Награда за программное обеспечение в области языков программирования» . www.sigplan.org .
- ^ Анализ параллельных программ с помощью Pin
- ^ Значок: Создание индивидуальных инструментов анализа программ с помощью динамического инструментария.
- ^ CMP$im: симулятор многоядерного кэша на лету на основе выводов
- ^ PinPlay: платформа для детерминированного воспроизведения и воспроизводимого анализа параллельных программ.
- ^ Гупта, Чандрашекхар (2007). «Создание безопасных продуктов и решений». Технический журнал Bell Labs . 12 (3): 21–38. дои : 10.1002/bltj.20247 . S2CID 30412754 .
- ^ Ли, Шульц (2007). «Динамический двоичный инструментарий и агрегирование данных в крупномасштабных системах». Международный журнал параллельного программирования . 35 (3): 207–232. дои : 10.1007/s10766-007-0036-3 . S2CID 6653468 .
- ^ Бах, М.; Чарни, М.; Кон, Р.; Демиховский Е.; Девор, Т.; Хейзелвуд, К.; Джалил, А.; Лук, Чи-Геунг; Лайонс, Г. (март 2010 г.). «Анализ параллельных программ с помощью PIN». Компьютер . 43 (3): 34–41. дои : 10.1109/MC.2010.60 . ISSN 0018-9162 . S2CID 15155077 .
Ссылки
[ редактировать ]- Моше Бах; Марк Чарни; Роберт Кон; Елена Демиховская; Теви Девор; Ким Хэзелвуд; Аамер Джалил; Чи-Геунг Лук; Гейл Лайонс; Хариш Патил и Ади Тал (март 2010 г.). «Анализ параллельных программ с помощью PIN» . Компьютер . 43 (3). ИИЭР: 34–41. дои : 10.1109/mc.2010.60 . S2CID 15155077 . Архивировано из оригинала 29 декабря 2010 г. Проверено 5 июля 2010 г.
- Чи-Кеунг Лук; Роберт Кон; Роберт Мут; Хариш Патил; Артур Клаузер; Джефф Лоуни; Стивен Уоллес; Виджей Джанапа Редди и Ким Хейзелвуд (июнь 2005 г.). «Значок: создание индивидуальных инструментов анализа программ с помощью динамического инструментирования» (PDF) . Материалы конференции ACM SIGPLAN 2005 года по проектированию и реализации языков программирования . Чикаго, Иллинойс, США: ACM. стр. 190–120.
- Алексей Скалецкий; Теви Девор; Надав Чачмон; Роберт Кон; Ким Хейзелвуд; Владимир Владимиров; Моше Бах (апрель 2010 г.). «Динамический программный анализ приложений Microsoft Windows» (PDF) . Международный симпозиум по анализу производительности программного обеспечения и систем (ISPASS) . Уайт-Плейнс, штат Нью-Йорк. стр. 2–12.
Внешние ссылки
[ редактировать ]- инструмента динамического двоичного инструментирования. Pin: домашняя страница
- Pinheads — список рассылки для сообщества пользователей Pin.
- Обнаружение ошибок чтения перед записью (а-ля Valgrind)
- Pin++ , фреймворк для создания Pintools.