¿Por qué importan los IOPS?

32

Entiendo lo que son IOPS y rendimiento. El rendimiento mide el flujo de datos como MB / sy IOPS dice cuántas operaciones de E / S están ocurriendo por segundo.

Lo que no entiendo es por qué muchos servicios de almacenamiento solo muestran los IOPS que proporcionan. Realmente no puedo ver ningún escenario en el que preferiría conocer el IOPS en lugar del rendimiento.

¿Por qué importan los IOPS? ¿Por qué AWS muestra principalmente sus disposiciones de almacenamiento en IOPS? ¿Dónde son las IOPS más relevantes que el rendimiento (MB / s)?


EDITAR:

Algunas personas están analizando esta pregunta como si yo preguntara qué es el acceso aleatorio y cómo afecta el rendimiento o cómo funcionan las unidades de disco duro y SSD ... aunque creo que esta información es útil para las personas nuevas en el comportamiento de almacenamiento, se está aplicando mucho enfoque. a esto y no es el objetivo de la pregunta, la pregunta es "¿Qué nueva información obtengo cuando veo un número IOPS, que no vería un número de rendimiento (MB / s)?"

mFeinstein
fuente
3
Si desea mover datos grandes, le importa el rendimiento. Si necesita manejar muchos datos pequeños, necesita más IOPS. eg1 Si hay una sola operación que puede leer MB de datos del dispositivo, entonces solo necesita 1 operación para obtener un alto rendimiento. eg2 Si necesita leer docenas de atributos de archivo, no está buscando una gran cantidad de datos cada vez, pero necesita realizar muchas operaciones para obtener pequeños bits de datos. El rendimiento sería bajo pero necesitaría muchas operaciones.
TafT

Respuestas:

32

Rendimiento

El rendimiento es útil cuando haces cosas como copiar archivos. Cuando estás haciendo casi cualquier otra cosa, son lecturas y escrituras aleatorias en el disco que te limitarán.

IOPS

IOPS generalmente especifica el tamaño de cada paquete de datos. Por ejemplo, AWS gp2 puede hacer 10,000 IOPS con un tamaño de carga útil de 16 KiB . Eso se multiplica a 160MiB / seg. Sin embargo, es poco probable que use el tamaño de la carga útil todo el tiempo, por lo que el rendimiento real probablemente sea menor. NB KiB es 1024 bytes, KB es 1000 bytes.

Debido a que IOPS especifica un tamaño de paquete que también le brinda un rendimiento total. Mientras que el alto rendimiento no significa que tenga IOPS altos.

Escenarios

Considere estos escenarios:

  • Arrancando tu PC. Considere la diferencia entre un SSD y un disco giratorio en su computadora, que es algo con lo que muchas personas tienen experiencia de primera mano. Con un disco giratorio, el tiempo de arranque puede ser de un minuto, mientras que con un SSD puede reducirse a 10-15 segundos. Esto se debe a que un mayor IOPS conduce a una menor latencia cuando se solicita información. El rendimiento del disco giratorio es bastante bueno, 150 MB / s, aunque es probable que el SSD sea más alto, no es por eso que sea más rápido: es la menor latencia para devolver información.
  • Ejecutando una actualización del sistema operativo. Está yendo por todo el disco, agregando y parcheando archivos. Si tuviera un IOPS bajo, sería lento, independientemente del rendimiento.
  • Ejecutar una base de datos, por ejemplo, seleccionar una pequeña cantidad de datos de una gran base de datos. Leerá del índice, leerá de una serie de archivos y luego devolverá un resultado. Nuevamente, va por todo el disco para recopilar la información.
  • Jugar un juego en tu PC. Es probable que cargue una gran cantidad de texturas de todo el disco. En este caso, es probable que se requiera IOPS y rendimiento.

Cinta LTO

Considere por un momento un sistema de copia de seguridad en cinta. LTO6 puede hacer 400 MB / seg, pero (supongo que aquí) probablemente ni siquiera puede hacer un IOP aleatorio, podría ser tan bajo como segundos por IOP. Por otro lado, probablemente pueda hacer una gran cantidad de IOPS secuenciales, si un IOPS se define como leer o escribir un paquete de datos en una cinta.

Si intentara arrancar un sistema operativo sin cinta, tomaría mucho tiempo, si funcionara. Es por eso que IOPS suele ser más útil que el rendimiento.

Para comprender un dispositivo de almacenamiento, es probable que desee saber si es IOPS aleatorio o secuencial, y el tamaño de IO. De eso se puede derivar el rendimiento.

AWS

Tenga en cuenta que AWS publica tanto IOPS como cifras de rendimiento para todos sus tipos de almacenamiento, en esta página . El SSD de propósito general (gp2) puede hacer 10,000 16KiB IOPS, lo que da un máximo de 160MB / seg. Los IOPS aprovisionados (io1) son 20,000 16KiB IOPS, lo que da un máximo de 320MB / seg.

Tenga en cuenta que con los volúmenes gp2 obtiene 30IOPS por GB aprovisionado, por lo que para obtener 10,000 IOPS necesita un volumen de 333.33GB. No recuerdo si los volúmenes io1 tienen una limitación similar (ha pasado un tiempo desde que hice los exámenes asociados donde se prueba ese tipo de cosas), pero sospecho que sí, y si es así, es probable que sea 60IOPS por GB.

Conclusión

El alto rendimiento secuencial es útil, y en algunos casos es el factor limitante para el rendimiento, pero es probable que un IOPS alto sea más importante en la mayoría de los casos. Por supuesto, aún necesita un rendimiento razonable independientemente de IOPS.

Tim
fuente
Entiendo que IOPS mide el rendimiento de acceso aleatorio, pero en realidad no muestra qué tan rápido está haciendo las cosas ... podría estar haciendo 10000 IOPS, pero esto podría ser algo lento o rápido, la única forma de saber es saber cuántos MB / s la operación está consumiendo.
mFeinstein
IOPS generalmente especifica el tamaño de la carga útil de datos. AWS dice 16KiB. Entonces, 10,000 IOPS a 16KiB / s te dan 160MB / seg.
Tim
2
Sin embargo, 10000 IOPS a 16 KB no se traducirán a 20000 IOPS a 8 KB (quizás ~ 11000). Esto significa que uno necesita conocer tanto IOPS como el rendimiento para evaluar una unidad / carga de trabajo.
boot4life
44
Solo para ser pedante, sigue siendo 1 IOPS, no 1 IOP. El s no es un plural
Matthew Steeples
1
No puedo pensar en ningún otro. La mayoría de las cosas que tienen un IOPS alto tienen un rendimiento razonablemente alto, pero en la mayoría de los casos son útiles debido al IOPS, no al rendimiento. Otro ejemplo podría ser una base de datos relacional, aunque no es un dispositivo de almacenamiento, es un software. No estoy seguro de qué más quieres de esta pregunta, creo que el concepto te ha sido explicado a fondo. Cualquier cosa con un alto tiempo de búsqueda o latencia probablemente tenga IOPS bajos, pero el rendimiento puede ser desacoplado y ser alto en algunos casos.
Tim
57

Esto se debe a que el rendimiento secuencial no es cómo ocurre la mayor parte de la actividad de E / S.

Las operaciones de lectura / escritura aleatorias son más representativas de la actividad normal del sistema, y ​​eso generalmente está sujeto a IOPS.

La transmisión de pornografía desde uno de mis servidores a nuestros clientes (o la carga en nuestro CDN) es de naturaleza más secuencial y verá el impacto del rendimiento allí.

Pero mantener la base de datos que cataloga la pornografía y rastrea la actividad del usuario a través del sitio será de naturaleza aleatoria y estará limitada por el número de pequeñas operaciones de E / S / segundo que el almacenamiento subyacente es capaz de hacer.

Es posible que necesite 2.000 IOPS para poder ejecutar las bases de datos en el uso máximo, pero es posible que solo vea un rendimiento de 30 MB / s a ​​nivel de disco debido al tipo de actividad. Los discos tienen capacidad para 1200 MB / s, pero los IOPS son la limitación en el entorno.

Esta es una forma de describir el potencial de capacidad de un sistema de almacenamiento. Un SSD puede tener la capacidad de realizar 80,000 IOPS y 600 MB / s de rendimiento. Puede obtener ese rendimiento con 6 discos SAS regulares de 10k, pero solo produciría alrededor de 2,000 IOPS.

ewwhite
fuente
¿Podría darme un ejemplo en el que IOPS me daría una idea del rendimiento de mi sistema donde los MB / s no serán útiles?
mFeinstein
@mFeinstein Vea el ejemplo porno anterior.
ewwhite
33
+1 por ejemplo porno lol
mFeinstein
2
Además, es probable que un sistema operativo esté haciendo un montón de pequeños accesos aleatorios. El rendimiento secuencial no ayudará. Esa es una razón para ejecutar el sistema operativo en un SSD, al menos en las PC.
sudo
3
A menudo veo discos totalmente utilizados que hacen ~ 2 MB / seg. Eso es porque es 100% aleatorio IO. A veces, es posible obtener increíbles ganancias de rendimiento al colocar datos secuencialmente en el disco (por ejemplo, eliminar la fragmentación, indexar en bases de datos).
boot4life
6

Si bien la respuesta de ewwhite es completamente correcta, quería proporcionar algunos números más concretos solo para ayudar a explicar por qué la diferencia es importante en perspectiva.

Como ewwhite ya dijo correctamente, la mayoría de las aplicaciones que no son de transmisión principalmente realizan operaciones de disco no secuenciales, por lo que las IOPS son importantes además del rendimiento máximo teórico.

Cuando un compañero de trabajo y yo instalamos SSD por primera vez en nuestros sistemas de desarrollo para reemplazar los HDD que habíamos estado utilizando anteriormente, realizamos algunas mediciones de rendimiento que realmente resaltaron por qué esto es importante:

Resultados del disco duro SATA:

Rendimiento de lectura secuencial: ~ 100 MB / s
Rendimiento de lectura no secuencial (2k bloques, IIRC): ~ 1 MB / s

Resultados SSD adjuntos a PCIe:

Rendimiento de lectura secuencial: ~ 700 MB / s
Rendimiento de lectura no secuencial (2k bloques, IIRC): ~ 125 MB / s

Como puede ver claramente en el ejemplo, solo enumerar un rendimiento máximo para cada dispositivo daría una imagen extremadamente inexacta de cómo se comparan. El SSD es solo aproximadamente 6-7 veces más rápido que el HDD cuando lee archivos grandes secuencialmente, pero es más de 100 veces más rápido cuando lee pequeños fragmentos de datos de diferentes partes del disco. Por supuesto, con los discos duros, esta limitación se debe en gran medida al hecho de que los discos duros deben mover físicamente el cabezal derecho a la pista deseada y luego esperar a que los datos deseados giren debajo del cabezal, mientras que los SSD no tienen partes físicas para moverse.

Nuestros tiempos de compilación mejoraron mucho más dramáticamente de lo que habría sugerido una simple comparación de los rendimientos máximos. Las compilaciones que anteriormente tomaban más de 30 minutos ahora terminaron en aproximadamente un minuto, ya que la E / S del disco durante una compilación grande consiste en leer y escribir muchos archivos fuente separados que no son muy grandes individualmente y pueden estar dispersos físicamente por todo el disco .

Al proporcionar tanto el rendimiento como los números de IOPS, puede tener una mejor idea de cómo funcionará una carga de trabajo determinada en un dispositivo de almacenamiento determinado. Si solo está transmitiendo grandes cantidades de datos que no están fragmentados, se acercará bastante al rendimiento máximo. Sin embargo, si está haciendo muchas lecturas y / o escrituras pequeñas que no están almacenadas secuencialmente en el disco, estará limitado por IOPS.

reirab
fuente
¿No has medido también los IOPS?
mFeinstein
3

Para realizar una operación de E / S, las unidades deben pasar por una serie de operaciones. Para un disco duro mecánico que necesitan.

  1. Busque el camino correcto y seleccione la cabeza correcta.
  2. Espere a que el plato gire a la posición correcta.
  3. En realidad transfiere los datos.

El tiempo necesario para 3 depende del tamaño del bloque de datos, pero el tiempo necesario para 1 y 2 es independiente del tamaño de la solicitud.

El rendimiento del encabezado y las cifras de PIO representan casos extremos. Las cifras principales de rendimiento representan el caso en el que cada operación involucra un gran bloque de datos, por lo que el disco pasa la mayor parte del tiempo moviendo datos.

La figura del titular de las PIO representa el caso en el que los bloques de datos son muy pequeños, por lo que se pasa la mayor parte del tiempo buscando los cabezales y esperando que los platos roten.

Para muchas cargas de trabajo, los bloques son lo suficientemente pequeños como para que el número de bloques a transferir sea mucho más importante que el tamaño de los bloques.

Peter Green
fuente
2

Hay dos tipos de cuellos de botella que puede experimentar en volúmenes de E / S (o de E / S en general, de hecho).

De hecho, el rendimiento real se mide para incluir un componente basado en el volumen de datos movidos, escalado por el ancho de banda disponible o similar, tamaño unitario *, pero también hay una sobrecarga asociada con las solicitudes, que es constante, ya sea ese disco, red o muchas otras cosas

costo unitario * tamaño + gastos generales. La ecuación de una línea.

Si el costo unitario es grande, o el tamaño es grande, entonces tiene sentido cobrar en función de estos volúmenes, como las redes de teléfonos móviles, por otro lado, a veces los gastos generales son mucho más críticos.

Puede hacer un experimento simple de esto usted mismo, crear un directorio con unos pocos archivos de 1GB (o lo que sea práctico, algo lo suficientemente grande como para que tarden unos segundos en leerlo / escribirlo), y luego crear una carpeta con un millón de archivos de 100 bytes. (tenga en cuenta que eso es 0.1 GB de datos), y luego vea lo que sucede con su rendimiento cuando comience a tratar de mover todo esto entre diferentes particiones / discos: obtendrá un rendimiento limitado por el rendimiento de los archivos grandes y acelerado por El número de archivos para las cosas más pequeñas.

Asumiría que Amazon conoce ambos modelos de carga y simplemente descubrió que uno representa mejor las capacidades de su infraestructura.

Hay un límite en el tamaño de un IOP que está ampliamente relacionado con la cantidad que la tienda puede transferir en un "ciclo" de todos modos, por lo que las solicitudes grandes aún le cuestan múltiples IOPS.

Aquí hay una buena pieza de Amazon mismos sobre IOPS y costos, y los 'ahorros' que pasan a través de optimizaciones

Características de E / S y monitoreo

No lo leo todo pero parece interesante, si tiene curiosidad sobre esta área.

Precio Iain
fuente
2

Respondiendo tu pregunta

"¿Qué nueva información obtengo cuando veo un número de IOPS, que no vería un número de rendimiento (MB / s)?"

directamente, es la cantidad de operaciones de E / S de profundidad de cola y tamaño de archivo especificados que el almacenamiento puede hacer por segundo . Puede calcular el rendimiento en determinadas condiciones utilizando la siguiente fórmula:

Tamaño de archivo IOPS * = rendimiento

Las pruebas de almacenamiento pueden generar un número diferente de IOPS según el tamaño del archivo y la profundidad de la cola. A la profundidad de la cola = 1 o 2, el controlador no aprovechará el almacenamiento en caché, mientras que a la profundidad de la cola 32, 256, 512 el número aumenta varias veces y no cambia mucho. Con un tamaño de archivo de 128 KB, el recuento de IOPS podría ser menor junto a los archivos de 4KB, pero el rendimiento es mayor.

La mejor manera de evaluar el rendimiento de un almacenamiento es buscar IOPS y pruebas de rendimiento en diferentes tamaños de bloque y profundidad de cola.

Eugene
fuente
Creo que puede estar confundiendo IOPS con el rendimiento un poco ... El rendimiento no es sinónimo de acceso continuo, pero el total de MB / s que el almacenamiento pudo procesar en un momento dado ... Entonces, cuando dice el HDD y el SSD tendría el mismo rendimiento, es para acceso continuo ... Como también hay rendimiento para acceso aleatorio ... Solo mucho menos para HDD en general debido al tiempo de búsqueda.
mFeinstein
Por lo tanto, debe incluir en su respuesta que se refiere al acceso continuo al principio y al acceso aleatorio al final, ya que IOPS no es sinónimo de acceso aleatorio también ... Justo cuando tiene más sentido usar IOPS como medición
mFeinstein
@mFeinstein He editado la respuesta, eche un vistazo.
Eugene
1

En términos generales, IOPS es más difícil de obtener que el rendimiento. Si tiene muchas IOPS, tendrá un rendimiento suficiente la mayor parte del tiempo.

Con los discos duros clásicos, el número de ejes es su factor limitante, ya que la cabeza debe moverse físicamente en cada unidad: y es terriblemente lenta. Los SSD tienen una capacidad IOPS mucho mejor.

Si solo tiene un usuario, copiando un archivo grande a la red, es posible que solo tenga una docena de búsquedas para obtener los datos, y el resto solo se transmitirá desde el disco.

Sin embargo, si está accediendo a una base de datos o tiene muchos usuarios simultáneos, tendrá que acceder a diferentes partes de su almacenamiento al mismo tiempo, con el aumento vertiginoso de IOPS.

Simplemente actualizar 10 filas en paralelo en una base de datos relacional podría terminar generando cientos de E / S: leer los índices, leer los datos, agregar el archivo de registro, actualizar los índices y los datos. La mayoría de los sistemas operativos y las bases de datos intentan limitar la cantidad de E / S al almacenar en caché y retrasar / agrupar las E / S cuando sea posible.

Xavier Nicollet
fuente
1

También responderé a mi propia pregunta porque creo que la mayoría de las respuestas se salieron mucho del tema y la respuesta podría ser mucho más simple:

Si observa solo el rendimiento de sus dispositivos de almacenamiento, es posible que se pierda lo que está sucediendo ... Si hay un bajo rendimiento (bajo MB / s), es posible que tenga un dispositivo lento O que tenga mucho acceso aleatorio en un HDD u otro dispositivo eso no maneja bien el acceso aleatorio.

Al observar los IOPS y conocer el tamaño de fragmento de cada operación de E / S, puede saber cuántos accesos puede manejar el dispositivo de almacenamiento y cuál es el rendimiento de estos IOPS (tamaño de fragmento * IOPS).

Entonces, al observar IOPS altos, puede concluir que su dispositivo de almacenamiento maneja mucho acceso aleatorio, incluso si esto viene con un bajo rendimiento ... o tal vez está buscando IOPS bajos que tengan el mismo bajo rendimiento, lo que significa que su dispositivo es solo ocioso.

Entonces, al mirar los IOPS podemos obtener una idea de lo que realmente significa el rendimiento, ambos se complementan entre sí.

mFeinstein
fuente
IOPS = Entradas / Salidas por segundo, no se trata de plural, y S no debe omitirse. :)
Eugene
1
No se trata de plural, he visto a algunas personas referirse a la PIO como la abreviatura de "Operación de E / S" como parece ... Pero sí, esto podría generar confusión, así que lo reemplazaré, gracias
mFeinstein