2010-01-20 32 views
22

¿Cuál es la diferencia entre escritura secuencial y escritura aleatoria en caso de: - 1) sistemas basados ​​en disco 2) SSD [Flash Device] sistemasDiferencia entre escritura secuencial y escritura aleatoria

basados ​​Cuando la aplicación escribe algo y la información/datos deben ser modificados en el disco, entonces, ¿cómo sabemos si es una escritura secuencial o una escritura aleatoria? Hasta este punto, una escritura no puede distinguirse como "secuencial" o "aleatoria". La escritura es solo amortiguado y luego aplicado al disco cuando limpiamos el búfer.

Corrija esta respuesta si me equivoco.

Respuesta

59

Cuando la gente habla de secuencial vs aleatoria escribe en un archivo, que están generalmente establecer una distinción entre la escritura sin que busca intermedia ("secuencial"), frente a un patrón de buscar-escritura de buscar-escritura -seek-write, etc. ("aleatorio").

La distinción es muy importante en los sistemas tradicionales basados ​​en disco, donde cada búsqueda de disco tomará alrededor de 10 ms. La escritura secuencial de datos en ese mismo disco requiere aproximadamente 30 ms por MB. Entonces, si escribe secuencialmente 100MB de datos en un disco, tomará alrededor de 3 segundos. Pero si realiza 100 escrituras aleatorias de 1MB cada una, tomará un total de 4 segundos (3 segundos para la escritura real, y 10ms * 100 == 1 segundo para todas las búsquedas).

Como cada escritura aleatoria se vuelve más pequeña, paga más y más de una penalización para el disco que busca. En el caso extremo en que realice 100 millones de escrituras aleatorias de 1 byte, seguirá generando 3 segundos para todas las escrituras reales, pero ahora tendría 11.57 días que vale la pena hacer. Entonces, claramente, el grado en el que sus escrituras son secuenciales frente a aleatorias puede afectar el tiempo que lleva realizar su tarea.

La situación es un poco diferente cuando se trata de flash. Con flash, no tiene una cabeza física de disco que deba moverse. (Aquí es de donde proviene el costo de búsqueda de 10 ms para un disco tradicional). Sin embargo, los dispositivos flash tienden a tener tamaños de página grandes (el tamaño de página "típico" más pequeño es de alrededor de 512 bytes según wikipedia, y los tamaños de página 4K parecen ser comunes también). Por lo tanto, si escribe un número pequeño de bytes, el flash aún tiene una sobrecarga, ya que debe leer una página completa, modificar los bytes que está escribiendo y luego escribir de nuevo la página completa. No conozco los números característicos del flash en la parte superior de mi cabeza. Pero la regla de oro es que en flash si cada una de sus escrituras es generalmente comparable en tamaño al tamaño de página del dispositivo, entonces no verá mucha diferencia de rendimiento entre las escrituras secuenciales y aleatorias. Si cada una de sus escrituras es pequeña en comparación con el tamaño de página del dispositivo, verá cierta sobrecarga al hacer escrituras aleatorias.

Ahora, para todo lo anterior, es cierto que en la capa de aplicación se oculta mucho de usted. Hay capas en el kernel, controlador de disco/flash, etc. que podrían, por ejemplo, intercalar búsquedas no obvias en el medio de su escritura "secuencial". Pero en la mayoría de los casos, escribir "se ve" secuencialmente en la capa de aplicación (sin búsquedas, muchas E/S continuas) tendrá un rendimiento de escritura secuencial mientras que la escritura que "se ve" al azar en la capa de aplicación tendrá (generalmente peor) rendimiento de escritura aleatoria.