Pin es una plataforma para crear herramientas de análisis. Una herramienta pin comprende rutinas de instrumentación, análisis y devolución de llamadas . Las rutinas de instrumentación se llaman cuando se va a ejecutar un código que aún no se ha recompilado y permiten la inserción de rutinas de análisis. Las rutinas de análisis se llaman cuando se ejecuta el código asociado a ellas. Las rutinas de devolución de llamadas solo se llaman cuando se cumplen condiciones específicas o cuando se ha producido un determinado evento. Pin proporciona una amplia interfaz de programación de aplicaciones (API) para la instrumentación en diferentes niveles de abstracción, desde una instrucción hasta un módulo binario completo. También admite devoluciones de llamadas para muchos eventos, como cargas de bibliotecas, llamadas al sistema, señales/excepciones y eventos de creación de subprocesos.
En 2020 recibió el premio Programming Languages Software Award de ACM SIGPLAN . [1]
Pin realiza la instrumentación tomando el control del programa justo después de que se carga en la memoria. Luego, recompila en tiempo real (JIT) pequeñas secciones del código binario utilizando pin justo antes de que se ejecute. Se agregan nuevas instrucciones para realizar el análisis al código recompilado. Estas nuevas instrucciones provienen de la herramienta Pintool. Se utiliza una amplia gama de técnicas de optimización para obtener el menor tiempo de ejecución y uso de memoria posibles. A junio de 2010, la sobrecarga base promedio de Pin es del 30 por ciento (sin ejecutar una herramienta Pintool). [2]
Características
Modos de instrumentación
Pin admite dos modos de instrumentación llamados modo JIT y modo Probe. El modo JIT admite todas las funciones de Pin, mientras que el modo Probe admite un conjunto de funciones limitado, pero es mucho más rápido y prácticamente no agrega sobrecarga al tiempo de ejecución del programa. El modo JIT utiliza un compilador justo a tiempo para recompilar todo el código del programa e insertar la instrumentación, mientras que el modo Probe utiliza trampolines de código para la instrumentación.
Independencia de la plataforma
Pin fue diseñado para la portabilidad de herramientas y, a pesar de la compilación JIT de una ISA a la misma ISA (y no usar una única representación intermedia para todo el código), la mayoría de sus API son independientes de la arquitectura y del sistema operativo . También fue diseñado para ser portátil en sí mismo, aislando cuidadosamente el código específico de la plataforma del código genérico, lo que permite la rápida adaptación de Pin a nuevas plataformas. Aproximadamente la mitad del código es genérico y el resto depende de la arquitectura o del sistema operativo. [3]
Optimizaciones
Pin utiliza muchas técnicas para optimizar el código de instrumentación y análisis, utilizando técnicas como la inserción en línea , el análisis de vida y el desbordamiento inteligente de registros . Pin realiza estas optimizaciones automáticamente siempre que sea posible, sin necesidad de que los usuarios inserten ningún código adicional para permitir la inserción en línea. Naturalmente, algunas optimizaciones aún requieren sugerencias del usuario y algunas estructuras de código son más fáciles de insertar en línea que otras. También se utilizan la vinculación directa de secciones de código jitted, una técnica llamada trace linking , y la reconciliación de enlaces de registros , que minimiza el desbordamiento y la reasignación de registros.
Facilidad de uso
La API y la implementación de Pin se centran en facilitar la escritura de herramientas de pin. Pin asume la responsabilidad total de garantizar que el código de instrumentación de la herramienta de pin no afecte el estado de la aplicación. Además, la API permite que el código de instrumentación solicite muchos datos a Pin. Por ejemplo, el código de instrumentación de la herramienta de pin puede utilizar la API de Pin para obtener la dirección de memoria a la que accede una instrucción, sin tener que examinar la instrucción en detalle.
Herramientas
Hay muchas herramientas Pintools que se utilizan para distintas tareas.
- Los componentes de Intel Parallel Studio hacen un uso intensivo de pintools para la depuración de memoria, el análisis de rendimiento, el análisis de corrección de subprocesos múltiples y la preparación de la paralelización.
- Intel Software Development Emulator es una herramienta que permite el desarrollo de aplicaciones utilizando extensiones de conjuntos de instrucciones que actualmente no están implementadas en el hardware.
- CMP$IM es un generador de perfiles de caché creado utilizando pin. [4]
- PinPlay permite capturar y reproducir de forma determinista la ejecución de programas multiproceso bajo pin. Capturar la ejecución de un programa ayuda a los desarrolladores a superar el no determinismo inherente al multiproceso. [5]
- Pin viene con muchas herramientas de ejemplo que hacen uso de sus capacidades. Estas herramientas tienen una licencia similar a la de BSD.
Alternativas a la herramienta Pin
Hay muchas otras herramientas disponibles para recopilar el uso de recursos de los programas que se ejecutan en el sistema, como la herramienta strapon de Bell Lab y la herramienta Dyninst, etc. La herramienta de Bell Lab utiliza la tecnología strap on que ejecuta una herramienta para recopilar recursos simultáneamente con el programa, pero esta herramienta solo es compatible con los programas que permiten que otros programas se ejecuten simultáneamente con ellos. [6] Además, la herramienta Dyninst utiliza la reescritura binaria de los comandos ejecutables e implementables del programa dentro del programa para verificar el uso de recursos y es muy eficiente. Sin embargo, es muy inestable ya que es una herramienta relativamente nueva y se bloquea en programas de gran escala. [7] Por último, la herramienta Intel Pin utiliza instrumentación binaria estática y ejecuta el programa como parte de sí mismo mientras realiza un seguimiento de todos sus recursos. [8] Este enfoque es más adecuado para un antivirus, ya que puede ejecutar fácilmente todos los procesos bajo sí mismo y puede matar programas si alcanzan un límite máximo asignado según lo definido por el antivirus.
Véase también
Notas
- ^ "Premio de Software de Lenguajes de Programación". www.sigplan.org .
- ^ Análisis de programas paralelos con Pin
- ^ Pin: Creación de herramientas de análisis de programas personalizados con instrumentación dinámica
- ^ CMP$im: un simulador de caché multinúcleo basado en PIN y sobre la marcha
- ^ PinPlay: un marco para la repetición determinista y el análisis reproducible de programas paralelos
- ^ Gupta, Chandrashekhar (2007). "Creación de productos y soluciones seguras". Bell Labs Technical Journal . 12 (3): 21-38. doi :10.1002/bltj.20247. S2CID 30412754.
- ^ Lee, Schulz (2007). "Instrumentación binaria dinámica y agregación de datos en sistemas de gran escala". Revista internacional de programación paralela . 35 (3): 207–232. doi :10.1007/s10766-007-0036-3. S2CID 6653468.
- ^ Bach, M.; Charney, M.; Cohn, R.; Demikhovsky, E.; Devor, T.; Hazelwood, K.; Jaleel, A.; Luk, Chi-Keung; Lyons, G. (marzo de 2010). "Análisis de programas paralelos con PIN". Computadora . 43 (3): 34–41. doi :10.1109/MC.2010.60. ISSN 0018-9162. S2CID 15155077.
Referencias
- Moshe Bach; Mark Charney; Robert Cohn; Elena Demikhovsky; Tevi Devor; Kim Hazelwood; Aamer Jaleel; Chi-Keung Luk; Gail Lyons; Harish Patil y Ady Tal (marzo de 2010). "Análisis de programas paralelos con Pin". Computadora . 43 (3). IEEE: 34–41. doi :10.1109/mc.2010.60. S2CID 15155077. Archivado desde el original el 29 de diciembre de 2010. Consultado el 5 de julio de 2010 .
- Chi-Keung Luk; Robert Cohn; Robert Muth; Harish Patil; Artur Klauser; Geoff Lowney; Steven Wallace; Vijay Janapa Reddi y Kim Hazelwood (junio de 2005). "Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation" (PDF) . Actas de la conferencia ACM SIGPLAN de 2005 sobre diseño e implementación de lenguajes de programación . Chicago, Illinois, EE. UU.: ACM. págs. 190–120.
- Alex Skaletsky; Tevi Devor; Nadav Chachmon; Robert Cohn; Kim Hazelwood; Vladimir Vladimirov; Moshe Bach (abril de 2010). "Análisis dinámico de programas de aplicaciones de Microsoft Windows" (PDF) . Simposio internacional sobre análisis de rendimiento de software y sistemas (ISPASS) . White Plains, Nueva York. págs. 2–12.
Enlaces externos
- Pin: página de inicio de una herramienta dinámica de instrumentación binaria
- Pinheads, una lista de correo para la comunidad de usuarios de Pin
- Detección de errores de lectura antes de escritura (al estilo de Valgrind)
- Pin++, un marco para la creación de herramientas Pintools