Compreender e implantar memória persistente

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

A memória persistente (ou PMem) é um novo tipo de tecnologia de memória que retém seu conteúdo por meio de ciclos de energia e pode ser usada como armazenamento de camada superior, razão pela qual você pode ouvir pessoas se referirem ao PMem como "memória de classe de armazenamento" ou SCM. Este artigo fornece informações básicas sobre memória persistente e explica como implantá-la como a camada de armazenamento superior no Azure Stack HCI e no Windows Server.

O que é memória persistente?

A memória persistente é um tipo de mídia não volátil que se encaixa em um slot DIMM (memória) padrão. Ele é mais lento que o DRAM, mas fornece uma taxa de transferência maior do que SSD e NVMe. Em comparação com o DRAM, os módulos de memória persistente vêm em capacidades muito maiores e são menos caros por GB, no entanto, eles ainda são mais caros do que o NVMe. O conteúdo da memória permanece mesmo quando a energia do sistema fica inativa no caso de uma perda de energia inesperada, desligamento iniciado pelo usuário ou falha do sistema. Isso significa que você pode usar módulos de memória persistente como armazenamento persistente ultra-rápido.

O Azure Stack HCI e o Windows Server 2019 dão suporte ao uso de memória persistente como um cache ou uma unidade de capacidade. No entanto, dado o modelo de preços, a memória persistente fornece o maior valor como um cache ou como uma pequena quantidade de armazenamento dedicado para dados de mapeamento de memória. Na maioria dos casos, as unidades de memória persistentes serão usadas automaticamente como unidades de cache e qualquer coisa mais lenta será usada como unidades de capacidade. Para obter mais informações sobre como configurar unidades de cache e capacidade, consulte Noções básicas sobre o cache do pool de armazenamento e Planejar volumes.

Conceitos de memória persistente

Esta seção descreve os conceitos básicos que você precisará entender para implantar memória persistente em ambientes do Windows Server e do Azure Stack HCI para reduzir gargalos de E/S e melhorar o desempenho.

Mecanismos de acesso

Há dois métodos para acessar a memória persistente. Eles são:

  • Bloquear o acesso, que opera como armazenamento para compatibilidade de aplicativos. Nessa configuração, os dados fluem pelo sistema de arquivos e pelas pilhas de armazenamento normalmente. Você pode usar essa configuração em combinação com NTFS e ReFS e é recomendável para a maioria dos casos de uso.
  • Acesso direto (DAX), que opera como memória para obter a menor latência. Você só pode usar DAX em combinação com o NTFS. Se você não usar o DAX corretamente, poderá ocorrer perda de dados. É altamente recomendável que você use o DAX com a BTT (tabela de conversão de blocos) ativada para atenuar o risco de gravações interrompidas. Para saber mais, confira Entender e configurar o DAX.

Aviso

Não há suporte para DAX em ambientes do Azure Stack HCI. O Azure Stack HCI dá suporte apenas ao acesso em bloco, com o BTT ativado.

Regiões

Uma região é um conjunto de um ou mais módulos de memória persistentes. As regiões geralmente são criadas como conjuntos intercalados nos quais vários módulos de memória persistente aparecem como um único espaço de endereço virtual lógico para aumentar a taxa de transferência. Para aumentar a largura de banda disponível, os endereços virtuais adjacentes são distribuídos em vários módulos de memória persistentes. As regiões geralmente podem ser criadas no BIOS de uma plataforma de servidor.

PmemDisks

Para usar a memória persistente como armazenamento, você deve definir pelo menos um PmemDisk, que é um VHD (disco rígido virtual) no host que enumera como um PmemDisk dentro de uma VM (máquina virtual). Um PmemDisk é um intervalo de memória não volátil resolvido contíguamente que você pode pensar como uma partição de disco rígido ou LUN. Você pode criar vários PmemDisks usando cmdlets Windows PowerShell para dividir a capacidade bruta disponível. Cada módulo de memória persistente contém uma LSA (Área de Armazenamento de Rótulos) que armazena os metadados de configuração.

Bloquear tabela de tradução

Ao contrário das unidades de estado sólido, os módulos de memória persistente não protegem contra "gravações interrompidas" que podem ocorrer no caso de uma falha de energia ou interrupção do sistema, colocando os dados em risco. A BTT atenua esse risco fornecendo semântica de atualização do setor atômico para dispositivos de memória persistente, essencialmente habilitando gravações de setor no estilo bloco para que os aplicativos consigam evitar a mistura de dados antigos e novos em um cenário de falha. É altamente recomendável ativar o BTT em quase todos os casos. Como BTT é uma propriedade do PmemDisk, ele deve ser ativado quando o PmemDisk é criado.

No modo de acesso em bloco, é recomendável usar BTT porque todos os dados usarão semântica de bloco. O BTT também é útil no modo DAX porque as operações de metadados ainda usam semântica de bloco, mesmo que as operações de dados do aplicativo não usem. Mesmo que todas as operações de aplicativo estejam usando arquivos mapeados em memória com semântica DAX, as gravações interrompidas ainda poderão ocorrer para as operações de metadados; portanto, ativar o BTT ainda é valioso.

Hardware com suporte

A tabela a seguir mostra o hardware de memória persistente com suporte para o Azure Stack HCI e o Windows Server. Há suporte total para memória persistente no Windows Server 2019, incluindo Espaços de Armazenamento Diretos.

Tecnologia de memória persistente Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
NVDIMM-N no modo persistente Com suporte Com suporte
Intel Optane™ DC Persistent Memory in App Direct Mode Sem suporte Com suporte
Intel Optane™ DC Persistent Memory in Memory Mode Com suporte Com suporte

A Memória Persistente Intel Optane DC dá suporte aos modos de operação Memória (volátil) e App Direct (persistente). Para usar módulos de memória persistente como armazenamento, que é o principal caso de uso para cargas de trabalho de servidor, você deve usar o modo Direto do Aplicativo. Essencialmente, o modo de memória usa memória persistente como RAM mais lenta, o que geralmente não atende aos requisitos de desempenho das cargas de trabalho do servidor. O modo de memória é diferente do DAX, que é um volume de armazenamento persistente que pode ser acessado usando semântica semelhante à memória.

O modo de operação geralmente é pré-configurado pelo fabricante do dispositivo original.

Observação

Quando você reinicia um sistema que tem vários módulos de memória persistente Intel® Optane™ no modo App Direct divididos em vários PmemDisks, você pode perder o acesso a alguns ou a todos os discos de armazenamento lógico relacionados. Esse problema ocorre em versões do Windows Server 2019 anteriores à versão 1903.

Essa perda de acesso ocorre porque um módulo de memória persistente é destreinado ou falha quando o sistema é iniciado. Nesse caso, todos os PmemDisks em qualquer módulo de memória persistente no sistema falham, incluindo aqueles que não são mapeados fisicamente para o módulo com falha.

Para restaurar o acesso a todos os PmemDisks, substitua o módulo com falha.

Se um módulo falhar no Windows Server 2019 versão 1903 ou versões mais recentes, você perderá o acesso somente a PmemDisks que são mapeados fisicamente para o módulo afetado; outros não são afetados.

Configurar memória persistente

Se você estiver usando a memória persistente Intel Optane, siga as instruções aqui. Se você estiver usando módulos de memória persistente de outro fornecedor, consulte a documentação deles.

Para criar um PmemDisk compatível com BTT, use o New-VHD cmdlet :

New-VHD E:\pmemtest.vhdpmem -Fixed -SizeBytes 1GB -AddressAbstractionType BTT

A extensão VHD deve ser "vhdpmem".

Você também pode converter um VHD que não tem o BTT habilitado em um que faz (e vice-versa) usando o Convert-VHD cmdlet :

Convert-VHD .\pmemtest_nobtt.vhdpmem -AddressAbstractionType BTT -DestinationPath pmemtest_btt.vhdpmem

Após a conversão, o novo VHD terá o mesmo GUID de namespace que o original. Isso pode levar a problemas, especialmente se ambos estiverem anexados à mesma VM. Para criar um novo UUID de namespace para o VHD convertido, use o Set-VHD cmdlet :

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

Entender os conjuntos intercalados

Conjuntos intercalados geralmente podem ser criados no BIOS de uma plataforma de servidor para fazer com que vários dispositivos de memória persistente apareçam como um único disco para o sistema operacional host, aumentando a taxa de transferência para esse disco.

Observação

Windows Server 2016 não dá suporte a conjuntos intercalados de módulos de memória persistente.

Lembre-se de que um módulo de memória persistente reside em um slot DIMM (memória) padrão, o que coloca os dados mais próximos do processador. Essa configuração reduz a latência e melhora o desempenho de busca. Para aumentar ainda mais a taxa de transferência, dois ou mais módulos de memória persistente criam um conjunto intercalado de n vias para distribuir operações de leitura/gravação. As configurações mais comuns são a intercalação bidirecional ou de quatro vias.

Você pode usar o cmdlet do Get-PmemDisk PowerShell para examinar a configuração desses discos lógicos, da seguinte maneira:

Get-PmemDisk

DiskNumber Size   HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ----   ------------ ------------- ------------ ----------------- -------------------
2          252 GB Healthy      None          True         {20, 120}         0
3          252 GB Healthy      None          True         {1020, 1120}      0

Podemos ver que o disco PMem lógico 2 usa os dispositivos físicos Id20 e Id120 e o disco PMem lógico 3 usa os dispositivos físicos Id1020 e Id1120.

Para recuperar mais informações sobre o conjunto intercalado usado por uma unidade lógica, execute o Get-PmemPhysicalDevice cmdlet :

(Get-PmemDisk)[0] | Get-PmemPhysicalDevice

DeviceId DeviceType           HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile memory size
-------- ----------           ------------ ----------------- ---------------- ---------------- ---------------------- --------------------
20       Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_C1     102005310        126 GB                 0 GB
120      Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_F1     102005310        126 GB                 0 GB

Configurar conjuntos intercalados

Para configurar um conjunto intercalado, execute o Get-PmemUnusedRegion cmdlet para examinar todas as regiões de memória persistente que não são atribuídas a um disco de memória persistente lógico no sistema:

Get-PmemUnusedRegion

RegionId TotalSizeInBytes DeviceId
-------- ---------------- --------
       1     270582939648 {20, 120}
       3     270582939648 {1020, 1120}

Para ver todas as informações do dispositivo PMem no sistema, incluindo tipo de dispositivo, local, integridade e status operacionais e assim por diante, execute o Get-PmemPhysicalDevice cmdlet :

Get-PmemPhysicalDevice

DeviceId DeviceType           HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile
                                                                                                                      memory size
-------- ----------           ------------ ----------------- ---------------- ---------------- ---------------------- --------------
1020     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_C1     102005310        126 GB                 0 GB
1120     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_F1     102005310        126 GB                 0 GB
120      Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_F1     102005310        126 GB                 0 GB
20       Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_C1     102005310        126 GB                 0 GB

Como temos uma região PMem não utilizado disponível, podemos criar novos discos de memória persistente. Podemos usar a região não utilizada para criar vários discos de memória persistente executando os seguintes cmdlets:

Get-PmemUnusedRegion | New-PmemDisk
Creating new persistent memory disk. This may take a few moments.

Depois que isso for feito, podemos ver os resultados executando:

Get-PmemDisk

DiskNumber Size   HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ----   ------------ ------------- ------------ ----------------- -------------------
2          252 GB Healthy      None          True         {20, 120}         0
3          252 GB Healthy      None          True         {1020, 1120}      0

Vale a pena observar que podemos executar Get-PhysicalDisk | Where MediaType -eq SCM em vez de Get-PmemDisk obter os mesmos resultados. O disco de memória persistente recém-criado corresponde um a um com unidades que aparecem no PowerShell e em Windows Admin Center.

Substituir memória persistente

Se você precisar substituir um módulo com falha, precisará reprovisionar o disco PMem (consulte as etapas descritas anteriormente).

Ao solucionar problemas, talvez seja necessário usar Remove-PmemDisk. Esse cmdlet remove um disco de memória persistente específico. Podemos remover todos os discos de memória persistente atuais executando os seguintes cmdlets:

Get-PmemDisk | Remove-PmemDisk

cmdlet Remove-PmemDisk at command pipeline position 1
Supply values for the following parameters:
DiskNumber: 2

This will remove the persistent memory disk(s) from the system and will result in data loss.
Remove the persistent memory disk(s)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
Removing the persistent memory disk. This may take a few moments.

Importante

A remoção de um disco de memória persistente causa perda de dados nesse disco.

Outro cmdlet que talvez seja necessário é Initialize-PmemPhysicalDevice. Esse cmdlet inicializa as áreas de armazenamento de rótulos nos dispositivos de memória persistente física e pode limpar informações de armazenamento de rótulo corrompidas nos dispositivos.

Get-PmemPhysicalDevice | Initialize-PmemPhysicalDevice

This will initialize the label storage area on the physical persistent memory device(s) and will result in data loss.
Initializes the physical persistent memory device(s)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): A
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.

Importante

Initialize-PmemPhysicalDevice causa perda de dados na memória persistente. Use-o apenas como último recurso para corrigir problemas persistentes relacionados à memória.

Memória persistente em ação no Microsoft Ignite 2018

Para ver alguns dos benefícios da memória persistente, vamos examinar este vídeo do Microsoft Ignite 2018.

Qualquer sistema de armazenamento que forneça tolerância a falhas necessariamente faz cópias distribuídas de gravações. Essas operações devem percorrer a rede e ampliar o tráfego de gravação de back-end. Por esse motivo, os maiores números de parâmetro de comparação de IOPS absolutos normalmente são obtidos medindo somente leituras, especialmente se o sistema de armazenamento tiver otimizações de bom senso para ler da cópia local sempre que possível. Espaços de Armazenamento Diretos é otimizado para fazer isso.

Quando medido usando apenas operações de leitura, o cluster entregou 13.798.674 IOPS.

Se você watch o vídeo de perto, observará que o que é ainda mais de cair o queixo é a latência. Mesmo com mais de 13,7 M IOPS, o sistema de arquivos no Windows está relatando latência que é consistentemente menor que 40 μs! (Esse é o símbolo para microssegundos, um milionésimo de segundo.) Essa velocidade é uma ordem de magnitude mais rápida do que os típicos fornecedores all-flash anunciam orgulhosamente hoje.

Juntos, Espaços de Armazenamento Diretos no Windows Server 2019 e a memória persistente intel® Optane™ DC apresentaram um desempenho inovador. Esse parâmetro de comparação de HCI de mais de 13,7 Milhões de IOPS, acompanhado de latência previsível e extremamente baixa, é mais do que o dobro do nosso benchmark líder do setor anterior de IOPS de 6,7 Milhões. Além disso, desta vez precisávamos de apenas 12 nós de servidor— 25% menos do que antes.

O hardware de teste era um cluster de 12 servidores que foi configurado para usar espelhamento de três vias e volumes ReFS delimitados, 12 x Intel® S2600WFT, 384 GiB de memória, 2 x 28 núcleos "CascadeLake", 1,5 TB Intel® Optane™ DC memória persistente como cache, 32 TB NVMe (4 x 8 TB Intel® DC P4510) como capacidade, 2 x Mellanox ConnectX-4 25 Gbps.

A tabela a seguir mostra os números de desempenho completos.

Parâmetro de comparação Desempenho
Leitura 4K 100% aleatória 13,8 milhões de IOPS
4K 90/10% de leitura/gravação aleatória 9,45 milhões de IOPS
Leitura sequencial de 2 MB Taxa de transferência de 549 GB/s

Próximas etapas

Para informações relacionadas, confira também: