Partilhar via


Compreender e implementar 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 mantém o seu conteúdo através de ciclos de energia e pode ser utilizada como armazenamento de primeira camada, razão pela qual pode ouvir as pessoas referirem-se ao PMem como "memória da classe de armazenamento" ou SCM. Este artigo fornece informações sobre a memória persistente e explica como implementá-la como a camada de armazenamento superior no Azure Stack HCI e no Windows Server.

O que é a memória persistente?

A memória persistente é um tipo de suporte de dados não volátil que se encaixa num bloco DIMM (memória) padrão. É mais lento do que o DRAM, mas fornece um débito superior ao SSD e ao NVMe. Em comparação com o DRAM, os módulos de memória persistente têm capacidades muito maiores e são menos dispendiosos por GB, no entanto, ainda são mais caros do que o NVMe. Os conteúdos de memória permanecem mesmo quando a energia do sistema fica inativa em caso de perda de energia inesperada, encerramento iniciado pelo utilizador ou falha do sistema. Isto significa que pode utilizar módulos de memória persistente como armazenamento persistente e ultra-rápido.

O Azure Stack HCI e o Windows Server 2019 suportam a utilização da memória persistente como uma cache ou uma unidade de capacidade. No entanto, dado o modelo de preços, a memória persistente fornece o maior valor como uma 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 utilizadas automaticamente como unidades de cache e qualquer coisa mais lenta será utilizada como unidades de capacidade. Para obter mais informações sobre como configurar unidades de cache e capacidade, veja Compreender a cache do agrupamento de armazenamento e Planear volumes.

Conceitos de memória persistentes

Esta secção descreve os conceitos básicos que terá de compreender para implementar memória persistente em ambientes do Windows Server e do Azure Stack HCI para reduzir os estrangulamentos de E/S e melhorar o desempenho.

Métodos de acesso

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

  • Bloquear o acesso, que funciona como armazenamento para compatibilidade de aplicações. Nesta configuração, os dados fluem normalmente através do sistema de ficheiros e das pilhas de armazenamento. Pode utilizar esta configuração em combinação com NTFS e ReFS e é recomendada para a maioria dos casos de utilização.
  • Acesso direto (DAX), que funciona como a 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 de blocos (BTT) ativada para mitigar o risco de escritas rasgadas. Para saber mais, veja Compreender e configurar o DAX.

Aviso

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

Regiões

Uma região é um conjunto de um ou mais módulos de memória persistente. 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ços virtual lógico para aumentar o débito. Para aumentar a largura de banda disponível, os endereços virtuais adjacentes são distribuídos por vários módulos de memória persistente. Normalmente, as regiões podem ser criadas no BIOS de uma plataforma de servidor.

PmemDisks

Para utilizar a memória persistente como armazenamento, tem de definir pelo menos um PmemDisk, que é um disco rígido virtual (VHD) no anfitrião que enumera como pmemDisk dentro de uma máquina virtual (VM). Um PmemDisk é um intervalo contíguo de memória não volátil que pode considerar como uma partição de disco rígido ou LUN. Pode criar vários PmemDisks com cmdlets Windows PowerShell para dividir a capacidade não processada disponível. Cada módulo de memória persistente contém uma Área de Armazenamento de Etiquetas (LSA) 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 "escritas rasgadas" que podem ocorrer em caso de falha de energia ou falha do sistema, colocando os dados em risco. A BTT mitiga este risco ao fornecer semântica de atualização do setor atómico para dispositivos de memória persistentes, permitindo essencialmente escritas de setor semelhantes a blocos para que as aplicações possam evitar misturar dados antigos e novos num cenário de falha. Recomendamos vivamente que ative a BTT em quase todos os casos. Uma vez que BTT é uma propriedade do PmemDisk, tem de ser ativado quando o PmemDisk é criado.

No modo de acesso a blocos, recomendamos a utilização de BTT, uma vez que todos os dados irão utilizar a semântica de blocos. O BTT também é útil no modo DAX porque as operações de metadados ainda utilizam semântica de blocos, mesmo que as operações de dados da aplicação não o sejam. Mesmo que todas as operações da aplicação estejam a utilizar ficheiros mapeados pela memória com semântica DAX, as escritas rasgadas ainda podem ocorrer para as operações de metadados; por conseguinte, a ativação da BTT ainda é valiosa.

Hardware suportado

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

Tecnologia de Memória Persistente Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
NVDIMM-N no modo persistente Suportado Suportado
Memória Persistente intel Optane™ DC no Modo Direto da Aplicação Não suportado Suportado
Memória Persistente intel Optane™ DC no Modo de Memória Suportado Suportado

A Memória Persistente intel Optane DC suporta os modos operativos Memória (volátil) e App Direct (persistente). Para utilizar módulos de memória persistente como armazenamento, que é o principal caso de utilização das cargas de trabalho do servidor, tem de utilizar o modo Direto da Aplicação. O modo de memória utiliza essencialmente a memória persistente como RAM mais lenta, o que normalmente não cumpre 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 com semântica semelhante à memória.

O modo de funcionamento é, muitas vezes, pré-configurado pelo fabricante do dispositivo original.

Nota

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

Esta perda de acesso ocorre porque um módulo de memória persistente não está preparado 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 mapeiam fisicamente para o módulo com falhas.

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, perderá o acesso apenas a PmemDisks que mapeiam fisicamente para o módulo afetado; outros não são afetados.

Configurar memória persistente

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

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

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

A extensão VHD tem de ser "vhdpmem".

Também pode converter um VHD que não tenha o BTT ativado num que o faça (e vice-versa) com 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 espaço de nomes que o original. Isto pode originar problemas, especialmente se ambos estiverem ligados à mesma VM. Para criar um novo UUID de espaço de nomes para o VHD convertido, utilize o Set-VHD cmdlet :

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

Compreender os conjuntos intercalados

Normalmente, os conjuntos intercalados podem ser criados no BIOS de uma plataforma de servidor para fazer com que múltiplos dispositivos de memória persistentes apareçam como um único disco para o sistema operativo anfitrião, aumentando o débito desse disco.

Nota

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

Lembre-se de que um módulo de memória persistente reside num bloco DIMM (memória) padrão, o que coloca os dados mais próximos do processador. Esta configuração reduz a latência e melhora o desempenho da obtenção. Para aumentar ainda mais o débito, dois ou mais módulos de memória persistente criam um conjunto intercalado de n vias para operações de leitura/escrita de faixas. As configurações mais comuns são a intercalação bidirecional ou de quatro vias.

Pode utilizar o cmdlet do Get-PmemDisk PowerShell para rever a configuração desses 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 2 lógico utiliza os dispositivos físicos Id20 e Id120 e o disco PMem 3 lógico utiliza os dispositivos físicos ID1020 e Id1120.

Para obter mais informações sobre o conjunto intercalado utilizado 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 rever todas as regiões de memória persistente que não estã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 funcionamento e operacional, entre outros, 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

Uma vez que temos uma região PMem não utilizada disponível, podemos criar novos discos de memória persistentes. Podemos utilizar a região não utilizada para criar vários discos de memória persistentes ao executar os seguintes cmdlets:

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

Depois de concluído, podemos ver os resultados ao executar:

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 executar Get-PhysicalDisk | Where MediaType -eq SCM em vez de Get-PmemDisk obter os mesmos resultados. O disco de memória persistente recentemente criado corresponde um a um com unidades que aparecem no PowerShell e no Windows Admin Center.

Substituir memória persistente

Se tiver de substituir um módulo com falhas, terá de reaprovisionar o disco PMem (veja os passos que delineámos anteriormente).

Quando resolver problemas, poderá ter de utilizar Remove-PmemDisk. Este cmdlet remove um disco de memória persistente específico. Podemos remover todos os discos de memória persistentes atuais ao executar 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 nesse disco.

Outro cmdlet de que poderá precisar é Initialize-PmemPhysicalDevice. Este cmdlet inicializa as áreas de armazenamento de etiquetas nos dispositivos de memória persistente física e pode limpar informações de armazenamento de etiquetas danificadas 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 a perda de dados na memória persistente. Utilize-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, vamos ver este vídeo do Microsoft Ignite 2018.

Qualquer sistema de armazenamento que forneça tolerância a falhas faz necessariamente cópias distribuídas de escritas. Estas operações têm de atravessar a rede e amplificar o tráfego de escrita de back-end. Por este motivo, os maiores números de referência de IOPS são normalmente alcançados ao medir apenas leituras, 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 Direto está otimizado para o fazer.

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

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

Em conjunto, Espaços de Armazenamento Direto no Windows Server 2019 e a memória persistente intel® Optane™ DC proporcionaram um desempenho inovador. Esta referência HCI de mais de 13,7 M IOPS, acompanhada por latência previsível e extremamente baixa, é mais do dobro da referência anterior líder do setor de 6,7 M IOPS. Além disso, desta vez precisávamos apenas de 12 nós de servidor, menos 25 por cento do que antes.

O hardware de teste era um cluster de 12 servidores que foi configurado para utilizar espelhamento tridirecional e volumes ReFS delimitados, 12 x Intel® S2600WFT, 384 GiB memory, 2 x 28 núcleos "CascadeLake", 1,5 TB Intel® Optane™ DC persistent memory as 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 de desempenho completos.

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

Passos seguintes

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