LinuxParty
En ocasiones, al implementar una nueva aplicación en un servidor, nos encontramos con que el departamento de aprovisionamiento nos proporciona un servidor virtual con recursos limitados, especialmente en cuanto a la velocidad de disco. Este problema puede afectar significativamente el rendimiento de la aplicación en entornos críticos. Para evitar sorpresas desagradables y tener argumentos sólidos al solicitar más recursos, es esencial determinar desde el principio las velocidades de lectura y escritura de nuestros discos.
A continuación, se describen tres herramientas que permiten evaluar el rendimiento de los discos duros, lo que proporciona datos concretos para respaldar nuestras demandas de recursos. A pesar de que existen muchas otras formas de medir el rendimiento, estas tres herramientas ofrecen una sólida referencia y justificación al momento de realizar solicitudes de mejora, incluso si a veces parecen caer en oídos sordos.
Comando fio: Evaluación del Rendimiento del Disco
El comando "fio" es una potente herramienta de prueba de E/S que genera múltiples hilos o procesos para simular diferentes tipos de acciones de E/S definidas por el usuario. Fio utiliza una serie de parámetros globales, los cuales pueden ser heredados por hilos o procesos posteriores, a menos que se anulen en configuraciones posteriores. El uso más común de fio implica la creación de un archivo de trabajo que coincide con el tipo de carga de E/S que deseamos simular.
Con esta herramienta, podemos evaluar el rendimiento de lectura y escritura de los discos, lo que resulta invaluable para conocer las limitaciones de E/S de nuestro servidor. Esto proporciona una base sólida para argumentar la necesidad de recursos adicionales, particularmente en entornos críticos donde el rendimiento del disco es esencial.
En resumen, al conocer y utilizar estas tres herramientas, podremos medir de manera precisa el rendimiento de los discos de nuestro servidor, lo que nos permitirá respaldar nuestras peticiones de recursos adicionales con datos concretos, incluso si no siempre obtenemos la respuesta que esperamos. La información obtenida de estas pruebas de rendimiento es esencial para garantizar el funcionamiento óptimo de nuestras aplicaciones en entornos críticos.
Creamos un archivo por ejemplo: test.fio
Que contendrá:
[random-read]
rw=randread
# Las pruebas pueden ser 128, 256 o 512 m
size=256m
# Haremos una prueba de rendimiento de la partición montada
# que queremos.
directory=/var/www/html
Ejecutaremos la prueba:
fio test.fio
Y la salida será:
random-read: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1 fio-3.7 Starting 1 process random-read: Laying out IO file (1 file / 256MiB) Jobs: 1 (f=1): [r(1)][100.0%][r=1520KiB/s,w=0KiB/s][r=380,w=0 IOPS][eta 00m:00s] random-read: (groupid=0, jobs=1): err= 0: pid=18853: Wed Oct 18 11:29:06 2023 read: IOPS=443, BW=1773KiB/s (1815kB/s)(256MiB/147885msec) clat (usec): min=113, max=79962, avg=2253.26, stdev=1211.66 lat (usec): min=113, max=79962, avg=2253.55, stdev=1211.66 clat percentiles (usec): | 1.00th=[ 848], 5.00th=[ 1958], 10.00th=[ 1975], 20.00th=[ 1975], | 30.00th=[ 1991], 40.00th=[ 1991], 50.00th=[ 1991], 60.00th=[ 2008], | 70.00th=[ 2008], 80.00th=[ 2024], 90.00th=[ 3032], 95.00th=[ 4015], | 99.00th=[ 5997], 99.50th=[ 6063], 99.90th=[10028], 99.95th=[14091], | 99.99th=[55837] bw ( KiB/s): min= 752, max= 4816, per=100.00%, avg=1772.60, stdev=430.64, samples=295 iops : min= 188, max= 1204, avg=443.15, stdev=107.67, samples=295 lat (usec) : 250=0.72%, 500=0.08%, 750=0.08%, 1000=0.41% lat (msec) : 2=53.94%, 4=39.34%, 10=5.33%, 20=0.08%, 50=0.01% lat (msec) : 100=0.01% cpu : usr=0.20%, sys=1.60%, ctx=72523, majf=0, minf=12 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=65536,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): READ: bw=1773KiB/s (1815kB/s), 1773KiB/s-1773KiB/s (1815kB/s-1815kB/s), io=256MiB (268MB), run=147885-147885msec Disk stats (read/write): ploop53972: ios=74076/3488, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
Lo que está marcado en negrita, es de lo que nos tendremos que fijar.
También tenemos que tener en cuenta, que un servidor virtual nunca dará el mismo rendimiento que nuestro ordenador o un servidor físico.
Puedes borrar el fichero creado por la prueba, descrito en test.fio, y volver a ejecutar la prueba (para este caso en /var/www/html/), hazlo siempre cuando tenga menos tráfico para que te muestre una estadística más real.
Optimización de Rendimiento en GNU/Linux: Herramienta iostat
El comando iostat es una herramienta esencial que todo administrador de sistemas GNU/Linux debe dominar. iostat permite supervisar y comprender en profundidad los parámetros de entrada/salida de los diversos dispositivos del sistema, lo que facilita la observación de los distintos ratios de transferencia de datos.
Dicho software suele estar en el paquete "sysstat", para instalarlo, en Fedora, Rocky y AlmaLinux, RHEL, bastará ejecutar:
sudo yum -y install sysstat
Y ejecutar la prueba:
iostat -d 2 3
Una de las salidas típicas de iostat se presenta de la siguiente manera:
root@myserver ~]# iostat -d 2 3
Linux 3.10.0 (vl-3440.panel-vps.com) 18/10/23 _x86_64_ (32 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
ploop53972 31,33 544,77 1027,75 139818925 263780264
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
ploop53972 40,00 0,00 164,00 0 328
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
ploop53972 4,00 10,00 96,00 20 192
Explicación:
-
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
: Estos encabezados describen las métricas que se presentarán a continuación. "tps" se refiere a transacciones por segundo, "kB_read/s" es la velocidad de lectura en kilobytes por segundo, "kB_wrtn/s" es la velocidad de escritura en kilobytes por segundo, "kB_read" es el total de kilobytes leídos y "kB_wrtn" es el total de kilobytes escritos. -
ploop53972
: Este es el nombre del dispositivo o partición en el que se están registrando las estadísticas. -
Las siguientes líneas proporcionan datos específicos sobre el dispositivo o partición. En tu caso, tienes tres conjuntos de datos, cada uno con tres líneas, que representan diferentes momentos en el tiempo. Cada conjunto de datos muestra métricas de I/O en ese instante.
A continuación, desglosaré una de las líneas de datos como ejemplo:
ploop53972
: Nuevamente, es el nombre del dispositivo o partición.tps
(transacciones por segundo): En este ejemplo, el dispositivo "ploop53972" está realizando aproximadamente 4 transacciones de E/S por segundo.kB_read/s
(velocidad de lectura en KB/s): Está leyendo datos a una velocidad de 10 kilobytes por segundo.kB_wrtn/s
(velocidad de escritura en KB/s): Está escribiendo datos a una velocidad de 96 kilobytes por segundo.kB_read
(total de KB leídos): Hasta el momento, se han leído un total de 20 kilobytes en el dispositivo "ploop53972".kB_wrtn
(total de KB escritos): Hasta el momento, se han escrito un total de 192 kilobytes en el dispositivo "ploop53972".
Las siguientes líneas proporcionan métricas para diferentes momentos en el tiempo. Esto te permite observar la evolución de las estadísticas de entrada/salida a lo largo del tiempo. En tu caso, la última línea muestra un aumento en la velocidad de escritura con 164 KB/s, lo que indica un mayor flujo de escritura en el dispositivo "ploop53972".
- tps
Es la transferencia a disco por segundo. - Bls_read/s (kB_read/s, MB_read/s)
Es la cantidad de bloques leídos por segundo. - Bls_wrtn/s (kB_wrtn/s, MB_wrtn/s)
Representa la cantidad de bloques escritos por segundo. - Blk_read (kB_read, MB_read)
Bloques totales leídos. - Blk_wrtn (kB_wrtn, MB_wrtn)
Bloques totales escritos.
Comando ioping
El comando ioping permite obtener el rendimiento del acceso a disco de un equipo al igual que si estuviésemos ejecutando un ping a la red.
Es una herramienta bastante simple y si no podemos obtenerlo por repositorios la compilación del programa es tan simple que ni siquiera necesita explicaciones adicionales, y como una imagen vale más que mil palabras os muestro un ejemplo de uso:
root@shell> ioping -c 10 -s 1M -D /tmp 1048576 bytes from /tmp (ext4 /dev/sda1): request=1 time=34.0 ms 1048576 bytes from /tmp (ext4 /dev/sda1): request=2 time=23.0 ms 1048576 bytes from /tmp (ext4 /dev/sda1): request=3 time=23.2 ms ... --- /tmp (ext4 /dev/sda1) ioping statistics --- 10 requests completed in 9268.4 ms, 37 iops, 37.4 mb/s min/avg/max/mdev = 23.0/26.7/34.0/4.4 ms
Por tanto, ioping permite obtener la latencia de entrada/salida de disco pudiéndonos ser útil para saber la potencia de lectura o escrita que el disco ofrece, empleando o no la caché. Las principales opciones que presenta son:
- -c count
Se ejecuta count veces y luego termina ofreciendo una estadística de resultados. - -s size
Establece el tamaño de la lectura/escritura que realizará. - -L
Realiza las operaciones de forma secuencial y no aleatorias. - -C
Comprueba la latencia del disco empleando la caché. - -D
Comprueba la latencia escribiendo en disco directamente.
Para más información, consultar la página de su manual.
Página oficial de ioping: code.google.com/ioping
Comando hdparm
El comando hdparm (que se encuentra ya instalado en la mayoría de las distribuciones Linux) es muy versátil, nos permite obtener información general acerca de nuestro disco duro y también permite realizar ajustes de configuración.
Sólo voy a hacer referencia a una combinación de parámetros que se puede usar para sacar estadísticas del rendimiento de nuestro disco duro, los que queráis saber todo lo que puede ofrecer este comando os sugiero que echéis un vistazo al manual de uso (man hdparm).
Para realizar la prueba de rendimiento tenemos que escribir lo siguiente:
root@shell> hdparm -tT /dev/sda /dev/sda: Timing cached reads: 7864 MB in 2.00 seconds = 3935.41 MB/sec Timing buffered disk reads: 204 MB in 3.00 seconds = 67.98 MB/sec
Bien, espero que vuestras pruebas de rendimiento den buenos resultados y estos comandos os sean de utilidad.
-
Linux
- ¿Por qué Torvalds eliminó a los encargados rusos del mantenimiento del núcleo de Linux?
- 10 cosas que siempre hago después de instalar Linux (y por qué tú también deberías hacerlo)
- 7 cosas que nunca hago después de instalar Linux (y por qué tú tampoco deberías)
- Detección de Intrusos: Snort, Base, MySQL, y Apache2 en Ubuntu Linux 7.10
- He utilizado Linux durante 30 años. Aquí hay 5 razones por las que nunca cambiaré a Windows o MacOS
- ¿Por qué no más personas usan Linux en el escritorio? Tengo una teoría que quizás no te guste.
- Los países occidentales ricos lideran la expansión mundial del petróleo y el gas
- Systemd 256.1 aborda la queja de que 'systemd-tmpfiles' podría eliminar inesperadamente su directorio /home
- Por qué un kernel Linux de distribución 'congelada' no es la mejor opción para la seguridad
- RebornOS es una versión hermosa y fácil de usar de Arch Linux con abundantes opciones de escritorio
- Linus Torvalds sobre el 'hilarante' bombo de la IA
- Cambiar la hora en Linux con Chrony
- Renombrar multiples archivos masivamente en Linux (quitar espacios, cambiar mayúsculas) a la vez en Linux
- Linux 6.9 será el primero en superar los 10 millones de objetos Git
- Zorin OS 17.1 lanzado con soporte mejorado para aplicaciones de Windows, edición educativa