¿Por qué las lecturas 4k en los puntos de referencia hdd / ssd son más lentas que las escrituras?

11

Hay varias herramientas de referencia disponibles para probar la velocidad de una unidad de PC.

Aquí hay un ejemplo de referencia de un SSD SATA:

  • Lectura secuencial: 718.498 MB / s
  • Escritura secuencial: 777.414 MB / s
  • Lectura aleatoria 512 KB: 160.541 MB / s
  • Escritura aleatoria 512 KB: 838.930 MB / s
  • Lectura aleatoria 4KB (QD = 1): 26.985 MB / s [6588.1 IOPS]
  • Escritura aleatoria 4KB (QD = 1): 135.603 MB / s [33106.2 IOPS]
  • Lectura aleatoria 4KB (QD = 32): 177.003 MB / s [43213.6 IOPS]
  • Escritura aleatoria 4KB (QD = 32): 178.397 MB / s [43554.0 IOPS]

m.2 SSD:

  • Lectura secuencial (Q = 32, T = 1): 829.119 MB / s
  • Escritura secuencial (Q = 32, T = 1): 677.645 MB / s
  • Lectura aleatoria 4KiB (Q = 32, T = 1): 744.328 MB / s [181720.7 IOPS]
  • Escritura aleatoria 4KiB (Q = 32, T = 1): 144.876 MB / s [35370.1 IOPS]
  • Lectura secuencial (T = 1): 785.600 MB / s
  • Escritura secuencial (T = 1): 789.973 MB / s
  • Lectura aleatoria 4KiB (Q = 1, T = 1): 56.585 MB / s [13814.7 IOPS]
  • Escritura aleatoria 4KiB (Q = 1, T = 1): 170.449 MB / s [41613.5 IOPS]

HDD:

  • Lectura secuencial: 114.988 MB / s
  • Escritura secuencial: 111.043 MB / s
  • Lectura aleatoria 512 KB: 39.260 MB / s
  • Escritura aleatoria 512 KB: 57.409 MB / s
  • Lectura aleatoria 4KB (QD = 1): 0.546 MB / s [133.4 IOPS]
  • Escritura aleatoria 4KB (QD = 1): 0.757 MB / s [184.9 IOPS]
  • Lectura aleatoria 4KB (QD = 32): 1.582 MB / s [386.3 IOPS]
  • Escritura aleatoria 4KB (QD = 32): 0.700 MB / s [171.0 IOPS]

En todos los casos, "Random Read 4KB Q1" es más lento que escribir y en la mayoría de los casos es lo contrario de "QD32".

En algunos foros, la gente dice que es una limitación con respecto a la estructura del chip SSD, pero como los discos duros habituales muestran el mismo comportamiento, ¿parece ser otra razón?

mgutt
fuente

Respuestas:

8

TL; DR: Es porque el SSD te está mintiendo y te dice que la escritura se hace antes de que lo haga. No puede salirse con la misma cosa para las lecturas.

La versión más larga de la respuesta es el almacenamiento en caché de escritura.

Comencemos con el caso QD1. El SSD informará la escritura como finalizada al sistema operativo una vez que haya recibido los datos y los haya guardado en una memoria caché local en la unidad, pero antes de que realmente los haya escrito en el NAND. Esto hace una gran diferencia porque en realidad escribir datos en NAND es bastante lento. Para las lecturas, en realidad tiene que leer los datos de NAND antes de poder enviarlos de vuelta (a menos que lo haya leído antes y todavía lo tenga en caché, pero eso es muy poco probable con lecturas aleatorias).

La desventaja de esto es que ante la pérdida repentina de energía puede haber pérdida de datos escritos en el SSD pero que aún no han llegado al NAND. Algunos SSD empresariales incluyen un supercondensador que almacena suficiente energía para terminar de escribir los datos en caché a NAND en caso de pérdida repentina de energía.

Ves lo mismo para los discos duros porque también están haciendo caché de escritura. Simplemente no están siendo tan agresivos al respecto. ¿Por qué es tan agresivo el SSD? Para responder eso, debemos pasar a considerar el caso QD32, que es más complicado y más interesante.

No es cierto lo que dice que las lecturas aleatorias son generalmente más rápidas que las escrituras aleatorias en QD32. Depende mucho de qué SSD en particular mire.

Si observa las lecturas aleatorias QD1 de 4k en muchas SSD SATA, todas parecen funcionar en el rango de 20-30 MB / s. ¿Porqué es eso? Esto se debe a que las lecturas aleatorias QD1 de 4k se refieren principalmente a latencias y no a rendimiento. La latencia proviene de tres partes:

  1. La latencia de interfaz de SATA / AHCI que implica decirle a la unidad qué hacer y enviar los datos.
  2. El controlador en sí tiene que averiguar qué hacer con los datos y las instrucciones que ha recibido.
  3. El tiempo que lleva leer o escribir los datos en un dado NAND.

Ni 1. o 3. cambiaron mucho en mucho tiempo, y es por eso que las lecturas aleatorias 1k QD1 tampoco cambiaron mucho.

El reciente movimiento en SSD de SATA / AHCI a PCIe / NVMe ha reducido en gran medida la latencia de 1., razón por la cual ciertos SSD m.2 y PCIe recientemente han mostrado grandes mejoras aquí.

Una cosa que puede hacer un controlador SSD para ayudar en gran medida con la latencia es leer o escribir en múltiples matrices NAND en paralelo y de esa manera enmascarar la mayor parte de la latencia de 3. Si está haciendo QD32 4k lecturas aleatorias con NCQ, la SSD puede atender la lectura solicitudes fuera de servicio y asegúrese de que está leyendo tantos troqueles NAND en paralelo como sea posible.

Para las escrituras aleatorias QD32 4k, la SSD hace algo llamado combinación de escritura. Cuando llegan muchas solicitudes de escritura pequeñas, el controlador SSD las almacena en caché localmente y cuando se ha acumulado un búfer de escritura lo suficientemente grande, el controlador lo divide en fragmentos de buen tamaño y escribe los fragmentos en múltiples troqueles NAND en paralelo, de nuevo para ayudar a enmascarar Latencia NAND. Otra ventaja de la combinación de escritura es que la mayoría de los SSD de hoy en día tienen un tamaño de página (la cantidad más pequeña que se puede leer o escribir) mayor que 4k, y la combinación de las escrituras hasta llegar al tamaño de la página ayuda a evitar mucha amplificación de escritura. Para hacer esto, los SSD son tan agresivos en el almacenamiento en caché de escritura.

Señor alfa
fuente