perf (Linux)

De Wikipedia, la enciclopedia libre
Perf
Información general
Tipo de programa software libre
Licencia GNU General Public License
Archivos legibles
Linux perf file format
Archivos editables
Linux perf file format
Enlaces

perf (a veces llamado perf_events[1]​ o perf tools, originalmente Performance Counters para Linux, PCL)[2]​ es una herramienta de análisis de rendimiento en Linux, disponible desde la versión 2.6.31 del núcleo Linux.[3]​ Se accede a la utilidad de control del espacio de usuario, llamada perf, desde la línea de comandos y proporciona varios subcomandos; es capaz de realizar un perfil estadístico de todo el sistema (tanto el código del kernel como el del país de usuario).

Admite contadores de rendimiento de hardware, puntos de rastreo, contadores de rendimiento de software (por ejemplo, hrtimer) y sondas dinámicas (por ejemplo, kprobes o uprobes).[4]​ En 2012, dos ingenieros de IBM reconocieron a perf (junto con OProfile) como una de las dos herramientas de perfilado de contadores de rendimiento más utilizadas en Linux.[5]

Implementación[editar]

La interfaz entre la utilidad perf y el kernel consta de una llamada al sistema y se realiza a través de un descriptor de archivos y una región de memoria con formato mm.[6]​ A diferencia de las versiones LTTng o anteriores de oprofile, no se necesitan demonios de servicio, ya que la mayoría de las funciones están integradas en el núcleo. La utilidad perf descarga los datos sin procesar del búfer de mmapped al disco cuando el búfer se llena. Según R. Vitillo (LBNL), el perfil realizado por perf implica una sobrecarga muy baja.[6]

A 2010, las arquitecturas que brindan soporte para los contadores de hardware incluyen x86, PowerPC 64, UltraSPARC (III y IV), ARM (v5, v6, v7, Cortex-A8 y -A9 ), Alpha EV56 y SuperH.[4]​ El uso de Last Branch Records,[7]​ una implementación de seguimiento disponible en CPU Intel desde Pentium 4, está disponible como un parche.[6]​ Desde la versión 3.14 de la línea principal del núcleo Linux, lanzada el 31 de marzo de 2014, perf también admite el límite de potencia promedio (RAPL) para las mediciones de consumo de energía, que está disponible como una característica de ciertas CPU de Intel.[8][9][10]

Perf es soportado de forma nativa en muchas distribuciones populares de Linux, incluyendo Red Hat Enterprise Linux (desde su versión 6 lanzada en 2010)[11]​ y Debian (desde su versión Squeeze lanzada en 2011).[12]

Subcomandos[editar]

perf se utiliza con varios subcomandos:

  • stat: mide el recuento total de eventos para un solo programa o para un sistema durante algún tiempo
  • top: la parte superior vista -como dinámica de las funciones más calientes
  • record: medir y guardar datos de muestreo para un solo programa[13]
  • report: analizar archivo generado por registro perf; Puede generar plano, o perfil gráfico.[13]
  • annotate: anotar fuentes o ensamblaje
  • sched: seguimiento/medición de las acciones y latencias del programador.[14]
  • list: lista de eventos disponibles

Críticas[editar]

La documentación de perf no es muy detallada (a partir de 2014); por ejemplo, no documenta la mayoría de los eventos ni explica sus alias (a menudo se usan herramientas externas para obtener nombres y códigos de eventos).[15][16]​ Las herramientas de rendimiento tampoco pueden perfilar basándose en el tiempo real.[16]

El subsistema de núcleos de Linux desde 2.6.37 hasta 3.8.8 y el kernel RHEL6 2.6.32 contenía una vulnerabilidad de seguridad (CVE-2013-2094), que fue explotada para obtener privilegios de root por parte de un usuario local.[17][18]​ El problema se debió a que se usó un tipo incorrecto (32 bits int en lugar de 64 bits) en la ruta del código de verificación event_id.[19]

Véase también[editar]

Referencias[editar]

  1. Vince Weaver, The Unofficial Linux Perf Events Web-Page
  2. Linux perf event Features and Overhead // 2013 FastPath Workshop, Vince Weaver
  3. Jake Edge, Perfcounters added to the mainline, LWN July 1, 2009, "perfcounters being included into the mainline during the recently completed 2.6.31 merge window"
  4. a b Arnaldo Carvalho de Melo, The New Linux ’perf’ tools, presentation from Linux Kongress, Septiembre, 2010
  5. A. Zanella, R. Arnold. Evaluate performance for Linux on POWER. Analyze performance using Linux tools, 12 de junio de 2012 // IBM DeveloperWorks Technical library
  6. a b c Roberto A. Vitillo (LBNL). PERFORMANCE TOOLS DEVELOPMENTS, 16 de junio de 2011, presentation from "Future computing in particle physics" conference
  7. Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide, Part 2. Intel. Junio de 2009. p. 19-2 vol. 3. 
  8. Jake Edge (9 de abril de 2014). «Lots of new perf features». LWN.net. Consultado el 22 de abril de 2014. 
  9. Jacob Pan (2 de abril de 2013). «RAPL (Running Average Power Limit) driver». LWN.net. Consultado el 22 de abril de 2014. 
  10. «kernel/git/torvalds/linux.git - Linux kernel source tree». Git.kernel.org. 20 de enero de 2014. Consultado el 31 de marzo de 2014. 
  11. 6.4. Performance Counters for Linux (PCL) Tools and perf // RHEL Developer Guide
  12. «Debian - Details of package linux-tools-2.6.32 in squeeze». Packages.debian.org. Consultado el 31 de marzo de 2014. 
  13. a b Urs Fässler perf file format Archivado el 14 de diciembre de 2012 en Wayback Machine., CERN OpenLab, 2011
  14. Ingo Molnar, 'perf sched': Utility to capture, measure and analyze scheduler latencies and behavior, 17 de septiembre de 2009
  15. How to monitor the full range of CPU performance events // Bojan Nikolic, 2012
  16. a b Robert Haas (PostgreSQL), perf: the good, the bad, the ugly // 6 de junio de 2012
  17. Michael Larabel (15 de mayo de 2013). «New Linux Kernel Vulnerability Exploited». Phoronix. 
  18. corbet (15 de mayo de 2013). «Local root vulnerability in the kernel». LWN. 
  19. Joe Damato (20 de mayo de 2013). «A closer look at a recent privilege escalation bug in Linux (CVE-2013-2094)». Archivado desde el original el 24 de julio de 2019. Consultado el 24 de julio de 2019. 

Enlaces externos[editar]