Almacenamiento de Hyper-V: capas de almacenamiento en caché e implicaciones para la coherencia de datos

En este artículo se proporciona información general sobre el almacenamiento en caché en la pila de almacenamiento virtual y se proporcionan instrucciones a los desarrolladores y administradores de software para asegurarse de que se cumplen los requisitos de coherencia de datos deseados.

Se aplica a: Windows Server 2012 R2
Número de KB original: 2801713

Más información

Al menos, las distintas capas de almacenamiento en caché del sistema suelen implicar lo siguiente:

  • Caché del sistema de archivos. De forma predeterminada, Windows almacena en caché los datos de archivo que se leen de discos y se escriben en discos. Esto implica que las operaciones de lectura leen datos de archivo de un área de la memoria del sistema que se conoce como caché de archivos del sistema en lugar de desde el disco físico. Por lo tanto, las operaciones de escritura escriben datos de archivo en la caché de archivos del sistema en lugar de en el disco, y este tipo de caché se conoce como caché de reescritura. Las aplicaciones pueden usar la semántica sin búfer del sistema de archivos para asegurarse de que las escrituras no se almacenan en caché en la caché del sistema.
  • Memoria caché de unidades de disco. Las unidades de disco implementan el almacenamiento en caché en la capa de firmware para mejorar el rendimiento de las unidades de disco. Aunque el almacenamiento en caché en la capa de firmware puede mejorar el rendimiento, los datos del disco se pueden perder antes de que se escriban en el disco en caso de un error de energía. Las opciones para controlar este comportamiento de almacenamiento en caché forman parte de interfaces de unidad estandarizadas como SCSI, SATA y ATA. Estas opciones son las siguientes:
    1. Use el mecanismo de control por E/S que se conoce como Force Unit Access (FUA). Esta marca especifica que la unidad debe escribir los datos en el almacenamiento de medios estable antes de que finalice la señalización. Las aplicaciones que tienen que hacer esto se aseguran de que los datos sean estables en el problema de disco FUA para asegurarse de que los datos no se pierdan si se produce un error de energía.

      Las unidades de disco de clase de servidor (SCSI y canal de fibra) suelen admitir la marca FUA. En las unidades de mercancías (ATA, SATA y USB), es posible que fua no se respete. Esto puede dejar los datos en un estado incoherente a menos que la memoria caché de escritura de la unidad esté deshabilitada. Asegúrese de que el subsistema de disco controla FUA correctamente si depende de este mecanismo.

    2. Forzar el vaciado de caché de disco. Una aplicación o sistema que envía un vaciado al disco obligará al subsistema de disco a escribir todos los datos de su memoria caché en el disco. La emisión de vaciados con demasiada frecuencia tendrá consecuencias de rendimiento porque toda la información de la memoria caché del disco tendrá que escribirse en el medio de disco antes de que se devuelva el vaciado.

    3. Deshabilite el almacenamiento en caché de disco. Puede deshabilitar el almacenamiento en caché de escritura de un disco mediante la emisión del código de control de IOCTL_DISK_SET_CACHE_INFORMATION en el disco. El estado de la caché de escritura (activado o desactivado) se conservará en todos los reinicios del sistema. La emisión de este código de control tendrá consecuencias de rendimiento muy importantes para todos los mecanismos de E/S que se emiten en ese disco. Estas consecuencias probablemente incluirán una notable disminución del rendimiento. Debe considerar cuidadosamente el uso de este código de control antes de implementarlo.

      Nota:

      Si no puede deshabilitar el almacenamiento en caché de disco, debe tener en cuenta las opciones 1 y 2.

Por lo tanto, si la aplicación o carga de trabajo se ejecuta dentro de la máquina virtual (VM), las distintas capas de almacenamiento en caché tienen implicaciones de coherencia de datos.

  • Caché del sistema de archivos invitado. Esta capa se puede omitir mediante la semántica sin búfer del sistema de archivos, como se mencionó anteriormente.

  • Memoria caché de disco virtual invitado. El IDE virtualizado (emulado o sintético) o el dispositivo SCSI notificarán el estado de caché de escritura devuelto por la pila inferior. Los discos virtuales notificarán que su memoria caché de escritura está habilitada y se niegan a permitir que el invitado desactive la caché de escritura. Al deshabilitar la memoria caché, se producirá un error y siempre responderá que la memoria caché está habilitada. Este comportamiento es necesario por los siguientes motivos:

    • Hyper-V no puede suponer que todas las máquinas virtuales que se ejecutan en el mismo disco tendrán que tener la misma configuración de caché de disco.

    • Es posible que el almacenamiento subyacente tenga una caché de escritura siempre activa que no se pueda desactivar. Esto se destaca por el hecho de que el disco virtual se puede migrar a un disco diferente en el mismo host (migración de almacenamiento en vivo) o a otro host (migración en vivo).

      Dado que las aplicaciones no podrán desactivar la caché de disco, cualquier aplicación del invitado que tenga que asegurarse de la integridad de los datos en un error de energía tendrá que usar la opción 1 o la opción 2 para asegurarse de que las escrituras omiten la memoria caché del disco.

  • Caché del sistema de archivos de host. La pila de almacenamiento de Hyper-V también usa escrituras sin búfer para asegurarse de que las escrituras del invitado omiten la pila del sistema de archivos del host subyacente.

  • Caché de disco de host. FUA, si lo establece el invitado, se propaga al host y a la pila de almacenamiento del host. El sistema de disco físico del host debe cumplir al menos uno de los siguientes criterios para asegurarse de la integridad de los datos de la carga de trabajo virtualizada a través de errores de energía:

    • El sistema usa discos de clase de servidor (SCSI, canal de fibra).
    • El sistema se asegura de que los discos estén conectados a un adaptador de bus host de almacenamiento en caché (HBA) con respaldo de batería.
    • El sistema usa un controlador de almacenamiento (por ejemplo, un sistema RAID) como dispositivo de almacenamiento.
    • El sistema garantiza que la alimentación al disco esté protegida por una fuente de alimentación ininterrumpida (UPS).
    • El sistema se asegura de que la característica de almacenamiento en caché de escritura del disco esté deshabilitada.