Actuación

Tutorial de OProfile

Tutorial de OProfile

OProfile es un generador de perfiles de rendimiento para Linux. En este artículo, exploraremos lo que hace, cómo instalarlo y configurarlo, y cómo utilizar los datos que ensambla.

Quizás se pregunte por qué necesitaría una herramienta como esta, ya que hay muchas buenas herramientas de análisis de rendimiento disponibles de forma predeterminada en la mayoría de las distribuciones de Linux. Cada instalación incluye herramientas como top y vmstat, y las utilidades de rastreo como strace suelen ser solo un apt-get away. ¿Dónde encaja OProfile??

Las herramientas mencionadas anteriormente son excelentes para obtener una instantánea de un sistema Linux en tiempo real. Herramientas como top o htop muestran todos los procesos en ejecución, su consumo actual de memoria y el uso del procesador. Pero saber qué procesos y llamadas al sistema consumen más recursos se vuelve problemático.

Ahí es donde entra OProfile. Este conjunto de utilidades no solo realiza su análisis a un nivel más profundo, sino que también guarda datos y le permite producir informes de rendimiento que ofrecen una gran cantidad de información que puede ayudarlo a depurar incluso los problemas de rendimiento más esquivos.

OProfile no es solo para desarrolladores. En un entorno de escritorio, OProfile puede ayudarlo a rastrear tareas en segundo plano intensivas en la CPU o llamadas de E / S que lo ralentizan y no son evidentes de inmediato. En un sistema ocupado con prioridades de proceso cambiantes, estos datos pueden ser difíciles de recopilar, y mucho menos de interpretar. La naturaleza multiproceso de un entorno de servidor hace que esta tarea sea aún más difícil con las herramientas tradicionales.

Dicho esto, los desarrolladores sin duda sacarán el mayor provecho de OProfile. La información que presentaré cubrirá los conceptos básicos de ambos casos de uso para que pueda profundizar en las métricas de rendimiento de cualquier programa de Linux.

Instalación

Hay una nota muy importante que debe hacerse antes de sumergirse profundamente en OProfile: es posible que no pueda instalarlo en un entorno virtualizado. Si está ejecutando Linux dentro de un entorno de VM VirtualBox, VMWare o similar, es posible que OProfile no pueda acceder a los contadores de rendimiento necesarios para recopilar datos. Además, incluso si puede usarlo en un entorno virtual, la sincronización precisa puede estar algo distorsionada en función de la carga del sistema host, así que tenga esto en cuenta si no está ejecutando en hardware nativo.

Varias distribuciones de Linux tienen OProfile en sus sistemas de administración de paquetes, lo que facilita la instalación:

Un ejemplo simple

Una vez instalado el programa, vamos a mojarnos los pies con un ejemplo trivial pero útil. El programa "ls" es un comando que probablemente usa todo el tiempo. Simplemente muestra una lista de archivos y carpetas en el directorio actual. Rastreemos su salida:

sudo operf ls

Verás algo similar a la captura de pantalla anterior. Una vez que termine el generador de perfiles, se anunciará "Perfilado terminado."Ha guardado sus datos en una carpeta llamada oprofile_data que se puede utilizar para generar un informe.

Ejecutar el comando opreport (sin sudo en este caso) produce un informe similar a este:

En este ejemplo, el informe predeterminado muestra la cantidad de muestras cuando la CPU no estaba en un estado HALT (en otras palabras, estaba haciendo algo activamente). Kallsyms proporciona la búsqueda de símbolos utilizada por el generador de perfiles y el ld.así y libc.también forman parte del paquete glibc, una biblioteca común vinculada a casi todos los ejecutables de Linux que proporciona funciones básicas que los desarrolladores pueden utilizar para evitar reinventar la rueda y proporcionar un nivel genérico de compatibilidad entre varios sistemas. Puede ver que el programa real ls tenía mucho menos tiempo sin HALT: la mayor parte del trabajo pesado lo realizaban las bibliotecas estándar.

Una vez que hayamos terminado con el informe, es una buena idea eliminar la carpeta de datos o guardarla para un análisis futuro. En este ejemplo, simplemente lo eliminaremos ya que estamos ejecutando ejercicios de muestra. Como ejecutamos el comando con sudo, debemos eliminar la carpeta con sudo. Ten cuidado!

sudo rm -Rf oprofile_data

Un ejemplo más complejo

En el siguiente ejemplo, ejecutaremos un programa que en realidad hace algo más complejo que solo enumerar archivos en la carpeta actual. Descarguemos WordPress con wget.

sudo operf wget http: // wordpress.org / último.alquitrán.gz

Después de este ejemplo, podemos generar un informe con el comando "opreport":

Verás mucha más actividad después de esta. El comando wget tuvo que hacer mucho trabajo detrás de escena para obtener la última copia de WordPress. Aunque no es necesario examinar cada elemento, los puntos interesantes de interés son:

Este tipo de datos puede proporcionar una gran cantidad de información para un desarrollador. Pero, ¿cómo es esto importante para un administrador de sistema de un servidor o un usuario avanzado en un escritorio?? Al saber qué partes de un programa están tomando más tiempo de CPU, podemos averiguar qué necesita optimización o dónde se está produciendo la desaceleración, lo que nos permite tomar mejores decisiones sobre cómo optimizar nuestro sistema.

En este ejemplo, las rutinas de cifrado / SSL tomaron la mayor parte del tiempo de CPU. Esto es comprensible porque la criptografía es una tarea que requiere mucho tiempo. Tenía el wordpress.org no nos redirigió a https: // esta biblioteca no se habría utilizado, lo que nos ahorra tiempo de CPU. La capa de red aún se habría utilizado, pero usar una conexión por cable en lugar de una conexión inalámbrica probablemente habría sido menos exigente. Deshabilitar el indicador de progreso en el programa wget (a través del interruptor -nv) habría ahorrado tiempo de CPU al mostrar el progreso de la descarga.

Profundizando en los símbolos

Aunque el informe predeterminado proporciona información valiosa y útil, podemos investigar más. Ejecutando esto:

opreport --demangle = smart --symbols

Podemos averiguar exactamente cuánto tiempo de CPU consumieron funciones en las bibliotecas:

En este ejemplo, utilicé el comando wget anterior, pero usé una URL http: // (una que no redirige a https: //) y puede ver la ausencia de bibliotecas OpenSSL en el seguimiento. Sin embargo, en lugar de solo el nombre de la biblioteca, ahora tenemos una lista completa de las funciones involucradas. Como puede ver, la capa de red consumió la mayor parte del tiempo no HALT de la CPU.

Llévandolo al siguiente nivel

En los ejemplos anteriores, usamos OProfile para ver un programa a la vez. Puede examinar todo su sistema a la vez utilizando el conmutador -system-wide:

sudo operf: todo el sistema

Con esta técnica, OProfile recopilará estadísticas de la misma manera y se detendrá cuando presione CTRL + C. Luego, puede ejecutar el comando opreport. Dado que el generador de perfiles probablemente generará muchos más datos (especialmente en un escritorio o en un servidor ocupado).

opreport & gt; informe.TXT

El informe ahora se puede ver en un archivo llamado informe.TXT

Gastos indirectos bajos

Es importante tener en cuenta que, si bien OProfile no debería interferir con el funcionamiento de sus programas, creará un poco de sobrecarga y, por lo tanto, ralentizará la ejecución. En nuestros ejemplos simples anteriores no creó un problema, pero en un programa con una ejecución prolongada y llamadas de función extensas probablemente notará una diferencia. Debido a esto, no recomendaría usar este programa en un entorno de servidor de producción a menos que se enfrente a un problema de rendimiento crítico que deba resolverse con el uso en vivo. Incluso entonces, lo usaría el tiempo suficiente para encontrar el problema.

Conclusión

OProfile es una poderosa herramienta de generación de perfiles de rendimiento. Aprovecha el nivel más bajo disponible en Linux para obtener métricas y contadores de rendimiento que le brindan información valiosa sobre sus programas.

Atrás quedaron los días de conjeturas en la depuración de rendimiento: ahora tiene el poder de saber con precisión qué está haciendo su sistema y cómo mejorarlo. Al estudiar los informes generados por OProfile, puede tomar decisiones informadas y basadas en datos sobre la optimización de su sistema.

Cómo usar Xdotool para estimular los clics del mouse y las pulsaciones de teclas en Linux
Xdotool es una herramienta de línea de comandos gratuita y de código abierto para simular clics del mouse y pulsaciones de teclas. Este artículo cubri...
Los 5 mejores productos ergonómicos de mouse de computadora para Linux
¿El uso prolongado de la computadora causa dolor en la muñeca o los dedos?? ¿Sufre de rigidez en las articulaciones y constantemente tiene que dar la ...
Cómo cambiar la configuración del mouse y el panel táctil con Xinput en Linux
La mayoría de las distribuciones de Linux se envían con la biblioteca "libinput" de forma predeterminada para manejar eventos de entrada en un sistema...