En el almacenamiento de una computadora , 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 entre 8 y 256 MiB de dicha memoria, y las unidades de estado sólido vienen con hasta 4 GB de memoria caché. [2]
Desde finales de la década de 1980, casi todos los discos vendidos tienen microcontroladores integrados y una interfaz ATA , Serial ATA , SCSI o Fibre Channel . El circuito de la unidad suele 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 manera diferente al caché de páginas que normalmente guarda el sistema operativo en la memoria principal de la computadora . El búfer del disco está controlado por el microcontrolador de la unidad de disco duro y el caché de la página está controlado por la computadora a la que está conectado ese disco. El búfer del disco suele ser bastante pequeño, oscilando entre 8 MB y 4 GB, y la caché de páginas generalmente es toda la memoria principal no utilizada. Si bien los datos del caché de la página se reutilizan varias veces, los datos del búfer del 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 llama más apropiadamente buffer de disco .
Tenga en cuenta que los controladores de matriz de discos , a diferencia de los controladores de discos , suelen tener 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 al cilindro correcto (o cerca de él). Después de un poco de asentamiento y posiblemente de una actuación precisa, el cabezal de lectura comienza a recoger 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 son solicitados pero son gratuitos, por lo que normalmente se guardan en el búfer del disco en caso de que se soliciten más adelante.
De manera similar, los datos se pueden leer de forma gratuita detrás del solicitado si el cabezal puede mantener el rumbo porque no hay otra lectura que ejecutar o la siguiente actuación 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 por delante como por detrás.
La velocidad de la interfaz de E/S del disco a 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 de disco se utiliza para que tanto la interfaz de E/S como el cabezal de lectura/escritura del disco puedan funcionar a máxima velocidad.
El microcontrolador integrado en el disco puede indicarle a la computadora principal que la escritura en el disco se ha completado 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 funcionando aunque los datos aún no se hayan escrito. Esto puede ser algo peligroso, porque si se corta la energía antes de que los datos se fijen permanentemente 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ñal de que la escritura se completó y la corrección de los datos puede ser arbitrariamente largo, ya que la escritura puede diferirse indefinidamente por las nuevas solicitudes que llegan. Por este motivo, el uso de la aceleración de escritura puede resultar controvertido. Sin embargo, se puede mantener la coherencia utilizando un sistema de memoria respaldado por batería para almacenar datos en caché, aunque esto normalmente sólo se encuentra en controladores RAID de alta gama .
Alternativamente, el almacenamiento en caché se puede simplemente desactivar cuando la integridad de los datos se considere 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 múltiples comandos mientras cualquier comando está en operación a través de "cola de comandos" (consulte NCQ y TCQ ). Estos comandos son almacenados por el controlador integrado del disco hasta que se completan. Una ventaja es que los comandos se pueden reordenar para procesarlos de manera más eficiente, de modo que los comandos que afectan a 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 generalmente se usa 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 Force Unit Access (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 de que el bit FUA esté establecido en 1 y el almacenamiento en búfer de escritura esté habilitado, la operación de escritura regresa solo después de que los datos se escriben físicamente en el medio.
Los datos que se aceptaron en la caché de escritura de un dispositivo de disco eventualmente se escribirán 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 caché de escritura, la especificación ATA incluía los comandos FLUSH CACHE (E7h) y FLUSH CACHE EXT (EAh). Estos comandos hacen que el disco complete la escritura de datos desde su caché y el disco devolverá un buen estado después de que los datos de la caché de escritura se escriban en el medio del disco. Además, cuando la unidad recibió el comando STANDBY IMMEDIATE, en el disco este comando estacionará 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 de caché obligatorio 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 los datos escritos hasta su almacenamiento estable. [7] 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 se escribe en caché 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 completo están en el medio permanente incluso si el dispositivo está apagado antes de emitir un comando FLUSH CACHE. [8] [ enlace muerto ] [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 en medios estables y, por lo tanto, tiene un menor impacto 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 Fibre Channel 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 necesaria ] por lo tanto, Windows 8 y Windows Server 2012 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 forma predeterminada debido a las 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]
El 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)