LinuxParty
No sé si os ha pasado alguna vez que cuando nos dan un nuevo servidor para poner en producción la aplicación X resulta que siempre os toca el técnico tacaño en el departamento de aprovisionamiento y os ofrece un entorno de risa.
Lo más habitual (por desgracia) es que cuando nos faciliten un servidor virtual éste esté bastante limitado en cuanto a I/O y en concreto velocidad de disco. En la mayoría de las veces nos podría igual, pero en entornos serios esto se vuelve un gran problema y conviene determinar desde primer momento qué velocidades de disco (lectura y escritura) tiene nuestro entorno.
Voy a comentar el uso de tres herramientas para determinar el rendimiento de los discos duros. Existen muchas otras maneras de determinarlo, pero personalmente considero que con emplear estas tres herramientas tenemos más que suficiente para usarlo como referencia y quejarnos para aumento de recursos (aunque luego nos ignoren…)
Comando fio
(La prueba que podrás hacer en servidores virtuales)
"fio" es una herramienta de E/S que genera un número de hilos o procesos haciendo un tipo particular de acción de E/S como se especifica por el usuario. Fio toma número de parámetros globales, cada uno heredado por el hilo anterior, a menos que dichos parámetros sean anulandos de esa configuración se les dará por defecto.
El uso típico de fio es escribir un archivo de trabajo que coincida con el de carga io se quiere simular.
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=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1 fio-2.0.13 Starting 1 process Jobs: 1 (f=1): [r] [96.8% done] [2576K/0K/0K /s] [644 /0 /0 iops] [eta 00m:04s] random-read: (groupid=0, jobs=1): err= 0: pid=17076: Sat Sep 19 15:59:22 2015 read : io=131072KB, bw=1093.9KB/s, iops=273 , runt=119829msec clat (usec): min=83 , max=1878.6K, avg=3651.50, stdev=15990.11 lat (usec): min=83 , max=1878.6K, avg=3651.78, stdev=15990.11 clat percentiles (usec): | 1.00th=[ 183], 5.00th=[ 205], 10.00th=[ 233], 20.00th=[ 972], 30.00th=[ 1704], 40.00th=[ 2352], 50.00th=[ 2960], | 60.00th=[ 3536], 70.00th=[ 4128], 80.00th=[ 4704], 90.00th=[ 6304], 95.00th=[ 8160], 99.00th=[14528], 99.50th=[23168], | 99.90th=[59136], 99.95th=[333824], 99.99th=[651264] bw (KB/s) : min= 71, max= 4509, per=100.00%, avg=1119.92, stdev=468.90 lat (usec) : 100=0.02%, 250=13.21%, 500=4.75%, 750=0.84%, 1000=1.43% lat (msec) : 2=14.33%, 4=33.18%, 10=29.89%, 20=1.74%, 50=0.50% lat (msec) : 100=0.04%, 250=0.02%, 500=0.03%, 750=0.01%, 1000=0.01% lat (msec) : 2000=0.01% cpu : usr=0.24%, sys=1.07%, ctx=34490, majf=1, minf=24 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 : total=r=32768/w=0/d=0, short=r=0/w=0/d=0 Run status group 0 (all jobs): READ: io=131072KB, aggrb=1093KB/s, minb=1093KB/s, maxb=1093KB/s, mint=119829msec, maxt=119829msec
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.
NO TODAS LAS PRUEBAS DESCRITAS ABAJO PUEDEN HACERSE EN ALGUNOS SERVIDORES VIRTUALES.
Comando iostat
root@shell> iostat Linux 2.6.32-5-686 (desktop) 03/31/13 _i686_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 4,25 0,00 1,01 0,51 0,00 94,22 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 7,32 66,51 112,61 835334 1414278
root@shell> iostat -d 2 3 Linux 2.6.32-5-686 (desktop) 03/31/13 _i686_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 11,79 210,97 95,91 1171053 532364 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 2,79 80,45 0,00 144 0 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 24,16 0,00 191,01 0 340
- 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.
En sistemas operativos Ubuntu se encuentra en repositorios y en caso de Debian de momento sólo en la rama testing, sin embargo 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.
-
Virtualización
- VirtualBox 7.1.4 agrega soporte inicial para Linux Kernel 6.12 y otros cambios de Linux
- VirtualBox 7.1 promete soporte Wayland para compartir portapapeles en Linux
- VirtualBox 7.0.20 presenta soporte inicial para los kernels openSUSE 15.6 y RHEL 9.5
- VirtualBox 7.0.16 lanzado con soporte inicial para los kernels Linux 6.8 y 6.9
- Instalar un Sistema Operativo Invitado en VirtualBox
- Publicación de QEMU 8.0 para Linux, Windows y Mac con más emulación ARM y RISC-V
- Realidad Virtual, una revolución para el modelo digital de ocio
- Cómo instalar QEMU/KVM en Ubuntu para crear máquinas virtuales
- Cómo instalar VirtualBox 7.0 en AlmaLinux
- Cómo ejecutar aplicaciones de Android en Linux mediante Anbox
- Multipass: ejecutar varias VMs Ubuntu Linux bajo Demanda para cualquier sistema Linux
- Cómo usar máquinas virtuales Virtualbox en KVM en Linux
- Cómo clonar y crear una plantilla de máquina virtual KVM
- Gestión de máquinas virtuales KVM con Cockpit Web Console en Linux
- Cómo crear máquinas virtuales en Linux usando KVM (máquina virtual basada en kernel)