NVMe ssd: ¿Por qué 4k escribe más rápido que lee?

51

Tengo un SSD Samsung 960 Pro de 512 GB en NVMe con PCIe Gen.3x4 funcionando. Yo uso el Samsung NVMe Driver 2.0.0.1607. El SSD está funcionando bien. Sin embargo, no entiendo por qué la escritura de 4k es más rápida que la lectura de 4k. Estoy usando AS Benchmark:

ingrese la descripción de la imagen aquí

Es un factor de 3! ¿Hay algo mal (con mi sistema o AS Benchmark) o es normal?

Musbach
fuente
¡Y todavía mucho más rápido que un disco duro giratorio!
Zan Lynx

Respuestas:

76

Las lecturas de 4k serán lo más difícil que puede hacer la unidad. Se encuentran entre los tamaños de bloque más pequeños que la unidad podrá manejar, y no hay forma de que la unidad precargue grandes cantidades de datos, de hecho, probablemente sean bastante ineficientes si la lógica de carga anticipada de la unidad tiene la intención de leer algo mayor de 4kb.

Es más probable que las lecturas de unidad "normales" sean mayores de 4 kb, ya que hay muy pocos archivos que sean tan pequeños, e incluso es probable que el archivo de página se lea en fragmentos grandes, ya que sería extraño que un programa tenga "solo" 4KB de memoria paginada. Esto significa que cualquier precarga que la unidad intente hacer realmente penalizará el rendimiento de la unidad.

Las lecturas 4K pueden pasar a través del búfer de la unidad, pero la parte "aleatoria" de la prueba los hace completamente impredecibles. El controlador no sabrá cuándo la unidad podría necesitar las lecturas "grandes" más habituales nuevamente.

Las escrituras 4K, por otro lado, se pueden almacenar, poner en cola y escribir secuencialmente de manera eficiente. El búfer de la unidad puede hacer una gran cantidad de trabajo de captura y escritura para el que fue diseñado, y el nivelador de desgaste incluso puede asignar todas esas escrituras 4K al mismo bloque de borrado de la unidad, convirtiendo ocasionalmente lo que es una escritura 4K "aleatoria" en algo más cercano a una escritura secuencial.

De hecho, sospecho que esto es lo que está sucediendo en las escrituras de "4K-64Thrd", el "64-Thrd" aparentemente está utilizando una gran profundidad de cola , lo que indica al disco que tiene una gran cantidad de datos para leer o escribir . Esto desencadena una gran cantidad de agrupaciones de escrituras y, por lo tanto, se acerca a la velocidad de escritura secuencial de la unidad. Todavía hay una sobrecarga para realizar una escritura 4K, pero ahora está exponiendo completamente el potencial del búfer. En la versión de lectura de la prueba, el controlador de la unidad, ahora reconociendo que está bajo una carga pesada muy constante, detiene la carga previa de datos, posiblemente evita el búfer y, en cambio, cambia a un modo de lectura "sin procesar", acercándose nuevamente a la velocidad de lectura secuencial.

Básicamente, el controlador de unidad puede hacer algo para que una escritura 4K sea más eficiente, especialmente si un grupo de ellos llega en un momento similar, mientras que no puede hacer nada para que una sola lectura 4K sea más eficiente, especialmente si está tratando de optimizar flujo de datos precargando datos en el caché.

Mokubai
fuente
55
No es parte de la respuesta en sí, pero sospecho que la "lectura 4K" (versión no 64Thrd) en realidad está exponiendo el tamaño de bloque de lectura predeterminado de la unidad como 32K o 64K. Esto sería 2600/50 = 52 (64K con algo de sobrecarga + la lectura original de 4K) o 1200/50 = 24 (32K con algo de sobrecarga + la lectura de 4K reduciéndolo).
Mokubai
16
Buena respuesta en general, pero no creo que "haya muy pocos archivos que sean tan pequeños". De hecho, sospecho que en la mayoría de los sistemas la mayoría de los archivos son 4k o más pequeños. No ocupan la mayoría del espacio , pero ese es otro asunto.
hobbs
3
Probablemente la respuesta más simple sea esta: si las hace una por una, no puede superponer las lecturas porque ni siquiera descubre para qué bloque es la siguiente lectura hasta que devuelva los datos de la lectura anterior. Pero puede superponer las escrituras por completo, ya que puede obtener todos los datos para la próxima escritura mientras todavía está trabajando en la anterior.
David Schwartz
2
@hobbs Si toma, por ejemplo, NTFS, el tamaño predeterminado del clúster es 4K (o un múltiplo del mismo), lo que significa que el sistema de archivos NTFS en sí mismo funciona en bloques 4K, aunque los archivos y / o metadatos en sí son más pequeños. Por lo tanto, los archivos más pequeños no hacen ninguna diferencia. Para todos los efectos, un sistema Windows lee / escribe en bloques 4K o múltiplos de eso.
Tonny
1
@hobbs: con NTFS, es probable que obtenga la lectura de archivos tan pequeños de forma gratuita (!). Los archivos pequeños se almacenan en la entrada del directorio, junto al nombre del archivo. Debe tener un tamaño de archivo bastante particular cercano a 4KB para tener un archivo real de 4KB en el disco.
MSalters
16

Otras respuestas ya explicaron por qué puede ser que escribir sea más rápido que leer; Me gustaría agregar que para esta unidad esto es absolutamente normal, como lo confirman los puntos de referencia que puede encontrar en las revisiones.

El comentario de ArsTecnica

ArsTechnica ha revisado la unidad, tanto su versión (512 GB) como la de 2 TB:

ArsTechnica (Este gráfico no es inmediatamente visible en la revisión, es el quinto en la primera galería, debe hacer clic en él)

El rendimiento de estos 2 modelos es muy similar, y sus números se parecen a los suyos: la unidad puede leer a 37 MB / sy escribir a 151 MB / s.

Comentario de AnandTech

AnandTech también ha revisado la unidad: utilizaron el modelo de 2TB, promediando los resultados de las pruebas con una profundidad de cola de 1, 2 y 4. Estas son las gráficas:

AnandTech 4K de lectura AnandTech 4K escribe

La unidad lee a 137 MB / sy escribe a 437 MB / s. El número es mucho mayor que el tuyo, pero probablemente se deba a las mayores profundidades de la cola. De todos modos, la velocidad de escritura es 3 veces la velocidad de lectura, como en su caso.

PC World review

Una revisión más, de PC World : han probado la versión de 1 TB, y los resultados para 4K son 30 MB / s para lectura y 155 MB / s para escritura: PC World graph la velocidad de escritura está en línea con la suya, pero aquí la unidad es aún más lento en la lectura. El resultado es que la relación es de cinco a uno, no de tres a uno.

Conclusión

Las revisiones confirman que para esta unidad es normal que la velocidad de escritura para 4K aleatorio sea mucho más rápida que la velocidad de lectura: dependiendo de la prueba, incluso puede ser 5 veces más rápida.

Tu viaje está bien. No hay razón para creer que es defectuoso o que su sistema tiene un problema.

Fabio dice reinstalar a Mónica
fuente
8

El controlador SSD almacena en caché las escrituras en la NVRAM incorporada, y lo descarga en medios flash en los momentos oportunos. La latencia de escritura es, por lo tanto, la latencia de acceso a la memoria caché, típicamente 20us. Las lecturas, por el contrario, se publican fuera de los medios, con un tiempo de acceso de 120-150us en el mejor de los casos.

Andrey Kuzmin
fuente
1

Para ampliar la respuesta de Andrey, debe observar la sobrecarga involucrada antes de que el SSD pueda indicarle a la computadora que la operación se ha completado.

Para una escritura, los datos deben escribirse simplemente en una memoria caché RAM interna. Más tarde se escribirá en la memoria flash, junto con otros bloques de 4k y metadatos necesarios para verificar, corregir errores y localizarlos.

Para una lectura, el SSD primero debe ubicar los datos. La ubicación que la computadora quiere leer se llama dirección lógica y no tiene una relación directa con la ubicación física de los datos en la memoria flash. El SSD traduce la dirección lógica a una dirección física, basada en la geometría de la memoria flash (la forma en que están organizadas las celdas), la reasignación de bloques defectuosos, la nivelación del desgaste y otros factores. Luego tiene que esperar a que finalice cualquier otra operación antes de recuperar los datos de la memoria flash, luego verificarlos y, si es necesario, volver a leer y aplicar la corrección de errores, posiblemente incluso volver a escribir todo el bloque en otro lugar.

Si bien el tiempo total que tarda una operación de escritura puede ser mayor que una operación de lectura típica, el tiempo que tarda el SSD en informar que la operación se completó en la medida en que puede procesar más comandos es menor. Con bloques grandes, la sobrecarga no es el factor limitante, pero con muchos bloques pequeños comienza a limitar la velocidad de lectura / escritura.

usuario3241
fuente