Cuando hablamos de rendimiento en informática, nos referimos a la relación entre nuestros recursos y las tareas que nos permiten completar en un período de tiempo dado.

En un día de feroz competencia 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 habilidad para saber cómo usarlos de manera más eficiente, termina siendo una pérdida que simplemente no podemos permitir si queremos estar en la cima de nuestro juego.
Al mismo tiempo, debemos tener cuidado de no llevar nuestros recursos a un límite donde el uso sostenido genere daños irreparables.
En este artículo te presentaremos una herramienta de análisis de rendimiento relativamente nueva y proporcionaremos consejos que puedes utilizar para monitorear tus sistemas Linux, incluyendo hardware y aplicaciones. Esto te ayudará a asegurarte de que operen de manera que seas capaz de producir los resultados deseados sin desperdiciar recursos o tu propia energía.
Introducción e instalación de Perf en Linux
Entre otros, Linux proporciona una herramienta de monitoreo y análisis de rendimiento llamada convenientemente perf. Entonces, ¿qué distingue a perf de otras herramientas conocidas con las que ya estás 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 monitorizar 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 deba 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 sobre VirtualBox o VMWare ya que no permiten el acceso a contadores de hardware como otras tecnologías de virtualización (como KVM o XEN) lo hacen.
Además, tenga en cuenta que algunos comandos de perf pueden estar restringidos al usuario root de forma predeterminada, lo cual se puede deshabilitar (hasta que se reinicie el sistema) realizando:
# echo 0 > /proc/sys/kernel/perf_event_paranoid
Si necesita desactivar el modo paranoid de forma permanente, actualice el siguiente ajuste 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 pensar en los subcomandos como opciones especiales que abren una ventana específica en el sistema). Para obtener los mejores y más completos resultados, use perf ya sea como root o a través de sudo.
Lista de Perf
perf list (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 perf list seguido del nombre de la categoría ([hw|sw|cache|tracepoint|pmu|event_glob]), como por ejemplo:
Mostrar lista de eventos predefinidos de software en Linux:
# perf list sw

Estadísticas de Perf
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:
- La ejecución del comando dd tomó 21.812281 milisegundos de CPU. Si dividimos este número por el valor de “segundos transcurridos” a continuación (23.914596 milisegundos), obtenemos 0.912 (CPU utilizado).
- Mientras se ejecutaba el comando, 15 cambios de contexto (también conocidos como cambios de proceso) indican que las CPUs se cambiaron 15 veces de un proceso (o hilo) a otro.
- 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 consumidos fue 62,025,623, que dividido por 0.021812281 segundos da 2.843 GHz. - 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 atribuir esto (al menos en parte) al número de ramas y fallos de rama (ver abajo), que terminan desperdiciando o mal utilizando los ciclos de CPU.
- Al ejecutar 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 bucles en el código. Cuantas más ramas, menor rendimiento. Para compensar esto, todas las CPUs modernas intentan predecir el flujo que tomará el código. 51,348 fallos de rama indican que la característica de predicción fue incorrecta 1.45% del tiempo.
El mismo principio se aplica a la recopilación de estadísticas (o en otras palabras, perfilado) mientras una aplicación está en ejecució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.
Perf top
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
, se mostrarán todos los tipos de eventos conocidos, mientras que la opción -e
te permitirá elegir una categoría de evento específica (como se devuelve en perf list):
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 en la salida anterior representa el porcentaje de muestras tomadas desde el inicio de la ejecución, agrupadas por Símbolo de función y Objeto compartido. Hay más opciones disponibles en man perf-top.
perf record ejecuta un comando y guarda los datos estadísticos en un archivo llamado perf.data dentro del directorio de trabajo actual. Funciona de manera similar a perf stat.
Escribe perf record seguido de un comando:
# perf record dd if=/dev/null of=test.iso bs=10M count=1

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
subcomando es ya sea listar, estado, superior, registro, o informe. Estos son los subcomandos más utilizados; otros se enumeran en la documentación (consulte la sección de Resumen para el enlace).
Resumen
En esta guía te hemos presentado perf, una herramienta de monitoreo y análisis de rendimiento para Linux. Te animamos encarecidamente a familiarizarte con su documentación que se mantiene en https://perf.wiki.kernel.org.
Si encuentras aplicaciones que están consumiendo un alto porcentaje de recursos, puedes considerar modificar el código fuente o utilizar otras alternativas.
Si tienes preguntas sobre este artículo o sugerencias para mejorar, estamos todo oídos. No dudes en contactarnos utilizando el formulario de comentarios a continuación.
Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/