Relación entre disco IOPS y sar tps

13

Estoy tratando de estimar los requisitos de IOPS de mi aplicación que se ejecuta en CentOS 6.2 de 32 bits. Comencé a tomar algunas medidas en una máquina con discos SATA y estoy bastante confundido acerca de la diferencia entre IOPS y tps medidos por sar.

Según wikipedia, el disco SATA debe realizar 75-100 IOPS. La utilidad ioping parece confirmar esto para la prueba de acceso aleatorio:

# ./ioping -R /dev/sda
--- /dev/sda (device 931.0 Gb) ioping statistics ---
279 requests completed in 3.0 s, 92 iops, 371.3 kb/s
min/avg/max/mdev = 2.7 ms / 10.8 ms / 130.8 ms / 7.9 ms

Pero los valores tps producidos por sar son mucho más altos (/ dev / sda):

# iostat 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       0.17    0.00    2.02   14.86    0.00   82.96

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             559.00         0.00    142600.00          0     142600
dm-0          18433.00         0.00    147464.00          0     147464
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

Realmente no le importa si esta carga es secuencial (dd con varios tamaños de bloque) o acceso aleatorio (ioping), el valor sigue siendo el mismo. Pensé que tps en realidad es IOPS y esperaría que bajara con trozos más grandes transferidos.

Entonces, ¿qué significa exactamente el valor tps? ¿Y cómo se relaciona con IOPS?

pístole
fuente
2
Creo que está viendo IOPS más altos en el valor de TPS debido a la caché de disco.
ceejayoz
1
Ok, probé un archivo de 10GB a través de dd con un bloque de 256kB para llenar realmente el caché y después de ~ 90 segundos tps cae a ~ 200, así que tal vez tengas razón. Pero aún así 80 y 200 es una gran diferencia ... ¿Es posible que leer y escribir IOPS difieran? ¿Y hay alguna forma de averiguar los IOPS requeridos a partir de este valor?
pystole
1
¿Puedes describir por qué buscas IOPS? leer y escribir son un par de zapatos bastante diferentes que se arrojan a la misma olla aquí.
Nils
La razón es que necesito describir los requisitos mínimos de HW. Tengo un servidor que recibe datos a través de la red (aquí podemos asumir una tasa de bits constante) y escribe los datos recibidos en el disco. Los datos se escriben en archivos de forma secuencial, pero podría haber cientos (por ejemplo, 800) en paralelo. He descubierto que cuando el número de clientes llega a algún punto, empiezo a recibir grandes iowaits. El rendimiento real del disco que puedo lograr es de aproximadamente 25 MB / s, que es bastante bajo, menos clientes con una tasa de bits más alta pueden hacer 35 MB / s, secuencialmente pura de aproximadamente 130 MB / s. Así que supongo que IOPS es lo que importa aquí ...
pystole

Respuestas:

6

Las transacciones son comandos de E / S individuales (bloque de captación / bloque de escritura) que se escriben en el disco RAW (en su ejemplo dm-0). El kernel de linux intenta ordenar esos comandos en una secuencia mejor o intenta comprimirlos en comandos más eficientes (como: obtener dos bloques a la vez en lugar de obtener un bloque y obtener otro bloque justo después de este). Estas son las transacciones que salen al controlador de disco (tps para sda).

Los buenos controladores migth tienen una lógica propia que reduce aún más el número real de transacciones.

Una transacción podría ser el comando SCSI "escribir 2 GB en crontoller 1 target 2 lun 3 a partir del sector 22). Como puede ver, esto no se puede poner en correlación directa con los números de rendimiento.

Lo que buscas es la tasa de escritura sostenida. Tienes un par de factores limitantes aquí:

  • conexión de cliente: si la red es Gigabit, nunca tendrá más de 100 MB / s de entrada
  • controlador de disco: si se trata de un controlador de 3 Gb, nunca tendrá un rendimiento de más de 300 MB / s
  • disco: busque el valor del fabricante para un rendimiento de escritura sostenido
  • Sistema de archivos: hay un poco de sobrecarga, ya que el sistema operativo necesita procesar datos, pruébelo en un disco RAM ...

Supongo que su sistema es: Obtenga un buen controlador de incursión de hardware que sea capaz de realizar incursiones 10 o 5 y obtenga al menos 6 discos rápidos (15k).

Para uso profesional, use SAS en lugar de SATA.

Nils
fuente
Ok, tienes razón IOPS no tiene ningún sentido para las escrituras ya que hay muchas cachés, reordenamientos y fusiones involucradas. Cerrando ... Gracias.
pystole
5

También tenga en cuenta que el TPSvalor representa lecturas y escrituras, puede usar el -xinterruptor para una vista extendida donde las lecturas y escrituras están separadas (r / s = leer IOPS, w / s = escribir IOPS):

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
vda               0.07    24.65    0.30   18.95    30.65   330.22    18.74     0.07    3.61   0.98   1.89
HTF
fuente
Si, tienes razón. Pero en mi caso hay casi el 100% de las escrituras, las lecturas son casi nulas.
pystole