Búsqueda de sitios web

Perf: una herramienta de análisis y monitoreo del rendimiento para Linux


Cuando hablamos de rendimiento en informática nos referimos a la relación entre nuestros recursos y las tareas que estos nos permiten completar en un periodo de tiempo determinado.

En una época de competencia feroz entre empresas, es importante que aprendamos a utilizar lo que tenemos al máximo de su capacidad. El desperdicio de recursos de hardware o software, o la falta de capacidad para saber cómo utilizarlos de manera más eficiente, termina siendo una pérdida que simplemente no podemos permitirnos si queremos estar en la cima de nuestro juego.

Al mismo tiempo, debemos tener cuidado de no llevar nuestros recursos a un límite en el que su uso sostenido produzca daños irreparables.

En este artículo, le presentaremos una herramienta de análisis de rendimiento relativamente nueva y le brindaremos consejos que puede utilizar para monitorear sus sistemas Linux, incluidos el hardware y las aplicaciones. Esto le ayudará a garantizar que funcionen de manera que usted sea capaz de producir los resultados deseados sin desperdiciar recursos ni su propia energía.

Introducción e instalación de Perf en Linux

Entre otras cosas, Linux proporciona una herramienta de análisis y seguimiento del rendimiento llamada convenientemente perf. Entonces, ¿qué distingue a perf de otras herramientas conocidas con las que ya está familiarizado?

La respuesta es que perf proporciona acceso a la Unidad de Monitoreo de Rendimiento en la CPU y, por lo tanto, nos permite observar de cerca el comportamiento del hardware y sus eventos asociados.

Además, también puede monitorear eventos de software y crear informes a partir de los datos recopilados.

Puede instalar perf en distribuciones basadas en RPM con:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

En Debian y derivados:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Si uname -r en el comando anterior devuelve cadenas adicionales además de la versión real (3.2.0-23-generic en mi caso), es posible que tengas que escribir linux-tools-3.2.0-23 en lugar de utilizar la salida de uname.

También es importante tener en cuenta que perf produce resultados incompletos cuando se ejecuta en un invitado encima de VirtualBox o VMWare, ya que no permiten el acceso a los contadores de hardware como lo hacen otras tecnologías de virtualización (como KVM o XEN). .

Además, tenga en cuenta que algunos comandos perf pueden estar restringidos a root de forma predeterminada, lo que se puede desactivar (hasta que se reinicie el sistema) haciendo lo siguiente:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Si necesita desactivar el modo paranoico de forma permanente, actualice la siguiente configuración en el archivo /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Subcomandos

Una vez que haya instalado perf, puede consultar su página de manual para obtener una lista de subcomandos disponibles (puede considerar los subcomandos como opciones especiales que abren una ventana específica en el sistema). Para obtener resultados mejores y más completos, utilice perf ya sea como root o mediante sudo.

lista de rendimiento

La lista de rendimiento (sin opciones) devuelve todos los tipos de eventos simbólicos (lista larga). Si desea ver la lista de eventos disponibles en una categoría específica, use la lista perf seguida del nombre de la categoría ([hw|sw|cache|tracepoint|pmu|event_glob ]), como:

Muestra la lista de eventos predefinidos de software en Linux:

perf list sw 

estadística de rendimiento

perf stat ejecuta un comando y recopila estadísticas de rendimiento de Linux durante la ejecución de dicho comando. ¿Qué sucede en nuestro sistema cuando ejecutamos dd?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

Las estadísticas mostradas arriba indican, entre otras cosas:

  1. La ejecución del comando dd tomó 21,812281 milisegundos de CPU. Si dividimos este número por el valor de "segundos transcurridos" que aparece a continuación (23,914596 milisegundos), obtenemos 0,912 (CPU utilizada).
  2. Mientras se ejecutaba el comando, 15 cambios de contexto (también conocidos como cambios de proceso) indican que las CPU se cambiaron 15 veces de un proceso (o subproceso) a otro.
  3. 2 migraciones de CPU es el resultado esperado cuando en una CPU de 2 núcleos la carga de trabajo se distribuye uniformemente entre el número de núcleos.
    Durante ese tiempo (21,812281 milisegundos), el número total de ciclos de CPU que se consumieron fue 62.025.623, que dividido por 0,021812281 segundos da 2,843 GHz.
  4. Si dividimos el número de ciclos por el recuento total de instrucciones, obtenemos 4,9 ciclos por instrucción, lo que significa que cada instrucción tomó casi 5 ciclos de CPU para completarse (en promedio). Podemos culpar de esto (al menos en parte) a la cantidad de bifurcaciones y errores de bifurcación (ver más abajo), que terminan desperdiciando o haciendo un mal uso de los ciclos de CPU.
  5. Mientras se ejecutaba el comando, se encontraron un total de 3.552.630 ramas. Esta es la representación a nivel de CPU de los puntos de decisión y los bucles en el código. Cuantas más ramas, menor será el rendimiento. Para compensar esto, todas las CPU modernas intentan predecir el flujo que seguirá el código. 51.348 errores de rama indican que la función de predicción estaba equivocada el 1,45 % de las veces.

El mismo principio se aplica a la recopilación de estadísticas (o en otras palabras, creación de perfiles) mientras se ejecuta una aplicación. Simplemente inicie la aplicación deseada y después de un período de tiempo razonable (que depende de usted), ciérrela y perf mostrará las estadísticas en la pantalla. Al analizar esas estadísticas, puede identificar problemas potenciales.

parte superior de rendimiento

perf top es similar al comando top, ya que muestra un perfil del sistema casi en tiempo real (también conocido como análisis en vivo).

Con la opción -a mostrará todos los tipos de eventos conocidos, mientras que la opción -e le permitirá elegir una categoría de evento específica (según lo devuelto por lista de rendimiento):

Mostrará todos los eventos de ciclos.

perf top -a 

Mostrará todos los eventos relacionados con el reloj de la CPU.

perf top -e cpu-clock 

La primera columna del resultado anterior representa el porcentaje de muestras tomadas desde el comienzo de la ejecución, agrupadas por función Símbolo y Objeto compartido. Hay más opciones disponibles en man perf-top.

Registro de rendimiento

El registro perf ejecuta un comando y guarda los datos estadísticos en un archivo llamado perf.data dentro del directorio de trabajo actual. Se ejecuta de manera similar a perf stat.

Escriba registro de rendimiento seguido de un comando:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Informe de rendimiento

El perf report formatea los datos recopilados en perf.data arriba en un informe de rendimiento:

sudo perf report

Todos los subcomandos anteriores tienen una página de manual dedicada que se puede invocar como:

man perf-subcommand

donde subcomando es lista, estadística, top, registro o informe. Estos son los subcomandos más utilizados; otros se enumeran en la documentación (consulte la sección Resumen para ver el enlace).

Resumen

En esta guía le presentamos perf, una herramienta de análisis y monitoreo del rendimiento para Linux. Le recomendamos encarecidamente que se familiarice con la documentación que se mantiene en https://perf.wiki.kernel.org.

Si encuentras aplicaciones que consumen un alto porcentaje de recursos, puedes considerar modificar el código fuente o utilizar otras alternativas.

Si tiene preguntas sobre este artículo o sugerencias para mejorar, somos todo oídos. No dude en comunicarse con nosotros mediante el formulario de comentarios a continuación.