Cómo instalar la herramienta perf en CentOS y Ubuntu
Perf es un contador de rendimiento para Linux. Con él puede conocer muchos secretos del sistema Linux en ejecución. Por ejemplo, por qué se producen errores de caché L2. Por qué su disco muestra actividad, qué rutas de código están bloqueando el kernel y muchas otras cosas. En este artículo, mostraremos los conceptos básicos de rendimiento y cómo puede usarlo para obtener algunos datos sobre el rendimiento de su sistema.
Cómo instalar perf
La instalación de las herramientas del espacio de usuario perf a través de termial (junto con awk) es sencilla.
En Ubuntu escribe
sudo apt install linux-tools-common gawk
En CentOS y Fedora
sudo yum install perf gawk
Pocos usos de la herramienta perf.
Permite grabar la E / S del disco usando el siguiente comando.
sudo perf record -e block:block_rq_issue -ag
Grabará datos, puede presionar ctrl-c para detenerlo después de un par de segundos. Luego emita el siguiente comando
sudo perf report
Y obtendrás algo como esto:
La ventaja significa que el informe se puede expandir y puede ver qué rutas de código son responsables. Expandí una línea en la segunda imagen, allí vemos más información.
Vamos a comprobar los fallos de caché a continuación. Este comando registrará fallas de caché de datos de nivel 1 de cpu
sudo perf record -e L1-dcache-load-misses -c 10000 -ag -- sleep 5
Entonces, cuando verifiquemos el informe con sudo perf report -f veremos qué código es responsable de los errores
Vemos que la función de Skype es responsable del 0,83% de las pérdidas de caché en la caché de datos L1.
Hasta ahora grabamos y luego analizamos el registro, pero ¿qué pasa si lo desea en tiempo real, para grabar y ver la salida de inmediato? Siga leyendo, en la siguiente sección cubrimos eso.
Scripts en tiempo real
Perf es una herramienta muy poderosa, pero no al mismo tiempo no es la herramienta mejor documentada debido a los frecuentes cambios en el marco subyacente. Por tanto, para facilitar el recuento del rendimiento en tiempo real, utilizaremos un conjunto de guiones de github. Vamos a clonarlos
cd git clone --depth 1 https://github.com/brendangregg/perf-tools cd perf-tools
Y ya está todo listo. Ahora ejecutamos algunos scripts:
sudo ./iolatency
Este script nos dará la latencia del disco como histograma. Lo he ejecutado solo por un segundo, puede hacer que funcione por más tiempo. No quiero porque tengo un disco duro de 5400 rpm y los resultados no pueden ser buenos, así que ¿por qué ejecutarlo?
Probemos algunos scripts más.
sudo ./fs/cachestat
Este script usa perf para obtener fallos de caché cada segundo y lo imprime en una línea. Tenga en cuenta que los primeros 3 segundos no hubo fallas, y los últimos comenzaron. Eso se debe a que comencé a reconstruir mi proyecto en Android Studio justo en ese momento. Puedo decir que Intel hizo un predictor de sucursales bastante bueno en Haswell. El porcentaje de aciertos de caché rara vez cae por debajo del 95% en mi i7 con 6 MB de caché L3.
sudo ./kernel/funccount -t 5 -d 5 'ext4*' Tracing "ext4*" for 5 seconds. Top 5 only... FUNC COUNT ext4_mark_iloc_dirty 109 ext4_reserve_inode_write 109 ext4_get_group_desc 112 ext4_inode_table 112 ext4_journal_check_start 155
Esta secuencia de comandos rastrea la función del kernel que escribe (ext4 en este ejemplo) durante la cantidad de tiempo que escribe (-d 5 segundos aquí) y genera la lista superior con tantos puntos como establezca (-t 5 aquí).
Algunos scripts que no son en tiempo real
Este script usa perf_events para contar las llamadas al sistema:
sudo ./syscount -c Tracing... Ctrl-C to end. ^Csleep: Interrupt SYSCALL COUNT exit 1 lseek 1 newuname 1 dup 2 sched_getaffinity 2 tgkill 2 timerfd_settime 2 unlink 2 access 3 prctl 3 set_robust_list 4 fdatasync 5 getsockopt 5 epoll_ctl 6 newlstat 6 ftruncate 7 munmap 8 shutdown 8 inotify_add_watch 9 bind 10 mmap 14
No es tiempo real como el anterior, debe presionar ctrl-C para detener el conteo y luego obtiene la salida.
Si desea realizar un seguimiento de la llamada de un proceso específico, primero debe obtener su PID con el comando
sudo ./syscount -v
y luego necesita usar un número pid como este
./syscount -cp 5656
para ver qué syscalls un proceso con pid 5656 llama más.
Conclusión
Hemos analizado ejemplos básicos de lo que se puede hacer con perf para medir los datos de rendimiento de su sistema. Pero solo rascamos la superficie, ya que perf es una herramienta realmente extensa y puedes usarla para obtener muchos detalles. Desafortunadamente, solo podemos llegar hasta cierto punto en un artículo. Gracias por leer y buen día.