Noções básicas sobre o cache do pool de armazenamento
Aplica-se a: Azure Stack HCI, versões 22H2 e 21H2; Windows Server 2022, Windows Server 2019
Importante
O Azure Stack HCI agora faz parte do Azure Local. A renomeação da documentação do produto está em andamento. No entanto, as versões mais antigas do Azure Stack HCI, por exemplo, 22H2, continuarão a fazer referência ao Azure Stack HCI e não refletirão a alteração de nome. Saiba mais.
Espaços de Armazenamento Diretos, a tecnologia de virtualização de armazenamento fundamental por trás do Azure Stack HCI e do Windows Server, apresenta um cache interno do lado do servidor para maximizar o desempenho do armazenamento e reduzir os custos. É um cache de leitura e gravação grande, persistente e em tempo real que é configurado automaticamente na implantação. Na maioria dos casos, nenhum tipo de gerenciamento manual é necessário. A maneira como o cache funciona depende dos tipos de unidades presentes.
Tipos de unidade e opções de implantação
Os Espaços de Armazenamento Diretos atualmente funcionam com quatro tipos de unidades:
Tipo de unidade | Descrição |
---|---|
PMem refere-se à memória persistente, um novo tipo de armazenamento de baixa latência e alto desempenho. | |
NVMe (Non-Volatile Memory Express) refere-se a unidades de estado sólido que ficam diretamente no barramento PCIe. Os fatores forma comuns são U.2 de 2,5", PCIe Add-In-Card (AIC) e M.2. O NVMe oferece maior taxa de transferência de IOPS e E/S com menor latência do que qualquer outro tipo de unidade que suportamos hoje, exceto o PMem. | |
SSD refere-se a unidades de estado sólido que se conectam via SATA ou SAS convencional. | |
HDD refere-se a unidades de disco rígido magnéticas rotacionais, que oferecem vasta capacidade de armazenamento a um baixo custo. |
Eles podem ser combinados de várias maneiras, que podemos agrupar em duas categorias: "tudo flash" e "híbridos". Não há suporte para implantações com todos os HDD.
Observação
Este artigo aborda as configurações de cache com NVMe, SSD e HDD. Para obter informações sobre como usar a memória persistente como cache, consulte Entender e implantar memória persistente.
Possibilidades de implantação tudo flash
As implantações totalmente flash visam maximizar o desempenho do armazenamento e não incluem HDD.
Possibilidades de implantação híbrida
As implantações híbridas visam equilibrar desempenho e capacidade ou maximizar a capacidade e incluem HDD.
Observação
Não há suporte para a implantação híbrida 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 com suporte para um único servidor.
Unidades de cache são selecionadas automaticamente
Em implantações com vários tipos de unidades, os Espaços de Armazenamento Diretos usam automaticamente todas as unidades do tipo mais rápido para cache. As unidades restantes são usadas para a capacidade.
O tipo "mais rápido" é determinado de acordo com a hierarquia a seguir.
Por exemplo, se você tiver NVMe e SSDs, o NVMe armazenará em cache para as SSDs.
Se você tiver SSDs e HDDs, as SSDs armazenarão em cache para as HDDs.
Observação
As unidades de cache não contribuem com capacidade de armazenamento utilizável para o cluster. Todos os dados armazenados no cache também são armazenados em outro lugar, ou serão assim que forem despreparados. Isso significa que a capacidade bruta total de armazenamento do cluster é apenas a soma das unidades de capacidade.
Quando todas as unidades são do mesmo tipo, nenhum cache é configurado automaticamente. Você tem a opção de configurar manualmente unidades de mais resistência para armazenar em cache para unidades de menos resistência do mesmo tipo – consulte a seção Configuração manual para aprender como.
Dica
Em alguns casos, usar o cache do pool de armazenamento não faz sentido. Por exemplo, em implantações totalmente NVMe ou totalmente SSD, especialmente em escala muito pequena, não ter unidades "gastas" em cache pode melhorar a eficiência do armazenamento e maximizar o desempenho. Da mesma forma, pequenas implantações remotas ou de filiais podem ter espaço limitado para unidades de cache.
Comportamento do cache é definido automaticamente
O comportamento do cache é determinado automaticamente com base nos tipos de unidades que estão sendo usadas no armazenamento em cache. Ao armazenar em cache unidades flash (como cache NVMe para SSDs), somente as gravações são armazenadas em cache. Ao armazenar em cache unidades de disco rotativas (como SSDs em cache para HDDs), as leituras e gravações são armazenadas em cache.
Armazenamento em cache somente leitura para implantações tudo em flash
O cache pode ser usado em um cenário totalmente flash, por exemplo, usando NVMe como cache para acelerar o desempenho de SSDs. Ao armazenar em cache para implantações totalmente flash, somente as gravações são armazenadas em cache. Isso reduz o desgaste das unidades de capacidade porque muitas gravações e regravações podem se unir no cache e, em seguida, desencenar apenas conforme necessário, reduzindo o tráfego cumulativo para as unidades de capacidade e estendendo sua vida útil. Por esse motivo, recomendamos selecionar unidades de mais resistência, otimizadas para gravação para o cache. Naturalmente, as unidades de capacidade podem ter menos resistência à gravação.
Como as leituras não afetam significativamente a vida útil do flash e como os SSDs oferecem universalmente baixa latência de leitura, as leituras não são armazenadas em cache: elas são atendidas diretamente das unidades de capacidade (exceto quando os dados foram gravados tão recentemente que ainda não foram despreparados). Isso permite que o cache seja inteiramente dedicado a gravações, o que maximiza a eficácia.
Isso resulta nas características de gravação, como latência de gravação, sendo ditadas pelas unidades de cache, e nas características de leitura sendo determinadas pelas unidades de capacidade. Ambas são consistentes, previsíveis e uniformes.
Armazenamento em cache de leitura/gravação para implantações híbridas
Ao armazenar em cache para HDD, tanto as leituras quanto as gravações são armazenadas em cache, para fornecer latência semelhante ao flash (geralmente ~ 10x melhor) para ambos. O cache de leitura armazena dados de leitura recentes e frequentes para acesso rápido e minimização de tráfego aleatório para as HDDs. (Devido a atrasos de busca e rotação, a latência e o tempo perdido incorridos pelo acesso aleatório a um HDD são significativos.) As gravações são armazenadas em cache para absorver intermitências e, como antes, para unir gravações e regravações e minimizar o tráfego cumulativo para as unidades de capacidade.
Espaços de Armazenamento Diretos implementa um algoritmo que desrandomiza as gravações antes de desorganizá-las, 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. Isso maximiza o IOPS e a taxa de transferência para as HDDs.
Armazenamento em cache em implantações com NVMe, SSD e HDD
Quando as unidades de todos os três tipos estão presentes, as unidades NVMe fornecem cache para os SSDs e os HDDs. O comportamento é o descrito acima: somente gravações são armazenadas em cache para as SSDs, e leituras e gravações são armazenadas em cache para as HDDs. O custo indireto do armazenamento em cache para as HDDs é distribuído por igual entre as unidades de cache.
Resumo
Esta tabela resume quais unidades são usadas no armazenamento em cache, quais são usadas na capacidade e qual é o comportamento de armazenamento em cache para cada possibilidade de implantação.
Implantação | Unidades de cache | Unidades de capacidade | Comportamento de cache (padrão) |
---|---|---|---|
Tudo NVMe | Nenhum (opcional: configurar manualmente) | NVMe | Somente gravação (se configurada) |
Todas as SSDs | Nenhum (opcional: configurar manualmente) | SSD | Somente gravação (se configurada) |
NVMe + SSD | NVMe | SSD | Somente gravação |
NVMe + HDD | NVMe | HDD | Leitura + gravação |
SSD + HDD | SSD | HDD | Leitura + gravação |
NVMe + SSD + HDD | NVMe | SSD + HDD | Leitura + gravação para HDD, somente gravação para SSD |
Arquitetura do servidor
O cache é implementado no nível da unidade: unidades de cache individuais dentro de um servidor são associadas a uma ou várias unidades de capacidade dentro do mesmo servidor.
Como está abaixo do restante da pilha de armazenamento definido pelo software Windows, o cache não tem nem precisa ter percepção de conceitos como espaços de armazenamento ou tolerância a falhas. Você pode pensar nisso como a criação de unidades "híbridas" (parte flash, parte disco) que são então apresentadas ao sistema operacional. Assim como acontece com uma unidade híbrida real, a movimentação em tempo real de dados quentes e frios entre as partes mais rápidas e mais lentas da mídia física é praticamente invisível por fora.
Uma vez que a resiliência em Espaços de Armazenamento Diretos está pelo menos no nível do servidor (o que significa que as cópias dos dados são sempre gravadas em servidores diferentes; no máximo, uma cópia por servidor), os dados no cache aproveitam a mesma resiliência de dados que não estão no cache.
Por exemplo, durante o uso do espelhamento triplo, três cópias de todos os dados são gravadas em servidores diferentes, onde eles chegam ao cache. Independentemente de serem despreparados ou não depois, sempre haverá três cópias.
Associações de unidade são dinâmicas
A associação entre as unidades de cache e capacidade podem ter qualquer proporção, de 1:1 a 1:12 e além. Ela é ajustada dinamicamente sempre que as unidades são adicionadas ou removidas, como acontece durante escalas verticais ou depois de falhas. Isso significa que você pode adicionar unidades de cache ou de capacidade de maneira independente, sempre que quiser.
Por simetria, recomendamos que o número de unidades de capacidade seja um múltiplo do número de unidades de cache. Por exemplo, se você 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.
Identificando falhas na unidade de cache
Quando ocorre uma falha em uma unidade de cache, todas as gravações que ainda não foram despreparadas são perdidas para o servidor local, o que significa que existem apenas nas outras cópias (em outros servidores). Assim como acontece após qualquer outra falha na unidade, os Espaços de Armazenamento podem e se recuperam automaticamente consultando as cópias sobreviventes.
Por um breve período, as unidades de capacidade que estavam associadas à unidade de cache perdido surgirão não íntegras. Depois que a reassociação de cache tiver ocorrido (automática) e o reparo de dados tiver sido concluído (automático), elas voltarão a ser mostradas como íntegras.
É por causa desse cenário que pelo menos duas unidades de cache são necessárias por servidor para preservar o desempenho.
É possível acabar substituindo a unidade de cache assim como qualquer outra troca de unidade.
Observação
Você precisa desligar para substituir com segurança o NVMe, um fator forma de cartão suplementar (AIC) ou M.2.
Relação com outros caches
Existem diversos outros caches não relacionados na pilha de armazenamento definido pelo software do Windows. Entre os exemplos estão o cache com write-back de Espaços de Armazenamento e o cache de leitura na memória Volume Compartilhado Clusterizado (CSV).
Com o Azure Stack HCI, o cache de write-back de Espaços de Armazenamento não deve ser modificado de seu comportamento padrão. Por exemplo, parâmetros como - WriteCacheSize no cmdlet New-Volume não devem ser usados.
Você pode optar por usar o cache CSV, ou não – cabe a você. Ele está ativado por padrão no Azure Stack HCI, mas não entra em conflito com o cache descrito neste tópico de forma alguma. Em determinados cenários, ele pode proporcionar ganhos de desempenho importantes. Para obter mais informações, consulte Usar o cache de leitura na memória CSV com o Azure Stack HCI.
Configuração manual
Para a maioria das implantações, a configuração manual não é necessária. Caso realmente precise dele, consulte as seções a seguir.
Caso precise fazer alterações no modelo de dispositivo de cache após a instalação, edite o Documento de componentes de suporte do serviço de integridade, conforme descrito em Visão geral do serviço de Integridade.
Especificar o modelo da unidade de cache
Em implantações nas quais todas as unidades sejam do mesmo tipo, como implantações tudo NVMe ou SSD, nenhum cache é configurado porque o Windows não consegue diferenciar automaticamente características como resistência a gravações entre unidades do mesmo tipo.
Para usar unidades de mais resistência no armazenamento em cache para unidades de menos resistência, é possível especificar qual modelo de unidade usar com o parâmetro -CacheDeviceModel do cmdlet Enable-ClusterS2D. Todas as unidades desse modelo serão usadas para armazenamento em cache.
Dica
Certifique-se de comparar a cadeia de caracteres do modelo exatamente como ela é exibida na saída de Get-PhysicalDisk.
Exemplo
Primeiro, obtenha uma lista de discos físicos:
Get-PhysicalDisk | Group Model -NoElement
Veja a seguir um exemplo de saída:
Count Name
----- ----
8 FABRIKAM NVME-1710
16 CONTOSO NVME-1520
Em seguida, insira o seguinte comando, especificando o modelo do dispositivo de cache:
Enable-ClusterS2D -CacheDeviceModel "FABRIKAM NVME-1710"
Você pode verificar se as unidades desejadas estão sendo usadas no armazenamento em cache executando Get-PhysicalDisk no PowerShell e verificando se a propriedade Usage diz "Journal".
Possibilidades de implantação manual
A configuração manual permite as seguintes possibilidades de implantação:
Definir comportamento do cache
É possível substituir o comportamento padrão do cache. Por exemplo, é possível defini-lo para leituras de cache, mesmo em uma implantação tudo flash. Não incentivamos a modificação do comportamento, a menos que você tenha a certeza de que o padrão não atende à carga de trabalho.
Para substituir o comportamento, use o cmdlet Set-ClusterStorageSpacesDirect e seus parâmetros -CacheModeSSD e -CacheModeHDD. O parâmetro CacheModeSSD define o comportamento do cache ao armazenar em cache o SSD. O parâmetro CacheModeHDD define o comportamento do cache ao armazenar em cache para HDD.
É possível usar Get-ClusterStorageSpacesDirect para verificar se o comportamento está definido.
Exemplo
Primeiro, obtenha as configurações dos Espaços de Armazenamento Diretos:
Get-ClusterStorageSpacesDirect
Veja a seguir um exemplo de saída:
CacheModeHDD : ReadWrite
CacheModeSSD : WriteOnly
Em seguida, faça o seguinte:
Set-ClusterStorageSpacesDirect -CacheModeSSD ReadWrite
Get-ClusterS2D
Veja a seguir um exemplo de saída:
CacheModeHDD : ReadWrite
CacheModeSSD : ReadWrite
Dimensionando o cache
O cache deve ser dimensionado para acomodar o conjunto de trabalho (os dados em leitura ou gravação ativa a qualquer momento) dos aplicativos e cargas de trabalho.
Isso é especialmente importante em implantações híbridas com unidades de disco rígido. Se o conjunto de trabalho ativo exceder o tamanho do cache, ou se o conjunto de trabalho ativo aumentar muito rapidamente, as perdas no cache de leitura aumentarão, e as gravações precisarão ser despreparadas de maneira mais agressiva, prejudicando o desempenho geral.
É possível usar o utilitário Monitor de Desempenho (PerfMon.exe) interno do Windows para inspecionar a taxa de perdas no cache. Mais especificamente, é possível comparar o Cache Miss Reads/sec do contador Cluster Storage Hybrid Disk definido como o IOPS de leitura geral da implantação. Cada "Disco Híbrido" corresponde a uma unidade de capacidade.
Por exemplo, 2 unidades de cache associadas a 4 unidades de capacidade resulta em 4 instâncias de objeto "Disco Híbrido" por servidor.
Não há regra universal, mas se houver muitas perdas de leitura no cache, isso poderá ser subdimensionado e você deverá levar em consideração a adição de unidades de cache para expandir o cache. É possível adicionar unidades de cache ou de capacidade de maneira independente, sempre que você quiser.
Próximas etapas
Para obter conhecimento adicional sobre armazenamento, consulte também: