¿Por qué mi HDD es tan lento en las pruebas de velocidad "4K"?

46

¿Qué tiene de malo mi velocidad a 4K? ¿Por qué es tan lento? ¿O se supone que es así?

Captura de pantalla de benchmark

¿Está bien esa velocidad? ¿Por qué tengo una velocidad tan baja a 4K?

Usuario6539
fuente
13
Eso es normal y esperado. "4K" en este contexto significa lectura / escritura aleatoria (en bloques de 4 kilobytes, de ahí el "4K"), en el que los discos duros mecánicos funcionan terriblemente. Ahí es donde querrías un SSD. Vea aquí para una explicación más detallada.
Bob
Se usa 4Kb porque es el tamaño típico de un clúster de disco, y en muchos discos duros modernos, del sector real (la estructura de bajo nivel en el propio disco). Es decir, es probable que se transfiera la menor cantidad de datos a la vez en cualquier lectura o escritura, incluso si los datos solicitados son más pequeños. Es interesante que NINGUNA respuesta en esta página hasta ahora incluso mencione grupos o sectores.
thomasrutter
2
@thomasrutter Porque no es relevante para la respuesta. La parte importante es que esta prueba implica búsqueda aleatoria. No es relevante (hasta cierto punto) la cantidad de datos que se transfieren y si es o no un múltiplo del tamaño del sector del disco; La parte importante es que la prueba transfiere una cantidad mínima de datos para medir el rendimiento de la búsqueda.
Micheal Johnson
¿Es esta prueba en una partición o en todo el disco? Las pruebas a nivel de partición pueden tener un rendimiento mucho peor para los accesos 4K si tiene un disco con sectores físicos 4K pero sectores lógicos de 1K, y desalinea el límite de la partición con los sectores a horcajadas.
Toby Speight
Las herramientas modernas de partición tienden a garantizar que las particiones comiencen y terminen en un límite de sector; Incluso 1 MB de granularidad es común ahora. Atrás quedaron los días de los antiguos "63 sectores de 512 bytes" que causarían problemas a los sectores nativos de 4Kb.
thomasrutter

Respuestas:

85

Lo que está encontrando es típico de los HDD mecánicos, y uno de los principales beneficios de los SSD: los HDD tienen un rendimiento de acceso aleatorio terrible .

En CrystalDiskMark, "Seq" significa acceso secuencial mientras que "4K" significa acceso aleatorio (en fragmentos de 4kB a la vez, porque los bytes individuales serían demasiado lentos y poco realistas 1 ).


Definiciones

En términos generales, hay dos formas diferentes de acceder a un archivo.

Acceso secuencial

El acceso secuencial significa que lee o escribe el archivo más o menos un byte tras otro. Por ejemplo, si está viendo un video, lo cargará de principio a fin. Si está descargando un archivo, se descarga y se escribe en el disco de principio a fin.

Desde la perspectiva del disco, está viendo comandos como "leer bloque # 1, leer bloque # 2, leer bloque # 3, leer byte bloque # 4" 1 .

Acceso aleatorio

El acceso aleatorio significa que no hay un patrón obvio para las lecturas o escrituras. Esto no tiene que significar realmente al azar; realmente significa "no secuencial". Por ejemplo, si está iniciando muchos programas a la vez, necesitarán leer muchos archivos dispersos por su disco.

Desde la perspectiva de la unidad, está viendo comandos como "leer bloque # 56, leer bloque # 5463, leer bloque # 14, leer bloque # 5"

Bloques

He mencionado bloques un par de veces. Debido a que las computadoras manejan tamaños tan grandes (1 MB ~ = 1000000 B), incluso el acceso secuencial es ineficiente si tiene que pedirle a la unidad de disco por cada byte individual; hay demasiada charla. En la práctica, el sistema operativo solicita bloques de datos del disco a la vez.

Un bloque es solo un rango de bytes; por ejemplo, el bloque # 1 podría ser bytes # 1- # 512, el bloque # 2 podría ser bytes # 513- # 1024, etc. Estos bloques son 512 Bytes o 4096 Bytes grandes, dependiendo de la unidad. Pero incluso después de tratar con bloques en lugar de bytes individuales, el acceso secuencial a bloques es más rápido que el acceso aleatorio a bloques.


Actuación

Secuencial

El acceso secuencial es generalmente más rápido que el acceso aleatorio. Esto se debe a que el acceso secuencial permite que el sistema operativo y la unidad pronostiquen lo que se necesitará a continuación y carguen una gran parte por adelantado. Si ha solicitado bloques "1, 2, 3, 4", el sistema operativo puede suponer que querrá "5, 6, 7, 8" a continuación, por lo que le indica a la unidad que lea "1, 2, 3, 4 , 5, 6, 7, 8 "de una vez. Del mismo modo, la unidad puede leer el almacenamiento físico de una vez, en lugar de "buscar 1, leer 1,2,3,4, buscar 5, leer 5,6,7,8".

Oh, mencioné buscar algo. Los discos duros mecánicos tienen un tiempo de búsqueda muy lento debido a cómo están dispuestos físicamente: consisten en una serie de discos metalizados pesados ​​que giran, con brazos físicos que se mueven hacia adelante y hacia atrás para leer el disco. Aquí hay un video de un HDD abierto donde puede ver los discos giratorios y los brazos en movimiento.

Diagrama de componentes internos de HDD
Imagen de http://www.realtechs.net/data%20recovery/process2.html

Esto significa que en cualquier momento, solo se puede leer el bit de datos debajo de la cabeza al final del brazo. La unidad necesita esperar dos cosas: debe esperar a que el brazo se mueva al anillo derecho ("pista") del disco, y también debe esperar a que el disco gire para que los datos necesarios estén bajo la lectura cabeza. Esto se conoce como buscar 2 . Tanto los brazos que giran como los que se mueven requieren tiempo físico para moverse, y no se pueden acelerar mucho sin correr el riesgo de sufrir daños.

Esto generalmente lleva mucho, mucho tiempo, mucho más tiempo que la lectura real. Estamos hablando> 5 ms solo para llegar a donde vive el byte solicitado, mientras que la lectura real del byte promedia aproximadamente 0.00000625 ms por lectura de byte secuencial (o 0.003125 ms por bloque de 512 B).

Aleatorio

El acceso aleatorio, por otro lado, no tiene el beneficio de la previsibilidad. Entonces, si desea leer 8 bytes aleatorios, tal vez de los bloques "8,34,76,996,112,644,888,341", la unidad debe ir "buscar 8, leer 8, buscar 34, leer 34, buscar 76, leer 76, ..." . ¿Te das cuenta de cómo necesita buscar de nuevo para cada bloque? En lugar de un promedio de 0.003125ms por bloque secuencial de 512 B, ahora es un promedio de (5ms de búsqueda + 0.003125ms de lectura) = 5.003125ms por bloque. Eso es mucho, muchas veces más lento. Miles de veces más lento, de hecho.

SSD

Afortunadamente, tenemos una solución ahora: SSD.

Una SSD, una unidad de estado sólido , es, como su nombre lo indica, estado sólido . Eso significa que no tiene partes móviles . Más aún, la forma en que se presenta un SSD significa que no hay (efectivamente 3 ) necesidad de buscar la ubicación de un byte; Ya lo sabe . Es por eso que un SSD tiene una brecha de rendimiento mucho menor entre el acceso secuencial y aleatorio.

Todavía hay una brecha, pero eso se puede atribuir en gran medida a la imposibilidad de predecir lo que viene después y a precargar esos datos antes de solicitarlos.


1 Con mayor precisión, las unidades LBA se direccionan en bloques de 512 bytes (512n / 512e) o 4kB (4Kn) por razones de eficiencia. Además, los programas reales casi nunca necesitan un solo byte a la vez.

2 Técnicamente, la búsqueda solo se refiere al recorrido del brazo. La espera de que los datos giren debajo de la cabeza es una latencia rotacional además del tiempo de búsqueda.

3 Técnicamente, tienen tablas de búsqueda y reasignación por otras razones, por ejemplo, nivelación de desgaste, pero son completamente insignificantes en comparación con un HDD ...

Mover
fuente
@KamilMaciorowski Realmente estoy repensando esa simplificación ahora, porque descarta mi cálculo de búsqueda + tiempo de lectura. Oh bien. No es demasiado importante para los conceptos.
Bob
Debe corregir la parte aleatoria Notice how it needs to look for every single byte?:: reemplace bytecon block(y cambie el ejemplo en consecuencia). La unidad busca la parte de 4k (que podría dispersarse aún más en 512bytes, pero no más bajo que esto. ¡No busca entre cada byte!, Busca entre cada bloque si el siguiente bloque no está justo detrás (lo que sucede mucho en discos fragmentados) .Y buscar (mover la cabeza alrededor del plato y esperar a que el bloque pase debajo) es lo que lleva mucho tiempo (unos pocos milisegundos)
Olivier Dulac
2
Un pequeño dienote a 4 kiB / 512B. 4kiB también tiene el tamaño de la página, bueno, casi todo, por lo que es probable que OS $ lea el bloque completo de 4 kiB incluso si los controladores LBA leen en fragmentos de 512 B. Además, no creo que el problema sea que el HDD necesita 'encontrar' ningún byte más que el SDD que el que necesita rotar físicamente para corregir la posición. Si accede al bloque nuevamente, debe buscarlo nuevamente ya que el HDD gira continuamente. Es probable que cualquier reasignación de bloque sea un efecto secundario (y el bloqueo reasignado suele ser justo después de uno dañado de todos modos, creo que para minimizar la búsqueda).
Maciej Piechotka
(Posiblemente una nota al margen completa: no estoy seguro acerca de NAND / NOR, pero al menos el direccionamiento DDR tampoco es completamente aleatorio como lo indicaría el nombre, pero funciona en 'ráfaga' de direcciones. En la mayoría de los casos, esto es 64 B debido a que es un tamaño de $ line de la mayoría de las CPU pero puede ser mucho más grande para otras aplicaciones.)
Maciej Piechotka
1
@OlivierDulac Sigo pensando que introducir bloques es potencialmente confuso, pero he tratado de explicarlo. Respuesta actualizada
Bob
3

Como ya se señaló en otras respuestas, "4K" casi seguramente se refiere al acceso aleatorio en bloques de tamaño 4 KiB.

Cada vez que se le pide a un disco duro (no un SSD) que lea o escriba datos, hay dos retrasos importantes:

  • Busque latencia, para que el cabezal de lectura / escritura "busque" la pista circular correcta (o "cilindro") en el plato, incluido el tiempo necesario para que el cabezal se estabilice sobre el camino y se sincronice con los datos almacenados en el plato
  • Latencia rotacional, para que el plato giratorio debajo del cabezal de lectura / escritura gire de modo que la parte deseada de la pista (el "sector") pase por debajo del cabezal

Ambos son de una cantidad de tiempo relativamente constante para cualquier unidad dada. La latencia de búsqueda es una función de qué tan rápido se puede mover la cabeza y qué tan lejos necesita moverse, y la latencia rotacional es una función de qué tan rápido está girando el plato. Además, no han cambiado mucho en las últimas décadas. Los fabricantes solían usar tiempos promedio de búsqueda, por ejemplo, en anuncios; prácticamente dejaron de hacerlo cuando había poco o ningún desarrollo en el área. Ningún fabricante, especialmente en un entorno de alta competencia, quiere que sus productos no se vean mejor que los de sus competidores.

Un disco duro de escritorio típico gira a 7200 rpm, mientras que una unidad portátil típica puede girar a alrededor de 5000 rpm. Esto significa que cada segundo pasa por un total de 120 revoluciones (unidad de escritorio) o alrededor de 83 revoluciones (unidad de computadora portátil). Dado que, en promedio, el disco tendrá que girar media revolución antes de que el sector deseado pase por debajo de la cabeza, esto significa que podemos esperar que el disco pueda atender aproximadamente el doble de las solicitudes de E / S por segundo, suponiendo que

  • o la búsqueda se realiza mientras el disco está girando (esta es probablemente una apuesta segura para los discos duros hoy en día donde la E / S implica la búsqueda), y la latencia de búsqueda no es más larga que la latencia rotacional para la E / S particular
  • o la cabeza ya está sobre el cilindro correcto, lo que hace que la unidad no necesite buscar (que es un caso especial de lo anterior, con una latencia de búsqueda de cero)

Por lo tanto, deberíamos ser capaces de funcionar en el orden de 200 E / S por segundo si los datos a los que se les solicita acceso (para leer o escribir) están relativamente localizados físicamente, lo que resulta en una latencia rotacional como factor limitante. En el caso general, esperaríamos que el disco sea capaz de funcionar en el orden de 100 E / S por segundo si los datos se extienden por el plato o platos, lo que requiere una búsqueda considerable y hace que la latencia de búsqueda sea el factor limitante . En términos de almacenamiento, este es el " IOPSrendimiento "del disco duro; esto, no el rendimiento de E / S secuencial, suele ser el factor limitante en los sistemas de almacenamiento del mundo real. (Esta es una gran razón por la cual los SSD son mucho más rápidos de usar: eliminan la latencia rotacional y reduzca enormemente la latencia de búsqueda, ya que el movimiento físico del cabezal de lectura / escritura se convierte en una búsqueda de tabla en las tablas de capas de mapeo flash, que se almacenan electrónicamente).

Las escrituras suelen ser más lentas cuando hay una descarga de caché involucrada. Normalmente, los sistemas operativos y los discos duros intentan reordenar las escrituras aleatorias para convertir las E / S aleatorias en E / S secuenciales donde sea posible, para mejorar el rendimiento. Si hay una barrera de escritura o vaciado de caché explícito , esta optimización se elimina con el fin de garantizar que el estado de los datos en el almacenamiento persistente sea coherente con lo que el software espera. Básicamente, se aplica el mismo razonamiento durante la lectura cuando no hay caché de disco involucrado, ya sea porque no existe ninguno (poco común hoy en día en los sistemas de escritorio) o porque el software lo omite deliberadamente (lo que a menudo se hace al medir el rendimiento de E / S). Ambos reducen el rendimiento potencial máximo de IOPS al del caso más pesimista, o 120 IOPS para una unidad de 7200 rpm.

  • A 100 IOPS a 4 KiB por E / S, obtenemos un rendimiento de aproximadamente 400 KB / s.
  • Con 200 IOPS a 4 KiB por E / S, obtenemos un rendimiento de aproximadamente 800 KB / s.

Lo cual coincide con sus números casi exactamente. La E / S aleatoria con tamaños de bloque pequeños es un factor decisivo para el rendimiento absoluto de los discos duros giratorios, por lo que también es una métrica relevante.

En cuanto a las E / S puramente secuenciales, el rendimiento en el rango de 150 MB / s no es del todo irrazonable para los discos duros rotativos modernos. Pero muy poca E / S del mundo real es estrictamente secuencial, por lo que en la mayoría de las situaciones, el rendimiento de E / S puramente secuencial se convierte más en un ejercicio académico que en una indicación del rendimiento del mundo real.

un CVn
fuente
Esta es una gran respuesta, y se lee mucho mejor que la mía :) Solo una pequeña nota, al menos Seagate todavía especifica la latencia promedio de búsqueda en sus hojas de datos . WD no parece hacerlo.
Bob
@Bob Gracias. Realmente quise decir en anuncios y similares; He editado la respuesta para aclarar eso. Creo que es seguro decir que muy pocas personas leen las hojas de datos, aunque hacerlo probablemente sea una experiencia aleccionadora para muchos ...
un CVn el
2

4K se refiere a E / S aleatorias . Esto significa que se le pide al disco que acceda a pequeños bloques (4 KB de tamaño) en puntos aleatorios dentro del archivo de prueba. Esta es una debilidad de los discos duros; La capacidad de acceder a los datos a través de diferentes regiones del disco está limitada por la velocidad a la que gira el disco y la rapidez con que se mueven los cabezales de lectura y escritura. Las E / S secuenciales , donde se accede a bloques consecutivos, son mucho más fáciles porque la unidad simplemente puede leer o escribir los bloques a medida que el disco gira.

Una unidad de estado sólido (SSD) no tiene ese problema con las E / S aleatorias, ya que todo lo que tiene que hacer es buscar dónde se almacenan los datos en la memoria subyacente (generalmente flash NAND, puede ser 3D XPoint o incluso DRAM) y leer o escriba los datos en la ubicación adecuada. Los SSD son completamente electrónicos y no necesitan esperar en un disco giratorio o un cabezal móvil de lectura y escritura para acceder a los datos, lo que los hace mucho más rápidos que los discos duros a este respecto. Es por esta razón que la actualización a un SSD aumenta dramáticamente el rendimiento del sistema.

Nota al margen: el rendimiento secuencial de E / S en un SSD a menudo es mucho más alto que en un disco duro también. Un SSD típico tiene varios chips NAND conectados en paralelo al controlador de memoria flash y puede acceder a ellos simultáneamente. Al distribuir los datos entre estos chips, se logra un diseño de unidad similar a RAID 0, lo que aumenta enormemente el rendimiento. (Tenga en cuenta que muchas unidades más nuevas, especialmente las más baratas, usan un tipo de NAND llamado TLC NAND que tiende a ser lento al escribir datos. Las unidades con TLC NAND a menudo usan un pequeño búfer de NAND más rápido para proporcionar un mayor rendimiento para operaciones de escritura más pequeñas, pero pueden disminuya drásticamente una vez que el búfer esté lleno).

bwDraco
fuente
IIRC, algunos SSD NVMe incluso usan un caché DRAM.
timuzhti
1
Debe hacerse. Los SSD sin dramless son un poco bajos.
Journeyman Geek