Descripción de la caché de un bloque de almacenamiento
Se aplica a: Azure Stack HCI, versiones 22H2 y 21H2; Windows Server 2022, Windows Server 2019
Importante
Azure Stack HCI ahora forma parte de Azure Local. El cambio de nombre de la documentación del producto está en curso. Sin embargo, las versiones anteriores de Azure Stack HCI, por ejemplo, 22H2 seguirán haciendo referencia a Azure Stack HCI y no reflejarán el cambio de nombre. Más información.
Espacios de almacenamiento directo, la tecnología de virtualización de almacenamiento básico subyacente a Azure Stack HCI y Windows Server, incluye una memoria caché de servidor integrada para maximizar el rendimiento del almacenamiento a la vez que se reducen los costos. Se trata de una memoria caché de lectura y escritura de gran tamaño, persistente y en tiempo real que se configura automáticamente tras la implementación. En la mayoría de los casos, no se requiere ninguna administración manual. El funcionamiento de la caché depende de los tipos de unidades presentes.
Espacios de almacenamiento directo funciona actualmente con cuatro tipos de unidades:
Tipo de unidad | Descripción |
---|---|
PMem hace referencia a la memoria persistente, un nuevo tipo de almacenamiento de baja latencia y alto rendimiento. | |
NVMe (memoria no volátil rápida) hace referencia a las unidades de estado sólido que se colocan directamente en el bus PCIe. Los factores de forma comunes son 2,5" U.2, AIC (Add-In Card) PCIe y M.2. NVMe ofrece mayor rendimiento de IOPS y E/S con latencia más baja que ningún otro tipo de unidad que se admita hoy en día excepto PMem. | |
SSD hace referencia a las unidades de estado sólido, que se conectan a través de un dispositivo SATA o SAS convencional. | |
HDD hace referencia a unidades de disco duro magnéticas de rotación que ofrecen gran capacidad de almacenamiento a un bajo costo. |
Estos se pueden combinar de varias maneras que se agrupan en dos categorías: "todo flash" e "híbrida". No se admiten las implementaciones con todos los HDD.
Nota
En este artículo se tratan las configuraciones de caché con NVMe, SSD y HDD. Para más información sobre el uso de la memoria persistente como caché, consulte Descripción e implementación de una memoria persistente.
Todas las implementaciones all-flash tienen el objetivo de maximizar el rendimiento del almacenamiento y no incluyen HDD.
Las implementaciones híbridas tienen como objetivo equilibrar el rendimiento y la capacidad o maximizar la capacidad, e incluyen HDD.
Nota
La implementación híbrida no se admite en la configuración de servidor único. Todas las configuraciones de tipo de almacenamiento único plano (por ejemplo, all-NVMe o all-SSD) son el único tipo de almacenamiento admitido para un solo servidor.
En las implementaciones con varios tipos de unidades, Espacios de almacenamiento directo usa automáticamente todas las unidades del tipo más rápido para el almacenamiento en caché. Las unidades restantes se usan para la capacidad.
El tipo "más rápido" se determina según la siguiente jerarquía.
Por ejemplo, si tiene NVMe y SSD, la NVMe se almacenará en caché para los SSD.
Si tiene SSD y HDD, los SSD se almacenarán en caché para los discos duros.
Nota
Las unidades de caché no contribuyen a la capacidad de almacenamiento utilizable del clúster. Todos los datos almacenados en la caché también se almacenan en otro lugar, o bien lo harán una vez que se retiren del almacenamiento provisional. Esto significa que la capacidad total de almacenamiento sin procesar del clúster es la suma de las unidades de capacidad únicamente.
Si todas las unidades son del mismo tipo, no se configura automáticamente ninguna caché. Tienes posibilidad de configurar manualmente unidades de mayor resistencia para caché en el caso de unidades de menor resistencia del mismo tipo. Consulta la sección Configuración manual para aprender a hacerlo.
Sugerencia
En algunos casos, el uso de la caché del bloque de almacenamiento no tiene sentido. Por ejemplo, en las implementaciones con todo NVMe o todo SSD, especialmente en escalados muy pequeños, no tener unidades "dedicadas" en la memoria caché puede mejorar la eficacia del almacenamiento y maximizar el rendimiento. Del mismo modo, las implementaciones pequeñas de oficinas remotas o sucursales pueden tener espacio limitado para las unidades de caché.
El comportamiento de la memoria caché se determina automáticamente según los tipos de las unidades de las que se realiza el almacenamiento en caché. Al realizar el almacenamiento en caché de las unidades flash (por ejemplo, almacenamiento en caché NVMe para SSD), solo las escrituras se almacenan en caché. Al almacenar en caché las unidades de disco giratorio (por ejemplo, almacenar en caché los discos SSD para las unidades HDD), tanto las lecturas como las escrituras se almacenan en caché.
El almacenamiento en caché puede usarse en un escenario all-flash, por ejemplo, mediante NVMe como caché para acelerar el rendimiento de los discos SSD. Al almacenar en memoria caché para las implementaciones all-flash, solo se almacenan en caché las escrituras. Esto reduce el desgaste en las unidades de capacidad, ya que muchas escrituras y reescrituras pueden fusionarse en la memoria caché y, posteriormente, retirarse del almacenamiento provisional solo según sea necesario, lo que reduce el tráfico acumulativo a las unidades de capacidad y amplía su duración. Por esta razón, se recomienda seleccionar unidades de mayor resistencia y optimizadas para escritura para la caché. Las unidades de capacidad pueden tener, por consiguiente, una menor resistencia de escritura.
Dado que las lecturas no afectan de forma significativa a la duración de la memoria flash y dado que los discos SSD ofrecen generalmente una baja latencia de lectura, las lecturas no se almacenan en caché: se envían directamente desde las unidades de capacidad (excepto cuando los datos se han escrito tan recientemente que aún no se han retirado del almacenamiento provisional). Esto permite que la memoria caché se dedique por completo a las escrituras, lo cual aumenta al máximo su eficacia.
Como resultado, las características de escritura, como la latencia de escritura, están determinadas por las unidades de caché, mientras que las características de lectura están determinadas por las unidades de capacidad. Ambos son coherentes, predecibles y uniformes.
Al almacenar en caché los discos HDD, las lecturas y las escrituras se almacenan en caché para proporcionar una latencia similar a la de la memoria flash (a menudo 10 veces mejor) para ambas. La memoria caché de lectura almacena datos que se han leído recientemente y con frecuencia para obtener un acceso rápido y para minimizar el tráfico aleatorio a las unidades de disco duro. (Debido a retrasos de búsqueda y rotación, la latencia y el tiempo perdido que incurre el acceso aleatorio a un HDD es significativo). Las escrituras se almacenan en caché para absorber ráfagas y, como antes, para fusionar escrituras y reescrituras y minimizar el tráfico acumulado a las unidades de capacidad.
Espacios de almacenamiento directo implementa un algoritmo que anula la aleatorización de las escrituras antes de retirarlas del almacenamiento provisional, para emular un patrón de E/S en el disco que parece secuencial incluso cuando el patrón de E/S real procedente de la carga de trabajo (por ejemplo, de las máquinas virtuales) es aleatorio. Esto maximiza el número de operaciones de entrada y salida y el rendimiento de las unidades HDD.
Cuando hay unidades de los tres tipos, las unidades de NVMe proporcionan almacenamiento en caché para los discos SSD y HDD. El comportamiento es como el descrito anteriormente: solo se almacenan en caché las escrituras para los discos SSD, y las lecturas y escrituras para las unidades de disco duro. La carga del almacenamiento en caché para las unidades de disco duro se distribuye uniformemente entre las unidades de caché.
En la siguiente tabla se resumen qué unidades se usan para almacenar en caché, cuáles se usan para capacidad y cuál es el comportamiento del almacenamiento en caché para cada posibilidad de implementación.
Implementación | Unidades de caché | Unidades de capacidad | Comportamiento de la caché (predeterminado) |
---|---|---|---|
Todo NVMe | Ninguno (Opcional: configurar manualmente) | NVMe | Solo escritura (si está configurado) |
Todo SSD | Ninguno (Opcional: configurar manualmente) | SSD | Solo escritura (si está configurado) |
NVMe + SSD | NVMe | SSD | Solo escritura |
NVMe + HDD | NVMe | HDD | Lectura + escritura |
SSD + HDD | SSD | HDD | Lectura + escritura |
NVMe + SSD + HDD | NVMe | SSD + HDD | Lectura + escritura para HDD, solo escritura para SSD |
La memoria caché se implementa en el nivel de unidad: las unidades de caché individuales dentro de un servidor están enlazadas a una o varias unidades de capacidad en el mismo servidor.
Dado que la memoria caché está debajo del resto de la pila de almacenamiento definido por software de Windows, no tiene ni necesita el reconocimiento de conceptos como espacios de almacenamiento o tolerancia a errores. Puede considerarlo como la creación de unidades "híbridas" (en parte flash, en parte disco) que luego se presentan al sistema operativo. Al igual que con una unidad híbrida real, el movimiento en tiempo real de los datos fríos y calientes entre las partes más rápidas y más lentas de los medios físicos es casi invisible en el exterior.
Dado que la resistencia de la característica Espacios de almacenamiento directo ocurre, como mínimo, en el nivel de servidor (es decir, las copias de datos siempre se escriben en servidores diferentes, a lo sumo una copia por servidor), los datos que están en la memoria caché aprovechan la misma resistencia que los datos que no están en la caché.
Por ejemplo, cuando se usa la creación de reflejo triple, se escriben tres copias de los datos en servidores diferentes, y se colocan en la memoria caché. Independientemente de si se retiran del almacenamiento provisional posteriormente o no, siempre existirán tres copias.
El enlace entre las unidades de caché y de capacidad puede tener cualquier proporción, desde 1:1 hasta 1:12 e incluso más. Se ajusta dinámicamente cada vez que se agregan o quitan unidades como, por ejemplo, al escalar verticalmente o después de errores. Esto significa que puede agregar unidades de caché o unidades de capacidad de forma independiente, siempre que lo desee.
Se recomienda que el número de unidades de capacidad sea un múltiplo del número de unidades de caché por motivos de simetría. Por ejemplo, si tienes 4 unidades de caché, habrá un rendimiento más uniforme con 8 unidades de capacidad (relación 1:2) que con 7 o 9 unidades.
Cuando se produce un error en una unidad de caché, todas las escrituras que aún no se han movido se pierden en el servidor local, lo que significa que solo existen en las demás copias (en otros servidores). Al igual que después de cualquier otro error de unidad, los espacios de almacenamiento pueden recuperarse automáticamente, y así lo hacen, mediante la consulta de las copias supervivientes.
Durante un breve período, las unidades de capacidad que estaban enlazadas a la unidad de caché perdida aparecerán en estado incorrecto. Una vez que se ha completado el reenlace de la memoria caché (de forma automática) y la reparación de datos se ha completado (de forma automática), las unidades se reanudarán y aparecerán con estado correcto.
Este escenario es el motivo por el que se necesitan al menos dos unidades de caché por servidor para mantener el rendimiento.
Después, puede reemplazar la unidad de caché igual que lo haría con cualquier otra unidad.
Nota
Es posible que tenga que apagar para reemplazar de forma segura una NVMe que sea una tarjeta de expansión (AIC) o un factor de forma M.2.
Hay varias memorias caché no relacionadas en la pila de almacenamiento definida por software de Windows. Entre los ejemplos se incluyen la caché con reescritura de Espacios de almacenamiento y la caché de lectura en memoria del volumen compartido de clúster (CSV).
Con Azure Stack HCI, no se debería modificar el comportamiento predeterminado de la caché con reescritura de espacios de almacenamiento. Por ejemplo, no se deben usar parámetros como -WriteCacheSize en el cmdlet New-Volume.
Puede optar por usar la memoria caché de CSV o no: depende de usted. Está activada de manera predeterminada en Azure Stack HCI, pero no entra en conflicto con la caché que se describe en este tema de ningún modo. En algunos escenarios, puede mejorar el rendimiento significativamente. Para más información, consulte Uso de la caché de lectura en memoria de Volumen compartido de clúster con Azure Stack HCI.
Para la mayoría de las implementaciones, no se requiere la configuración manual. En caso de que lo necesite, consulte las secciones siguientes.
Si necesita realizar cambios en el modelo de dispositivo de la caché después de la instalación, edite el documento de componentes de soporte del Servicio de mantenimiento, como se describe en la introducción al Servicio de mantenimiento.
En las implementaciones donde todas las unidades tienen el mismo tipo, como las implementaciones de todas unidades NVMe o SSD, no se configura ninguna memoria caché porque Windows no puede distinguir automáticamente las características (por ejemplo, la resistencia de escritura) entre las unidades del mismo tipo.
Si quieres usar unidades de mayor resistencia para almacenar en caché para unidades del mismo tipo que tienen menor resistencia, puedes especificar qué modelo de unidad se va a usar mediante el parámetro -CacheDeviceModel del cmdlet Enable-ClusterS2D. Todas las unidades de ese modelo se usarán para el almacenamiento en caché.
Sugerencia
Asegúrese de que la cadena del modelo coincida exactamente como aparece en la salida de Get-PhysicalDisk.
En primer lugar, obtenga una lista de discos físicos:
Get-PhysicalDisk | Group Model -NoElement
A continuación se muestra una salida de ejemplo:
Count Name
----- ----
8 FABRIKAM NVME-1710
16 CONTOSO NVME-1520
A continuación, escriba el siguiente comando, especificando el modelo de dispositivo de la caché:
Enable-ClusterS2D -CacheDeviceModel "FABRIKAM NVME-1710"
Puedes comprobar que las unidades que propones están en uso para almacenamiento en caché al ejecutar Get-PhysicalDisk en PowerShell y comprobar que su propiedad Usage indica "Journal" .
La configuración manual habilita las siguientes posibilidades de implementación:
Es posible reemplazar el comportamiento predeterminado de la memoria caché. Por ejemplo, puede establecerlo en lecturas de caché en una implementación con todo flash. No es recomendable que modifique el comportamiento a menos que esté seguro de que el predeterminado no es adecuado para su carga de trabajo.
Para reemplazar el comportamiento, use el cmdlet Set-ClusterStorageSpacesDirecty sus parámetros -CacheModeSSD y -CacheModeHDD. El parámetro CacheModeSSD establece el comportamiento de la caché al almacenar en caché para los discos SSD. El parámetro CacheModeHDD establece el comportamiento de la caché al almacenar en caché para los discos HDD.
Puede usar Get-ClusterStorageSpacesDirect para comprobar que se ha establecido el comportamiento.
Primero, obtenga la configuración de Espacios de almacenamiento directo:
Get-ClusterStorageSpacesDirect
A continuación se muestra una salida de ejemplo:
CacheModeHDD : ReadWrite
CacheModeSSD : WriteOnly
A continuación, haga lo siguiente:
Set-ClusterStorageSpacesDirect -CacheModeSSD ReadWrite
Get-ClusterS2D
A continuación se muestra una salida de ejemplo:
CacheModeHDD : ReadWrite
CacheModeSSD : ReadWrite
La memoria caché debe tener un tamaño que permita dar cabida al conjunto de trabajo (los datos que se leen o escriben activamente en un momento determinado) de las aplicaciones y las cargas de trabajo.
Esto resulta especialmente importante en implementaciones híbridas con unidades de disco duro. Si el conjunto de trabajo activo supera el tamaño de la caché, o si el conjunto de trabajo activo se desplaza demasiado rápido, aumentarán los errores de caché de lectura y será necesario mover las escrituras de forma más agresiva, lo que afectará al rendimiento general.
Puede usar la utilidad Monitor de rendimiento (PerfMon.exe) integrada en Windows para inspeccionar el número de errores de la caché. En concreto, puedes comparar el valor de Cache Miss Reads/sec del contador Cluster Storage Hybrid Disk establecido para la E/S por segundo de lectura general de la implementación. Cada "disco híbrido" se corresponde con una unidad de capacidad.
Por ejemplo, 2 unidades de caché enlazadas a 4 unidades de capacidad dan como resultado 4 instancias de objetos de "disco híbrido" por servidor.
No hay ninguna regla universal, pero si faltan demasiadas lecturas en la memoria caché, es posible que el tamaño de la caché sea insuficiente y debas contemplar la posibilidad de agregar unidades de caché para ampliarla. Puede agregar unidades de caché o unidades de capacidad de forma independiente, siempre que lo desee.
Para más información sobre almacenamiento, consulte también: