2009-05-14 17 views

Respuesta

17

Esto es realmente una pregunta bastante complicada, y requiere una comprensión de cómo está configurado su sistema de E/S. El ejemplo simple que está citando (leer/escribir una cantidad fija de datos en una ubicación particular en el disco) no es tan realista como podría pensar. Aquí hay un breve resumen de las cosas que pueden afectar el rendimiento de E/S.

  1. La velocidad del disco
    Velocidad del disco duro se expresa generalmente en términos de número de revoluciones (rpm o revoluciones por minuto), que le dice qué tan rápido los discos giran alrededor dentro de la unidad. Los valores típicos son de 5400 a 10,000rpm. Typical transfer rates son de 1-1.6 GBit/seg, y pueden soportar velocidades de transferencia de hasta 125 MB/seg.

    Tenga en cuenta que hay una diferencia entre latency y throughput. Si escribe datos muy pequeños en diferentes lugares de la unidad, depende de la latencia de la unidad (seek time, rotational delay y el tiempo de acceso). Pero si transmite una gran cantidad de datos a la vez, probablemente dependa más del rendimiento. Su sistema de archivos determina cómo se distribuyen los archivos en el disco, y puede tratar de optimizarlo para cosas como esta (ver a continuación).

    Otra cosa a considerar es que usted puede (y la mayoría de las empresas lo hacen) obtener velocidades de transferencia más rápidas usando múltiples unidades en una configuración RAID. El rendimiento de las unidades RAID depende de la combinación de trazado, duplicado y paridad que haya elegido. Consulte Wikipedia article para conocer todas las sutilezas. Hay demasiados parámetros para explicar en su totalidad aquí.

  2. almacenamiento en caché
    del moderno sistema operativo programar cuidadosamente cuando interactúan con la unidad de disco. Entre su programa y el disco físico puede haber varias capas de cachés, por lo que el rendimiento que verá como programador de aplicaciones puede depender más de cómo maneja su SO los datos que del rendimiento real de su disco.

    La mayoría de los sistemas operativos actuales utilizan un buffer cache para que los datos del disco se puedan conservar en la memoria y el sistema operativo pueda programar cuándo se comunica con el disco. Las escrituras de una aplicación parecerán rápidas, ya que pueden pasar directamente a la memoria y el sistema operativo puede esperar para descargar el búfer hasta que no tenga nada más que hacer. En la práctica, los sistemas operativos intentarán eliminar las escrituras de manera bastante oportuna, de modo que una falla de energía no mate todos sus datos. Entonces, mientras haya espacio disponible en el búfer, las escrituras parecerán rápidas. Si llena el caché del búfer, o si el sistema operativo tiene poca memoria libre para trabajar, es posible que el rendimiento de E/S se deteriore porque el sistema operativo debe vaciar los almacenamientos intermedios con mayor frecuencia.

    La velocidad de lectura, al igual que la velocidad de escritura, depende de cómo se almacenan los datos en caché. La mayoría de los discos duros actuales tienen cachés de hardware que pueden aumentar la velocidad de transferencia sostenida. Del mismo modo, el sistema operativo usa la memoria caché del búfer para almacenar los archivos a los que ha accedido. Cualquiera de estos puede usar alguna estrategia de captación previa para recuperar datos de la unidad con anticipación si parece que pueda ser necesaria. Con el almacenamiento en caché, las lecturas iniciales pueden ser lentas, pero las lecturas posteriores (especialmente las lecturas de la misma cosa) tomarán menos tiempo si los datos que se van a leer ya se encuentran en un caché en alguna parte.

  3. sistema de archivos
    Por último, está el filesystem a tener en cuenta. Una escritura grande puede no ir al mismo lugar, por lo que no puede simplemente considerar su tasa de transferencia al estimar cuánto tiempo tomará. Los archivos no siempre son contiguos en el disco, y su sistema de archivos tiene que calcular cómo deben distribuirse, lo que puede afectar drásticamente el rendimiento en función de la cantidad de espacio disponible y de cómo es el disco fragmented.

rendimiento de lectura/escritura se reducen a una combinación de todos los efectos mencionados anteriormente, además de las características de la carga de trabajo se pone en la unidad (tamaño de los datos, la frecuencia de lectura y escritura, etc ). Al igual que con la mayoría de las cosas, tendrá que experimentar con su aplicación, el sistema operativo en el que desea ejecutar y su configuración de disco particular para tener una idea realista de cómo funciona.

+0

Excelente resumen. Lo único que agregaría es la precaución habitual: la mayoría de las veces no debes tratar de optimizar esto. A menos que tenga una aplicación muy específica, es más probable que lo haga mal que bien, y mucha gente realmente inteligente ha estado tratando de hacer que el sistema operativo "haga lo correcto". –

+0

Gracias tgamblin por su respuesta detallada. Me llevó a la universidad cuando estudiamos el sistema operativo como parte del plan de estudios :) –

3

Respuesta corta: depende mucho.

Desde un nivel de aplicación, las escrituras generalmente aparecen más rápido. ya que en realidad solo está solicitando que el sistema operativo escriba datos, y el sistema operativo puede devolvérselo rápidamente y escribir los datos en su tiempo libre. Con una lectura, debe esperar a que el sistema operativo se comunique con los datos que desea.

El sistema de archivos puede afectar drásticamente la velocidad de las lecturas y escrituras ... a menudo hay más tareas de limpieza en una escritura, pero si se agrega a un archivo que podría ir más rápido.

La mayoría de los discos de estado sólido son mucho más lentos en la escritura que en la lectura.

+0

Además, hay muchas otras consideraciones que hacer cuando tiene matrices RAID. –

1

Los búferes afectarán el tiempo de lectura y escritura en gran cantidad. El sistema operativo puede mantener los búferes en la RAM y muchas unidades también contienen búferes internos que forman parte del controlador de disco.

Tenga en cuenta que el sistema operativo puede almacenar en caché partes de un archivo en la RAM de manera que las lecturas de estas partes se completen muy rápidamente. Además, el sistema operativo podría almacenar en caché las escrituras en la RAM hasta que haya una cantidad suficiente para escribir en el disco. Una llamada a una función 'escribir' podría regresar después de copiar solo los datos a otra área de la memoria.

En resumen y para generalizar, si necesita que los bits se escriban en el disco (utilizando una operación de descarga o algo similar), esta operación será al menos tan larga como la lectura del disco, probablemente más tiempo.

Cuestiones relacionadas