En el almacenamiento informático , un búfer de disco (a menudo llamado ambiguamente caché de disco o búfer de caché ) es la memoria integrada en una unidad de disco duro (HDD) o unidad de estado sólido (SSD) que actúa como un búfer entre el resto de la computadora y el plato del disco duro físico o la memoria flash que se utiliza para el almacenamiento. [1] Las unidades de disco duro modernas vienen con 8 a 256 MiB de dicha memoria, y las unidades de estado sólido vienen con hasta 4 GB de memoria caché. [2]
Desde finales de los años 1980, casi todos los discos que se venden tienen microcontroladores integrados y una interfaz ATA , Serial ATA , SCSI o Fibre Channel . Los circuitos de la unidad suelen tener una pequeña cantidad de memoria, que se utiliza para almacenar los datos que van y vienen de los platos del disco.
El búfer de disco es físicamente distinto y se utiliza de forma diferente al caché de páginas que normalmente mantiene el sistema operativo en la memoria principal del ordenador . El búfer de disco está controlado por el microcontrolador de la unidad de disco duro, y el caché de páginas está controlado por el ordenador al que está conectado ese disco. El búfer de disco suele ser bastante pequeño, oscilando entre 8 MB y 4 GB, y el caché de páginas suele ser toda la memoria principal sin utilizar. Mientras que los datos del caché de páginas se reutilizan varias veces, los datos del búfer de disco rara vez se reutilizan. [3] En este sentido, los términos caché de disco y búfer de caché son nombres inapropiados; la memoria del controlador integrado se denomina de forma más apropiada búfer de disco .
Tenga en cuenta que los controladores de matriz de discos , a diferencia de los controladores de disco , generalmente tienen una memoria caché normal de alrededor de 0,5 a 8 GiB.
Cuando el controlador de un disco ejecuta una lectura física, el actuador mueve el cabezal de lectura/escritura hacia (o cerca de) el cilindro correcto. Después de un tiempo de estabilización y posiblemente de un accionamiento preciso, el cabezal de lectura comienza a captar datos de la pista y todo lo que queda por hacer es esperar hasta que la rotación del plato traiga los datos solicitados.
Los datos leídos antes de la solicitud durante esta espera no se solicitan pero son gratuitos, por lo que normalmente se guardan en el búfer del disco en caso de que se soliciten más tarde.
De manera similar, los datos se pueden leer de forma gratuita después de los solicitados si el cabezal puede permanecer en el camino porque no hay otra lectura que ejecutar o el siguiente accionamiento puede comenzar más tarde y aún completarse a tiempo. [4]
Si varias lecturas solicitadas están en la misma pista (o cerca en una pista en espiral), la mayoría de los datos no solicitados entre ellas se leerán tanto hacia adelante como hacia atrás.
La velocidad de la interfaz de E/S del disco hacia la computadora casi nunca coincide con la velocidad a la que se transfieren los bits hacia y desde el plato del disco duro . El búfer del disco se utiliza para que tanto la interfaz de E/S como el cabezal de lectura/escritura del disco puedan funcionar a toda velocidad.
El microcontrolador incorporado del disco puede indicar a la computadora principal que se ha completado una escritura en el disco inmediatamente después de recibir los datos de escritura, antes de que los datos se escriban realmente en el plato. Esta señal temprana permite que la computadora principal continúe trabajando aunque los datos todavía no se hayan escrito. Esto puede ser un tanto peligroso, porque si se corta la energía antes de que los datos se fijen de forma permanente en el medio magnético, los datos se perderán del búfer del disco y el sistema de archivos del disco puede quedar en un estado inconsistente.
En algunos discos, este período vulnerable entre la señalización de que la escritura se ha completado y la corrección de los datos puede ser arbitrariamente largo, ya que la escritura puede diferirse indefinidamente debido a las nuevas solicitudes que llegan. Por este motivo, el uso de la aceleración de escritura puede ser controvertido. Sin embargo, se puede mantener la coherencia utilizando un sistema de memoria respaldado por batería para almacenar los datos en caché, aunque esto normalmente solo se encuentra en controladores RAID de alta gama .
Como alternativa, el almacenamiento en caché se puede desactivar simplemente cuando se considera que la integridad de los datos es más importante que el rendimiento de escritura. Otra opción es enviar datos al disco en un orden cuidadosamente administrado y emitir comandos de "vaciado de caché" en los lugares correctos, lo que generalmente se conoce como implementación de barreras de escritura .
Los discos SATA más nuevos y la mayoría de los discos SCSI pueden aceptar varios comandos mientras se ejecuta un comando mediante la "cola de comandos" (consulte NCQ y TCQ ). Estos comandos se almacenan en el controlador integrado del disco hasta que se completan. Una ventaja es que los comandos se pueden reordenar para que se procesen de manera más eficiente, de modo que los comandos que afectan la misma área de un disco se agrupen. Si una lectura hace referencia a los datos en el destino de una escritura en cola, se devolverán los datos que se van a escribir.
NCQ se utiliza generalmente en combinación con el almacenamiento en búfer de escritura habilitado. En el caso de un comando FPDMA de lectura/escritura con el bit de acceso forzado a la unidad (FUA) establecido en 0 y el almacenamiento en búfer de escritura habilitado, un sistema operativo puede ver que la operación de escritura finaliza antes de que los datos se escriban físicamente en el medio. En el caso del bit FUA establecido en 1 y el almacenamiento en búfer de escritura habilitado, la operación de escritura se reanuda solo después de que los datos se escriban físicamente en el medio.
Los datos que se aceptaron en la memoria caché de escritura de un dispositivo de disco se escribirán eventualmente en los platos del disco, siempre que no se produzca una condición de inanición como resultado de una falla del firmware y que el suministro de energía del disco no se interrumpa antes de que las escrituras en caché se fuercen a los platos del disco. Para controlar la memoria caché de escritura, la especificación ATA incluyó los comandos FLUSH CACHE (E7h) y FLUSH CACHE EXT (EAh). Estos comandos hacen que el disco complete la escritura de datos desde su memoria caché y el disco volverá a estar en buen estado después de que los datos en la memoria caché de escritura se escriban en el medio del disco. Además, cuando la unidad recibe el comando STANDBY IMMEDIATE, en el medio del disco este comando aparcará el cabezal, en el medio flash este comando guardará la tabla de mapeo FTL . [5]
Un sistema operativo enviará los comandos FLUSH CACHE y STANDBY IMMEDIATE a las unidades de disco duro durante el proceso de apagado.
El vaciado obligatorio de caché se utiliza en Linux para barreras de escritura en algunos sistemas de archivos (por ejemplo, ext4 ), junto con el comando de escritura Force Unit Access para bloques de confirmación de diario . [6]
Force Unit Access (FUA) es una opción de comando de escritura de E/S que fuerza la escritura de los datos hasta el almacenamiento estable. [7] Los comandos de escritura FUA (WRITE DMA FUA EXT – 3Dh, WRITE DMA QUEUED FUA EXT – 3Eh, WRITE MULTIPLE FUA EXT – CEh), a diferencia de los comandos correspondientes sin FUA, escriben datos directamente en el medio, independientemente de si el almacenamiento en caché de escritura en el dispositivo está habilitado o no. El comando de escritura FUA no regresará hasta que los datos se escriban en el medio, por lo tanto, los datos escritos por un comando de escritura FUA completado están en el medio permanente incluso si el dispositivo se apaga antes de emitir un comando FLUSH CACHE. [8] [ enlace inactivo ] [9]
FUA apareció en el conjunto de comandos SCSI y luego fue adoptado por SATA con NCQ . FUA es más detallado, ya que permite forzar una sola operación de escritura a un medio estable y, por lo tanto, tiene un impacto menor en el rendimiento general en comparación con los comandos que vacían todo el caché del disco, como la familia de comandos ATA FLUSH CACHE. [9] [10]
Windows (Vista y versiones posteriores) admite FUA como parte de NTFS transaccional , pero solo para discos SCSI o de canal de fibra donde la compatibilidad con FUA es común. [11] No se sabe si una unidad SATA que admita comandos de escritura FUA realmente respetará el comando y escribirá datos en los platos del disco según las instrucciones; [ cita requerida ] por lo tanto, Windows 8 y Windows Server 2012 en su lugar envían comandos para vaciar la caché de escritura del disco después de ciertas operaciones de escritura. [12] [ enlace muerto ]
Aunque el kernel de Linux obtuvo soporte para NCQ alrededor de 2007, SATA FUA permanece deshabilitado de manera predeterminada debido a regresiones que se encontraron en 2012 cuando se probó el soporte del kernel para FUA. [13] [14] El kernel de Linux admite FUA en el nivel de capa de bloque. [15]
búfer de una unidad es una cantidad de RAM en la unidad para almacenar datos a los que se accede con frecuencia desde la unidad.
MEMORIA CACHÉ: 4 GB DDR4 de bajo consumo (4096 GB)