
Persiguiendo los cuellos de botella en disco
He hecho un artículo en el cual detallo todo esto esto. Está en este artículo por si no lo has visto, donde está detallado todo el proceso, y los comandos que uso junto a sus parámetros.
También están el artículo y el vídeo donde hay mucha más información que asumo ya y que no quiero repetir en este artículo.
Objetivo. Analizar la lectura y escritura en disco
El parámetro -F
que como podéis ver en el vídeo, me equivoco, determina el destino y origen de la carga que mueve iperf por la red.
En nuestro caso, vamos a analizar lectura de un SSD, lectura de un par de discos mecánicos y escritura, en disco mecánico esta vez porque es lo que tendrán los servidores de virtualización.
La metodología dista bastante de ser perfecta puesto que ni en todo momento la lectura o escritura en disco es lineal ni en todo momento los ficheros son grandes y secuenciales.
Con esto puedo aspirar a saber un límite mínimo realista, que se acerque a la realidad sin serlo.
Primer concepto, el fichero dummy
Lo primero que voy a hacer es crear un fichero con el que jugar, y lo voy a hacer con powershell.
Esto me va a permitir no depender de múltiples fuentes, y en el vídeo me ha servido para ahorrarme tiempos.
La triste realidad es que seguramente no necesite solo uno, si no varios, por temas de cachés y demás
Creación de un fichero via API de .net
Al igual que en linux haríamos con dd if=/dev/null of=./test.vmdk bs=1M count=500
en windows también puedo crear un fichero vacío con powershell.
$fichero = new-object System.IO.FileStream .\test.vmdk, Create, ReadWrite
$fichero.SetLength(500MB)
$fichero.Close()
Con eso creamos la estructura en la tabla de archivos, con un descriptor a un fichero abierto con un nombre, le añadimos un tamaño y cerramos el fichero.
¿Servidor en linux? Mejor aún
En el caso de leer varias veces el mismo fichero, lo que conseguiremos es que “prefetcher”, “superfetch”, y todos esos derivados del viejo “smartdrv” que hacen de caché de disco, nos sirvan los datos de memoria. Para ello, es bueno crear, usar y destruir.
Pero en linux hay otra opción, que es limpiar manualmente y reiniciar el uso de caché durante la prueba, eso si, como root:
sync; echo 3 > /proc/sys/vm/drop_caches
Esto lo que hace es escribir a disco los buffers, poner el valor 3 en drop_caches
y reiniciar el almacenamiento y uso de sus funcionalidades.
Básicamente será:
- Mientras queda prueba
- Ejecuto prueba
- Limpio caché
- Vuelvo a ver si queda prueba
Segundo concepto. La metodología
Esto es muy simple.
La idea es seguir y localizar en que punto mi flujo de datos en disco es más lento que el canal de red que estoy usando.
Como base, tenemos la topología de red y adaptadores diseñada a raíz de las pruebas del artículo anterior
Para afinar, las pruebas serán:
- Desde ordenador MII con SSD, lectura de SSD a Servidor Dell a memoria. Con eso veremos la velocidad de lectura.
- Desde ordenador MII con SSD, lectura de USB a Servidor Dell a memoria. Con eso veremos la velocidad de lectura del disco externo
- Desde el ordenador MII, escritura en Servidor Dell en disco mecánico interno. Vamos a ver que disco es más viable.
- Desde el ordenador MII, escritura en Servidor Dell en disco mecánico externo. Vamos a ver que disco es más viable y se repetirá en un par de ocasiones.
El resultado más lento nos determinará el disco menos apto y obraré en consecuencia.
Esta es mi guía para localizar cuellos de botella en esta infraestructura.
Las pruebas
Pues igual que en artículo anterior, voy a probar varias veces a ver que resultados obtengo.
Prueba 1a
Desde ordenador MII con SSD, lectura de SSD a Servidor Dell a memoria.
Con eso veremos la velocidad de lectura.
PS C:\Users\Sistemas\Downloads> .\iperf3.exe -c 169.254.76.145 -F .\test.vmdk
Connecting to host 169.254.76.145, port 5201
[ 4] local 169.254.124.136 port 59041 connected to 169.254.76.145 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-0.56 sec 59.6 MBytes 891 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-0.56 sec 59.6 MBytes 891 Mbits/sec sender
Sent 59.6 MByte / 500 MByte (11%) of .\test.vmdk
[ 4] 0.00-0.56 sec 59.6 MBytes 891 Mbits/sec receiver
iperf Done.
Prueba 1b
Desde ordenador MII con SSD, lectura de USB a Servidor Dell a memoria.
Con eso veremos la velocidad de lectura del disco externo Toshiba.
PS C:\Users\Sistemas\Downloads> .\iperf3.exe -c 169.254.76.145 -F 'd:\copiavm.vmdk'
Connecting to host 169.254.76.145, port 5201
[ 4] local 169.254.124.136 port 59043 connected to 169.254.76.145 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.01 sec 48.0 MBytes 399 Mbits/sec
[ 4] 1.01-2.00 sec 53.4 MBytes 450 Mbits/sec
[ 4] 2.00-3.01 sec 50.5 MBytes 423 Mbits/sec
[ 4] 3.01-4.00 sec 51.2 MBytes 432 Mbits/sec
[ 4] 4.00-5.00 sec 50.9 MBytes 426 Mbits/sec
[ 4] 5.00-6.01 sec 52.5 MBytes 439 Mbits/sec
[ 4] 6.01-7.02 sec 52.8 MBytes 438 Mbits/sec
[ 4] 7.02-8.02 sec 52.5 MBytes 438 Mbits/sec
[ 4] 8.02-9.01 sec 50.6 MBytes 431 Mbits/sec
[ 4] 9.01-10.01 sec 55.0 MBytes 457 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.01 sec 517 MBytes 433 Mbits/sec sender
Sent 517 MByte / 5.30 GByte (9%) of d:\copiavm.vmdk
[ 4] 0.00-10.01 sec 517 MBytes 433 Mbits/sec receiver
iperf Done.
Prueba 1c
Desde ordenador MII con SSD, lectura de USB a Servidor Dell a memoria.
Con eso veremos la velocidad de lectura del disco externo Seagate.
PS C:\Users\Sistemas\Downloads> .\iperf3.exe -c 169.254.76.145 -F 'e:\New folder\ghost.gho'
Connecting to host 169.254.76.145, port 5201
[ 4] local 169.254.124.136 port 59056 connected to 169.254.76.145 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 85.4 MBytes 715 Mbits/sec
[ 4] 1.00-2.00 sec 91.5 MBytes 767 Mbits/sec
[ 4] 2.00-3.00 sec 90.0 MBytes 754 Mbits/sec
[ 4] 3.00-4.01 sec 77.4 MBytes 648 Mbits/sec
[ 4] 4.01-5.01 sec 86.2 MBytes 723 Mbits/sec
[ 4] 5.01-6.00 sec 89.8 MBytes 755 Mbits/sec
[ 4] 6.00-7.00 sec 92.0 MBytes 774 Mbits/sec
[ 4] 7.00-8.01 sec 80.2 MBytes 664 Mbits/sec
[ 4] 8.01-9.01 sec 71.8 MBytes 607 Mbits/sec
[ 4] 9.01-9.50 sec 40.8 MBytes 692 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-9.50 sec 805 MBytes 711 Mbits/sec sender
Sent 805 MByte / 1.23 GByte (63%) of e:\New folder\ghost.gho
[ 4] 0.00-9.50 sec 805 MBytes 711 Mbits/sec receiver
iperf Done.
Prueba 2a
Desde el ordenador MII, escritura en Servidor Dell en disco mecánico interno.
Vamos a ver que disco es más viable.
PS C:\users\equipo\Downloads> .\iperf3.exe -s -F Ficherobasura
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 169.254.124.136, port 59059
[ 5] local 169.254.76.145 port 5201 connected to 169.254.124.136 port 59060
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.03 sec 5.14 MBytes 41.9 Mbits/sec
[ 5] 1.03-2.02 sec 5.88 MBytes 49.6 Mbits/sec
[ 5] 2.02-3.04 sec 5.88 MBytes 48.5 Mbits/sec
[ 5] 3.04-4.02 sec 5.62 MBytes 48.0 Mbits/sec
[ 5] 4.02-5.03 sec 5.75 MBytes 47.9 Mbits/sec
[ 5] 5.03-6.02 sec 6.25 MBytes 52.9 Mbits/sec
[ 5] 6.02-7.03 sec 6.00 MBytes 49.8 Mbits/sec
[ 5] 7.03-8.04 sec 6.38 MBytes 53.1 Mbits/sec
[ 5] 8.04-9.09 sec 6.12 MBytes 49.0 Mbits/sec
[ 5] 9.09-10.02 sec 5.12 MBytes 46.0 Mbits/sec
[ 5] 10.02-10.03 sec 0.00 Bytes 0.00 bits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.03 sec 0.00 Bytes 0.00 bits/sec sender
Sent 0.00 Byte / 58.1 MByte (0%) of Ficherobasura
[ 5] 0.00-10.03 sec 58.1 MBytes 48.6 Mbits/sec receiver
Prueba 2b
Desde el ordenador MII, escritura en Servidor Dell en disco mecánico externo.
Vamos a ver que disco es más viable igual que la lectura. Primero con Seagate.
PS C:\users\equipo\Downloads> .\iperf3.exe -s -F d:\Ficherobasura
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 169.254.124.136, port 50880
[ 5] local 169.254.76.145 port 5201 connected to 169.254.124.136 port 50881
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.08 sec 3.14 MBytes 24.3 Mbits/sec
[ 5] 1.08-2.05 sec 3.12 MBytes 27.1 Mbits/sec
[ 5] 2.05-3.04 sec 3.75 MBytes 31.8 Mbits/sec
[ 5] 3.04-4.06 sec 3.25 MBytes 26.7 Mbits/sec
[ 5] 4.06-5.05 sec 2.75 MBytes 23.3 Mbits/sec
[ 5] 5.05-6.06 sec 2.75 MBytes 22.8 Mbits/sec
[ 5] 6.06-7.07 sec 2.75 MBytes 22.8 Mbits/sec
[ 5] 7.07-8.09 sec 2.75 MBytes 22.8 Mbits/sec
[ 5] 8.09-9.09 sec 2.75 MBytes 23.1 Mbits/sec
[ 5] 9.09-10.01 sec 2.38 MBytes 21.6 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.01 sec 0.00 Bytes 0.00 bits/sec sender
Sent 0.00 Byte / 29.4 MByte (0%) of d:\Ficherobasura
[ 5] 0.00-10.01 sec 29.4 MBytes 24.6 Mbits/sec receiver
Prueba 2c
Desde el ordenador MII, escritura en Servidor Dell en disco mecánico externo. Vamos a ver que disco es más viable, ahora con Toshiba.
PS C:\users\equipo\Downloads> .\iperf3.exe -s -F d:\Ficherobasura
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 169.254.124.136, port 59061
[ 5] local 169.254.76.145 port 5201 connected to 169.254.124.136 port 59062
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 40.6 MBytes 340 Mbits/sec
[ 5] 1.00-2.11 sec 42.1 MBytes 320 Mbits/sec
[ 5] 2.11-3.01 sec 42.4 MBytes 394 Mbits/sec
[ 5] 3.01-4.00 sec 43.5 MBytes 368 Mbits/sec
[ 5] 4.00-5.02 sec 44.8 MBytes 370 Mbits/sec
[ 5] 5.02-6.00 sec 49.1 MBytes 418 Mbits/sec
[ 5] 6.00-7.01 sec 54.0 MBytes 449 Mbits/sec
[ 5] 7.01-8.00 sec 48.6 MBytes 411 Mbits/sec
[ 5] 8.00-9.00 sec 53.0 MBytes 445 Mbits/sec
[ 5] 9.00-10.00 sec 54.9 MBytes 461 Mbits/sec
[ 5] 10.00-10.00 sec 0.00 Bytes 0.00 bits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.00 sec 0.00 Bytes 0.00 bits/sec sender
Sent 0.00 Byte / 473 MByte (0%) of d:\Ficherobasura
[ 5] 0.00-10.00 sec 473 MBytes 397 Mbits/sec receiver
Prueba 2d
Desde el ordenador MII, escritura en Servidor Dell en disco mecánico externo. Vamos a ver que disco es más viable, ahora con Toshiba, pero en un puerto USB 2.0
PS C:\users\equipo\Downloads> .\iperf3.exe -s -F d:\Ficherobasura
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 169.254.124.136, port 50880
[ 5] local 169.254.76.145 port 5201 connected to 169.254.124.136 port 50881
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.08 sec 3.14 MBytes 24.3 Mbits/sec
[ 5] 1.08-2.05 sec 3.12 MBytes 27.1 Mbits/sec
[ 5] 2.05-3.04 sec 3.75 MBytes 31.8 Mbits/sec
[ 5] 3.04-4.06 sec 3.25 MBytes 26.7 Mbits/sec
[ 5] 4.06-5.05 sec 2.75 MBytes 23.3 Mbits/sec
[ 5] 5.05-6.06 sec 2.75 MBytes 22.8 Mbits/sec
[ 5] 6.06-7.07 sec 2.75 MBytes 22.8 Mbits/sec
[ 5] 7.07-8.09 sec 2.75 MBytes 22.8 Mbits/sec
[ 5] 8.09-9.09 sec 2.75 MBytes 23.1 Mbits/sec
[ 5] 9.09-10.01 sec 2.38 MBytes 21.6 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.01 sec 0.00 Bytes 0.00 bits/sec sender
Sent 0.00 Byte / 29.4 MByte (0%) of d:\Ficherobasura
[ 5] 0.00-10.01 sec 29.4 MBytes 24.6 Mbits/sec receiver
Resumen y resultado
Como vemos tenemos las siguientes velocidades:
Prueba | Tipo | elemento medido | Resultado |
---|---|---|---|
1a | Lectura a RAM | Disco SSD SK Hynix M.2 | 891 Mbits/sec |
1b | Lectura a RAM | Toshiba MQ01 ABD100 USB 3.0 UASP | 433 Mbits/sec |
1c | Lectura a RAM | Seagate ST1000LM35 USB 3.0 UASP | 711 Mbits/sec |
2a | Escritura desde RAM | WDC WD5000 SATA3 | 48.6 Mbits/sec |
2b | Escritura desde RAM | Seagate ST1000LM35 USB 3.0 UASP | 24.6 Mbits/sec |
2c | Escritura desde RAM | Toshiba MQ01 ABD100 USB 3.0 UASP | 397 Mbits/sec |
2d | Escritura desde RAM | Toshiba MQ01 ABD100 USB 2.0 | 24.6 Mbits/sec |
Esto significa que no vamos a encontrarnos problemas significativos de lectura si no que la lucha estará en la escritura.
Y es en escritura donde, a Falta de confirmarlo, parece ser que el peor de los discos, el Toshiba, mejora en rendimiento de escritura a discos de 7200 RPM en principio superiores a las 5400 RPM del Toshiba.
Ante las dudas, si, he repetido varias veces las pruebas y arroja esos resultados.
Así, tal como dije en el vídeo, el flujo será de lectura del M.2 a escritura en el WD, o puede que en el Toshiba, y con esto ya queda localizado viendo donde y como podemos hacer las siguientes pruebas.
Hasta la proxima.
YoVirtualizador en formato podcast. Ahora también en Sospechosos Habituales: https://feedpress.me/sospechososhabituales
Y sin más, os dejo los enlaces:
Web: https://www.yovirtualizador.com
Grupo de telegram: https://t.me/grupovirtualizador
Podcast: https://www.ivoox.com/podcast-yovirtualizador_fg_f1563806_filtro_1.xml
Canal de youtube: https://www.youtube.com/channel/UC0R70cABSsmC6TFyXth0qPg
Enlace de afiliados de amazon: https://amzn.to/3gX3HmK
Enlace de referidos de la Asociación Podcast: https://www.asociacionpodcast.es/registrarse/socio/?coupon=SB6A70