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)?"
fuente
Respuestas:
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:
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.
fuente
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.
fuente
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.
fuente
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.
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.
fuente
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.
fuente
Respondiendo tu pregunta
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.
fuente
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.
fuente
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í.
fuente