Compreender a cache do agrupamento de armazenamento

Aplica-se a: Azure Stack HCI, versões 22H2 e 21H2; Windows Server 2022, Windows Server 2019

Espaços de Armazenamento Direto, a tecnologia de virtualização de armazenamento fundamental por trás do Azure Stack HCI e do Windows Server, apresenta uma cache incorporada do lado do servidor para maximizar o desempenho do armazenamento, ao mesmo tempo que reduz os custos. É uma cache de leitura e escrita grande, persistente e em tempo real que é configurada automaticamente após a implementação. Na maioria dos casos, não é necessária qualquer gestão manual. A forma como a cache funciona depende dos tipos de unidades presentes.

Tipos de unidade e opções de implementação

Espaços de Armazenamento Direto atualmente funciona com quatro tipos de unidades:

Tipo de unidade Description
PMem PMem refere-se à memória persistente, um novo tipo de baixa latência, armazenamento de alto desempenho.
NVMe NVMe (Express de Memória Não Volátil) refere-se a unidades de estado sólido que se sentam diretamente no barramento PCIe. Os fatores de forma comuns são 2,5" U.2, PcIe Add-In-Card (AIC) e M.2. O NVMe oferece débito de E/S e IOPS mais elevados com latência inferior a qualquer outro tipo de unidade que suportamos atualmente, exceto PMem.
SSD SSD refere-se a unidades de estado sólido, que se ligam através de SATA ou SAS convencionais.
HDD HDD refere-se a discos rígidos magnéticos rotativos, que oferecem uma vasta capacidade de armazenamento a um custo baixo.

Estes podem ser combinados de várias formas, que agrupamos em duas categorias: "all-flash" e "hybrid". As implementações com todo o HDD não são suportadas.

Nota

Este artigo abrange configurações de cache com NVMe, SSD e HDD. Para obter informações sobre como utilizar a memória persistente como cache, veja Compreender e implementar memória persistente.

Todas as possibilidades de implementação flash

As implementações all-flash visam maximizar o desempenho do armazenamento e não incluem HDD.

O diagrama mostra implementações com flash, incluindo NVMe para capacidade, NVMe para cache com SSD para capacidade e SSD para capacidade.

Possibilidades de implementação híbrida

As implementações híbridas visam equilibrar o desempenho e a capacidade ou maximizar a capacidade e incluem HDD.

O diagrama mostra implementações híbridas, incluindo NVMe para cache com HDD para capacidade, SSD para cache com HDD para capacidade e NVMe para cache com HDD mais SSD para capacidade.

Nota

A implementação híbrida não é suportada na configuração de servidor único. Todas as configurações de tipo de armazenamento único simples (por exemplo, all-NVMe ou all-SSD) são o único tipo de armazenamento suportado para um único servidor.

As unidades de cache são selecionadas automaticamente

Em implementações com vários tipos de unidades, Espaços de Armazenamento Direto utiliza automaticamente todas as unidades do tipo mais rápido para colocação em cache. As restantes unidades são utilizadas para capacidade.

O tipo "mais rápido" é determinado de acordo com a seguinte hierarquia.

O diagrama mostra os tipos de disco dispostos mais rapidamente para mais lentos na ordem NVMe, SSD, disco não etiquetado que representa HDD.

Por exemplo, se tiver NVMe e SSDs, o NVMe será colocado em cache para os SSDs.

Se tiver SSDs e HDDs, os SSDs serão colocados em cache para os HDDs.

Nota

As unidades de cache não contribuem com capacidade de armazenamento utilizável para o cluster. Todos os dados armazenados na cache também são armazenados noutro local ou serão desativados. Isto significa que a capacidade total de armazenamento não processado do cluster é apenas a soma das unidades de capacidade.

Quando todas as unidades são do mesmo tipo, nenhuma cache é configurada automaticamente. Tem a opção de configurar manualmente unidades de resistência superior para colocar em cache as unidades de resistência inferior do mesmo tipo – consulte a secção Configuração manual para saber como.

Dica

Em alguns casos, a utilização da cache do agrupamento de armazenamento não faz sentido. Por exemplo, em implementações all-NVMe ou all-SSD, especialmente em escala muito pequena, não ter unidades "gastas" na cache pode melhorar a eficiência de armazenamento e maximizar o desempenho. Da mesma forma, pequenas implementações remotas ou de sucursais podem ter espaço limitado para unidades de cache.

O comportamento da cache é definido automaticamente

O comportamento da cache é determinado automaticamente com base nos tipos de unidades que estão a ser colocadas em cache. Ao colocar em cache as pendrives (como a colocação em cache NVMe para SSDs), apenas as escritas são colocadas em cache. Ao colocar em cache as unidades de disco rotativas (como a colocação em cache de SSDs para HDDs), as leituras e as escritas são colocadas em cache.

Diagrama a comparar a colocação em cache para todas as flashs, onde as escritas são colocadas em cache e as leituras não são, com híbridas, onde as leituras e as escritas são colocadas em cache.

Colocação em cache apenas de escrita para implementações com flash

A colocação em cache pode ser utilizada num cenário de flash total, por exemplo, ao utilizar o NVMe como cache para acelerar o desempenho dos SSDs. Ao colocar em cache as implementações com flash, apenas as escritas são colocadas em cache. Isto reduz o desgaste nas unidades de capacidade, uma vez que muitas escritas e reescritas podem juntar-se na cache e, em seguida, desativar apenas conforme necessário, reduzindo o tráfego cumulativo para as unidades de capacidade e prolongando o seu tempo de vida útil. Por este motivo, recomendamos que selecione unidades otimizadas para escrita e resistência superior para a cache. As unidades de capacidade podem razoavelmente ter uma resistência de escrita mais baixa.

Uma vez que as leituras não afetam significativamente o tempo de vida do flash e, como os SSDs oferecem universalmente baixa latência de leitura, as leituras não são colocadas em cache: são servidas diretamente a partir das unidades de capacidade (exceto quando os dados foram escritos tão recentemente que ainda não foram desprotegidos). Isto permite que a cache seja dedicada inteiramente a escritas, maximizando a sua eficácia.

Isto resulta em características de escrita, como latência de escrita, sendo ditadas pelas unidades de cache, enquanto as características de leitura são ditadas pelas unidades de capacidade. Ambos são consistentes, previsíveis e uniformes.

Colocação em cache de leitura/escrita para implementações híbridas

Ao colocar em cache o HDD, tanto as leituras como as escritas são colocadas em cache, para fornecer latência semelhante a flash (muitas vezes ~ 10x melhor) para ambos. A cache de leitura armazena dados de leitura recente e frequente para acesso rápido e para minimizar o tráfego aleatório para os HDDs. (Devido a atrasos de procura e rotação, a latência e o tempo perdido incorridos pelo acesso aleatório a um HDD são significativos.) As escritas são colocadas em cache para absorver rajadas e, como antes, para ligar escritas e reescritas e minimizar o tráfego cumulativo para as unidades de capacidade.

Espaços de Armazenamento Direto implementa um algoritmo que deslealealiza as escritas antes de as desativar, para emular um padrão de E/S para o disco que parece sequencial mesmo quando a E/S real proveniente da carga de trabalho (como máquinas virtuais) é aleatória. Isto maximiza o IOPS e o débito para os HDDs.

Colocação em cache em implementações com NVMe, SSD e HDD

Quando as unidades dos três tipos estão presentes, as unidades NVMe fornecem colocação em cache tanto para os SSDs como para os HDDs. O comportamento é conforme descrito acima: apenas as escritas são colocadas em cache para os SSDs e as leituras e escritas são colocadas em cache para os HDDs. O fardo da colocação em cache dos HDDs é distribuído uniformemente entre as unidades de cache.

Resumo

Esta tabela resume que unidades são utilizadas para colocação em cache, que são utilizadas para capacidade e qual é o comportamento de colocação em cache para cada possibilidade de implementação.

Implementação Unidades de cache Unidades de capacidade Comportamento da cache (predefinição)
Todos os NVMe Nenhum (Opcional: configurar manualmente) NVMe Só de escrita (se configurado)
Todos os SSD Nenhum (Opcional: configurar manualmente) SSD Só de escrita (se configurado)
NVMe + SSD NVMe SSD Apenas escrita
NVMe + HDD NVMe HDD Leitura + Escrita
SSD + HDD SSD HDD Leitura + Escrita
NVMe + SSD + HDD NVMe SSD + HDD Leitura + Escrita para HDD, Apenas escrita para SSD

Arquitetura do lado do servidor

A cache é implementada ao nível da unidade: as unidades de cache individuais num servidor estão vinculadas a uma ou muitas unidades de capacidade no mesmo servidor.

Uma vez que a cache está abaixo do resto da pilha de armazenamento definida pelo software Windows, não tem nem precisa de ter conhecimento de conceitos como Espaços de Armazenamento ou tolerância a falhas. Pode considerar que está a criar unidades "híbridas" (parte flash, parte disco) que são depois apresentadas ao sistema operativo. Tal como acontece com uma unidade híbrida real, o movimento em tempo real de dados quentes e frios entre as partes mais rápidas e lentas do suporte de dados físico é quase invisível para o exterior.

Dado que a resiliência no Espaços de Armazenamento Direto é, pelo menos, ao nível do servidor (o que significa que as cópias de dados são sempre escritas em servidores diferentes; no máximo, uma cópia por servidor), os dados na cache beneficiam da mesma resiliência que os dados que não estão na cache.

O diagrama representa três servidores associados por um espelho tridirecional numa camada de Espaço de Armazenamento, que acede a uma camada de cache de unidades NVMe que acedem a unidades de capacidade não etiquetadas.

Por exemplo, ao utilizar o espelhamento tridirecional, três cópias de quaisquer dados são escritas em servidores diferentes, onde são colocadas em cache. Independentemente de serem ou não desprotegidas posteriormente, existirão sempre três cópias.

Os enlaces de unidades são dinâmicos

O enlace entre a cache e as unidades de capacidade pode ter qualquer proporção, de 1:1 a 1:12 e posterior. Ajusta-se dinamicamente sempre que as unidades são adicionadas ou removidas, como ao aumentar verticalmente ou após falhas. Isto significa que pode adicionar unidades de cache ou unidades de capacidade de forma independente, sempre que quiser.

O diagrama animado mostra duas unidades de cache NVMe a mapear dinamicamente para as primeiras quatro, depois seis e, em seguida, oito unidades de capacidade.

Recomendamos que faça do número de unidades de capacidade um múltiplo do número de unidades de cache, para simetria. Por exemplo, se tiver 4 unidades de cache, terá um desempenho mais uniforme com 8 unidades de capacidade (proporção 1:2) do que com 7 ou 9.

Lidar com falhas da unidade de cache

Quando uma unidade de cache falha, quaisquer escritas que ainda não tenham sido desprotegidas são perdidas para o servidor local, o que significa que existem apenas nas outras cópias (noutros servidores). Tal como acontece depois de qualquer outra falha na unidade, Espaços de Armazenamento podem e recuperam automaticamente consultando as cópias sobreviventes.

Durante um breve período, as unidades de capacidade que estavam vinculadas à unidade de cache perdida aparecerão em mau estado de funcionamento. Assim que o encadeamento da cache tiver ocorrido (automático) e a reparação de dados tiver sido concluída (automática), retomarão a apresentação como estando em bom estado de funcionamento.

Este cenário é o motivo pelo qual, no mínimo, são necessárias duas unidades de cache por servidor para preservar o desempenho.

O diagrama animado mostra duas unidades de cache SSD mapeadas para seis unidades de capacidade até que uma unidade de cache falhe, o que faz com que as seis unidades sejam mapeadas para a unidade de cache restante.

Em seguida, pode substituir a unidade de cache tal como qualquer outra substituição de unidade.

Nota

Poderá ter de desligar para substituir com segurança o NVMe Add-In Cartão (AIC) ou o fator de forma M.2.

Relação com outras caches

Existem várias outras caches não relacionadas na pilha de armazenamento definida pelo software Windows. Os exemplos incluem o Espaços de Armazenamento cache de write-back e a cache de leitura na memória do Volume Partilhado de Cluster (CSV).

Com o Azure Stack HCI, a cache de write-back Espaços de Armazenamento não deve ser modificada a partir do comportamento predefinido. Por exemplo, não devem ser utilizados parâmetros como -WriteCacheSize no cmdlet New-Volume .

Pode optar por utilizar a cache CSV ou não . Cabe-lhe a si. Está ativada por predefinição no Azure Stack HCI, mas não entra em conflito com a cache descrita neste tópico de forma alguma. Em determinados cenários, pode proporcionar ganhos de desempenho valiosos. Para obter mais informações, veja Use the CSV in-memory read cache with Azure Stack HCI (Utilizar a cache de leitura na memória do CSV com o Azure Stack HCI).

Configuração manual

Para a maioria das implementações, a configuração manual não é necessária. Caso necessite, consulte as secções seguintes.

Se precisar de fazer alterações ao modelo de dispositivo de cache após a configuração, edite o Documento de Componentes de Suporte do Serviço de Estado de Funcionamento, conforme descrito em Descrição geral do Serviço de Estado de Funcionamento.

Especificar o modelo de unidade de cache

Nas implementações em que todas as unidades são do mesmo tipo, como todas as implementações NVMe ou all-SSD, não é configurada nenhuma cache porque o Windows não consegue distinguir características como resistência de escrita automaticamente entre unidades do mesmo tipo.

Para utilizar unidades de resistência superior para colocar em cache unidades de resistência inferior do mesmo tipo, pode especificar o modelo de unidade a utilizar com o parâmetro -CacheDeviceModel do cmdlet Enable-ClusterS2D . Todas as unidades desse modelo serão utilizadas para colocação em cache.

Dica

Certifique-se de que corresponde à cadeia de modelo exatamente como aparece na saída de Get-PhysicalDisk.

Exemplo

Primeiro, obtenha uma lista de discos físicos:

Get-PhysicalDisk | Group Model -NoElement

Eis alguns exemplos de saída:

Count Name
----- ----
    8 FABRIKAM NVME-1710
   16 CONTOSO NVME-1520

Em seguida, introduza o seguinte comando, especificando o modelo de dispositivo de cache:

Enable-ClusterS2D -CacheDeviceModel "FABRIKAM NVME-1710"

Pode verificar se as unidades pretendidas estão a ser utilizadas para colocação em cache ao executar Get-PhysicalDisk no PowerShell e verificar se a respetiva propriedade Utilização indica "Diário".

Possibilidades de implementação manual

A configuração manual permite as seguintes possibilidades de implementação:

O diagrama mostra as possibilidades de implementação, incluindo nVMe para cache e capacidade, SSD para cache e capacidade, e SSD para cache e SSD misto e HDD para capacidade.

Definir o comportamento da cache

É possível substituir o comportamento predefinido da cache. Por exemplo, pode defini-lo para leituras em cache, mesmo numa implementação totalmente flash. Não recomendamos modificar o comportamento, a menos que tenha a certeza de que a predefinição não se adequa à sua carga de trabalho.

Para substituir o comportamento, utilize o cmdlet Set-ClusterStorageSpacesDirect e os parâmetros -CacheModeSSD e -CacheModeHDD . O parâmetro CacheModeSSD define o comportamento da cache ao colocar em cache o SSD. O parâmetro CacheModeHDD define o comportamento da cache ao colocar em cache o HDD.

Pode utilizar Get-ClusterStorageSpacesDirect para verificar se o comportamento está definido.

Exemplo

Primeiro, obtenha as definições de Espaços de Armazenamento Direto:

Get-ClusterStorageSpacesDirect

Eis alguns exemplos de saída:

CacheModeHDD : ReadWrite
CacheModeSSD : WriteOnly

Em seguida, faça o seguinte:

Set-ClusterStorageSpacesDirect -CacheModeSSD ReadWrite

Get-ClusterS2D

Eis alguns exemplos de saída:

CacheModeHDD : ReadWrite
CacheModeSSD : ReadWrite

Dimensionar a cache

A cache deve ser dimensionada para acomodar o conjunto de trabalho (os dados que estão a ser lidos ou escritos ativamente a qualquer momento) das suas aplicações e cargas de trabalho.

Isto é especialmente importante em implementações híbridas com unidades de disco rígido. Se o conjunto de trabalho ativo exceder o tamanho da cache ou se o conjunto de trabalho ativo se desfasar demasiado rapidamente, as falhas de leitura da cache aumentarão e as escritas terão de ser desarticuladas de forma mais agressiva, prejudicando o desempenho geral.

Pode utilizar o utilitário incorporado Monitor de Desempenho (PerfMon.exe) no Windows para inspecionar a taxa de falhas de cache. Especificamente, pode comparar as Leituras Perdidas da Cache/seg do contador do Disco Híbrido de Armazenamento de Clusters definido para o IOPS de leitura geral da sua implementação. Cada "Disco Híbrido" corresponde a uma unidade de capacidade.

Por exemplo, 2 unidades de cache vinculadas a 4 unidades de capacidade resultam em 4 instâncias de objeto "Disco Híbrido" por servidor.

Monitor de Desempenho.

Não existe nenhuma regra universal, mas se existirem demasiadas leituras em falta na cache, pode estar subdimensionada e deve considerar adicionar unidades de cache para expandir a cache. Pode adicionar unidades de cache ou unidades de capacidade independentemente sempre que quiser.

Passos seguintes

Para obter mais conhecimentos de armazenamento, veja também: