Compreender e implementar memória persistente

Aplica-se a: Azure Stack HCI, versões 21H2 e 20H2; 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 mantém o seu conteúdo através de ciclos de potência e pode ser usada como armazenamento de topo, razão pela qual pode ouvir pessoas referirem-se a PMem como "memória de classe de armazenamento" ou SCM. Este artigo fornece antecedentes sobre memória persistente e explica como implantá-lo como o nível superior de armazenamento em Azure Stack HCI e Windows Server.

O que é memória persistente?

A memória persistente é um tipo de meio não volátil que se encaixa numa ranhura padrão de DIMM (memória). É mais lento que o DRAM, mas fornece uma produção mais alta do que a SSD e a NVMe. Em comparação com o DRAM, os módulos de memória persistentes têm capacidades muito maiores e são mais baratos por GB, no entanto ainda são mais caros do que o NVMe. Os conteúdos da memória permanecem mesmo quando a energia do sistema diminui em caso de perda de energia inesperada, paragem iniciada pelo utilizador ou falha do sistema. Isto significa que pode utilizar módulos de memória persistentes como armazenamento ultrarrápido e persistente.

Suporte Azure Stack HCI e Windows Server 2019 utilizando a memória persistente como cache ou unidade de capacidade. No entanto, dado o modelo de preços, a memória persistente fornece o maior valor como cache ou como uma pequena quantidade de armazenamento dedicado para dados de mapeamento de memória. Na maioria dos casos, os discos de memória persistentes serão automaticamente utilizados 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 a compreensão da cache da piscina de armazenamento e os volumes do plano.

Conceitos de memória persistentes

Esta secção descreve os conceitos básicos que precisa de compreender para implementar memória persistente nos ambientes Windows Server e Azure Stack HCI para reduzir os estrangulamentos de I/O e melhorar o desempenho.

Métodos de acesso

Existem dois métodos para aceder à memória persistente. A saber:

  • Acesso aobloco , que funciona como armazenamento para compatibilidade de aplicações. Nesta configuração, os dados fluem através do sistema de ficheiros e as pilhas de armazenamento normal. Pode utilizar esta configuração em combinação com NTFS e ReFS, e é recomendado para a maioria dos casos de utilização.
  • Acesso direto (DAX), que funciona como memória para obter a latência mais baixa. Só pode utilizar o DAX em combinação com o NTFS. Se não utilizar o DAX corretamente, existe potencial para a perda de dados. Recomendamos vivamente que utilize o DAX com a tabela de tradução do Bloco (BTT) ligada para atenuar o risco de escrita rasgada. Para saber mais, consulte Compreender e configurar o DAX.

Aviso

O DAX não é suportado em ambientes HCI Azure Stack. O Azure Stack HCI só suporta o acesso a blocos, com a BTT ligada.

Regiões

Uma região é um conjunto de um ou mais módulos de memória persistentes. As regiões são muitas vezes criadas como conjuntos intercalados em que múltiplos módulos de memória persistente aparecem como um único espaço de endereço virtual lógico para aumentar a produção. Para aumentar a largura de banda disponível, os endereços virtuais adjacentes estão espalhados por vários módulos de memória persistentes. As regiões podem geralmente ser criadas no BIOS de uma plataforma de servidores.

PmemDisks

Para utilizar a memória persistente como armazenamento, deve definir pelo menos um PmemDisk, que é um disco rígido virtual (VHD) no hospedeiro que enumera como pmemDisk dentro de uma máquina virtual (VM). Um PmemDisk é uma gama de memória não volátil dirigida contíguamente que se pode pensar como uma partição de disco rígido ou LUN. Pode criar vários PmemDisks utilizando Windows PowerShell cmdlets para dividir a capacidade bruta disponível. Cada módulo de memória persistente contém uma Área Armazenamento etiqueta (LSA) que armazena os metadados de configuração.

Tabela de tradução de blocos

Ao contrário das unidades de estado sólido, os módulos de memória persistentes não protegem contra "escritas rasgadas" que podem ocorrer em caso de falha de energia ou falha do sistema, colocando os dados em risco. O BTT atenua este risco fornecendo semântica de atualização do setor atómico para dispositivos de memória persistentes, essencialmente permitindo que o setor de blocos escreva para que as aplicações possam evitar misturar dados antigos e novos num cenário de falha. Recomendamos vivamente ligar a BTT em quase todos os casos. Como o BTT é uma propriedade do PmemDisk, deve ser ligado quando o PmemDisk é criado.

No modo de acesso ao bloco, recomendamos a utilização de BTT porque todos os dados estarão a utilizar 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 da aplicação não o faça. Mesmo que todas as operações de aplicação estejam a utilizar ficheiros mapeados com semântica DAX, as gravações rasgadas ainda podem acontecer para as operações de metadados; portanto, ligar a BTT ainda é valioso.

Hardware suportado

A tabela seguinte mostra hardware de memória persistente suportado para Azure Stack HCI e Windows Server. A memória persistente é totalmente suportada no Windows Server 2019, incluindo Espaços de Armazenamento Direct.

Tecnologia persistente da memória Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
NVDIMM-N em modo persistente Suportado Suportado
Intel Optane™ DC Memória Persistente no Modo Direto app Não suportado Suportado
Intel Optane™ DC Memória Persistente no Modo memória Suportado Suportado

A Intel Optane DC Persistent Memory suporta os modos de funcionamento Memory (volátil) e App Direct (persistente). Para utilizar módulos de memória persistentes como armazenamento, que é o caso de utilização primária para cargas de trabalho do servidor, tem de utilizar o modo App Direct. O modo de memória utiliza essencialmente a memória persistente como RAM mais lenta, que normalmente não satisfaz os requisitos de desempenho das cargas de trabalho do servidor. O modo de memória é distinto do DAX, que é um volume de armazenamento persistente que pode ser acedido usando semântica semelhante à memória.

O modo de funcionamento é frequentemente pré-configurado pelo fabricante original do dispositivo.

Nota

Quando reiniciar um sistema que tem vários módulos de memória intel® Optane™ persistentes no modo App Direct que estão divididos em vários PmemDisks, poderá perder acesso a alguns ou todos os discos de armazenamento lógico relacionados. Este problema ocorre nas versões Windows Server 2019 que são mais antigas do que a versão 1903.

Esta perda de acesso ocorre porque um módulo de memória persistente não é treinado ou falha de outra forma quando o sistema começa. Neste caso, todos os PmemDisks em qualquer módulo de memória persistente no sistema falham, incluindo aqueles que não mapeiam fisicamente para o módulo falhado.

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

Se um módulo falhar no Windows versão 1903 do Server 2019 ou nas versões mais recentes, perde-se o acesso apenas a PmemDisks que mapeiam fisicamente para o módulo afetado; outros não são afetados.

Configure a memória persistente

Se estiver a utilizar a memória persistente da Intel Optane, siga as instruções aqui. Se estiver a utilizar módulos de memória persistentes de outro fornecedor, consulte a sua documentação.

Para criar um PmemDisk que suporte o BTT, utilize o New-VHD cmdlet:

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

A extensão VHD deve ser "vhdpmem".

Também pode converter um VHD que não tenha BTT ativado 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 espaço de identificação GUID do que o original. Isso pode levar a problemas, especialmente se ambos estiverem ligados ao mesmo VM. Para criar um novo espaço de nome UUID para o VHD convertido, utilize o Set-VHD cmdlet:

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

Compreender conjuntos intercalados

Os conjuntos intercalados podem geralmente ser criados no BIOS de uma plataforma de servidor para fazer com que vários dispositivos de memória persistentes apareçam como um único disco para o sistema operativo anfitrião, aumentando a produção para esse disco.

Nota

Windows Server 2016 não suporta conjuntos intercalados de módulos de memória persistentes.

Lembre-se que um módulo de memória persistente reside numa ranhura padrão dimm (memória), que coloca os dados mais próximos do processador. Esta configuração reduz a latência e melhora o desempenho. Para aumentar ainda mais a produção, dois ou mais módulos de memória persistentes criam um conjunto intercalado de n-way para operações de leitura/escrita de listras. As configurações mais comuns são intercalações bidirecionais ou de quatro vias.

Pode utilizar o Get-PmemDisk cmdlet PowerShell para rever a configuração de tais discos lógicos, da seguinte forma:

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 utiliza os dispositivos físicos Id20 e Id120, e o disco PMem lógico 3 utiliza os dispositivos físicos Id1020 e Id1120.

Para obter mais informações sobre o conjunto intercalado que uma unidade lógica utiliza, executar 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

Conjuntos intercalados configurados

Para configurar um conjunto intercalado, executar o Get-PmemUnusedRegion cmdlet para rever todas as regiões de memória persistentes 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 o tipo de dispositivo, localização, estado de saúde e operacional, e assim por diante, executar 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 disponíveis, podemos criar novos discos de memória persistentes. Podemos usar a região não utilizada para criar múltiplos discos de memória persistentes executando os seguintes cmdlets:

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

Depois de feito, podemos ver os resultados correndo:

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 notar que podemos correr Get-PhysicalDisk | Where MediaType -eq SCM em vez de obter os Get-PmemDisk mesmos resultados. O disco de memória persistente recentemente criado corresponde a um a um com unidades que aparecem no PowerShell e no Windows Centro de Administração.

Substitua a memória persistente

Se tiver de substituir um módulo falhado, tem de reprovisionar o disco PMem (consulte os passos que descrevemos anteriormente).

Quando resolver problemas, talvez tenha de Remove-PmemDisk usar. Este cmdlet remove um disco de memória persistente específico. Podemos remover todos os discos de memória persistentes 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

Remover um disco de memória persistente causa perda de dados no disco.

Outro cmdlet que talvez precise é Initialize-PmemPhysicalDevice . Este cmdlet inicializa as áreas de armazenamento da etiqueta nos dispositivos de memória persistentes físicas e pode limpar informações de armazenamento de etiquetas 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 com a memória.

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

Para ver alguns dos benefícios da memória persistente, vejamos 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 escritos. Tais operações devem atravessar a rede e amplificar o tráfego de escrita de backend. Por esta razão, os maiores números de referência do IOPS são normalmente alcançados medindo leituras apenas, especialmente se o sistema de armazenamento tiver otimizações de bom senso para ler a partir da cópia local sempre que possível. Espaços de Armazenamento Direct está otimizado para o fazer.

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

Se virem o vídeo de perto, vão notar que o que é ainda mais impressionante é a latência. Mesmo com mais de 13,7 M IOPS, o sistema de ficheiros em Windows está a reportar latência que é consistentemente inferior a 40 μs! (Este é o símbolo para microsegundos, um milionésimo de segundo.) Esta velocidade é uma ordem de magnitude mais rápida do que o que os típicos vendedores de todos os flashes orgulhosamente anunciam hoje em dia.

Juntos, Espaços de Armazenamento Direct em Windows Server 2019 e Intel® Optane™ a memória persistente de DC apresentou um desempenho inovador. Este referencial de HCI de mais de 13,7M IOPS, acompanhado por latência previsível e extremamente baixa, é mais do dobro do nosso anterior benchmark líder do setor de 6,7M IOPS. Além disso, desta vez precisávamos apenas de 12 nós de servidores — menos 25% do que antes.

O hardware de teste foi um cluster de 12 servidores configurado para usar volumes de reFS de três vias e delimitados, 12 x Intel® S2600WFT, 384 Memória GiB, 2 x 28-core "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 seguinte mostra os números completos de desempenho.

Referência Desempenho
4K 100% leitura aleatória 13,8 milhões de IOPS
4K 90/10% leitura/escrita aleatória 9,45 milhões de IOPS
2 MB leitura sequencial Produção de 549 GB/s

Passos seguintes

Para obter informações relacionadas, consulte também: