Compartilhar via


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

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.

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 primeira linha, e é por isso que você pode ouvir as pessoas se referirem ao PMem como "memória de classe de armazenamento" ou SCM. Este artigo fornece informações básicas sobre a 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. É mais lento que a DRAM, mas oferece maior taxa de transferência do que SSD e NVMe. Em comparação com a DRAM, os módulos de memória persistente vêm em capacidades muito maiores e são mais baratos por GB, no entanto, ainda são mais caros que o NVMe. O conteúdo da memória permanece mesmo quando a energia do sistema cai 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 ultrarrápido.

O Azure Stack HCI e o Windows Server 2019 dão suporte ao uso de 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 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 persistente 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 a memória persistente em ambientes Windows Server e 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 acesso, que funciona 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 ela é recomendada para a maioria dos casos de uso.
  • Acesso direto (DAX), que funciona como memória para obter a menor latência. Você só pode usar o 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 tabela de conversão de blocos (BTT) ativada para reduzir o risco de gravações interrompidas. Para saber mais, consulte Entender e configurar o DAX.

Aviso

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

Regiões

Uma região é um conjunto de um ou mais módulos de memória persistente. 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 por vários módulos de memória persistente. 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 é enumerado como um PmemDisk dentro de uma VM (máquina virtual). Um PmemDisk é um intervalo de memória não volátil endereçado de forma contígua que você pode considerar como uma partição de disco rígido ou LUN. Você pode criar vários PmemDisks usando cmdlets do 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.

Tabela de conversão de blocos

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 em caso de 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. Recomendamos fortemente ativar o BTT em quase todos os casos. Como o BTT é uma propriedade do PmemDisk, ele deve ser ativado quando o PmemDisk é criado.

No modo de acesso em bloco, recomendamos o uso de BTT porque todos os dados usarão a 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 o façam. Mesmo que todas as operações do aplicativo estejam usando arquivos mapeados na memória com semântica DAX, gravações interrompidas ainda podem 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. A memória persistente tem suporte total 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
Memória persistente Intel Optane™ DC no modo App Direct Sem suporte Com suporte
Memória persistente Intel Optane™ DC no modo de memória Com suporte Com suporte

A memória persistente Intel Optane DC suporta os 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 do servidor, você deve usar o modo App Direct. O modo de memória usa essencialmente a memória persistente como RAM mais lenta, 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

Ao reiniciar um sistema que tem vários módulos de memória persistente Intel® Optane™ no modo App Direct que são divididos em vários PmemDisks, você pode perder o acesso a alguns ou 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 não é treinado 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 apenas aos PmemDisks que mapeiam 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 que dê suporte a 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 tem (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 conectados à 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 conjuntos intercalados

Os 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 desse 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 da 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 operações de leitura/gravação de faixa. As configurações mais comuns são a intercalação bidirecional ou quadridirecional.

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 que uma unidade lógica usa, 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 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 tipo de dispositivo, localização, integridade e status operacional 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 utilizada 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 notar que podemos correr 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 as unidades que aparecem no PowerShell e no Windows Admin Center.

Substituir memória persistente

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

Ao solucionar problemas, talvez seja necessário usar Remove-PmemDisko . 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 permanente causa perda de dados nesse disco.

Outro cmdlet que você pode precisar é Initialize-PmemPhysicalDeviceo . 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ótulos 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 ver 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 atravessar a rede e amplificar o tráfego de gravação de back-end. Por esse motivo, os maiores números absolutos de benchmark de IOPS normalmente são alcançados medindo 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. Os Espaços de Armazenamento Diretos são otimizados para fazer isso.

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

Se você assistir ao 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 arquivos no Windows está relatando uma latência consistentemente inferior a 40 μs! (Esse é o símbolo de microssegundos, um milionésimo de segundo.) Essa velocidade é uma ordem de magnitude mais rápida do que os fornecedores típicos de all-flash anunciam com orgulho hoje.

Juntos, os Espaços de Armazenamento Diretos no Windows Server 2019 e a memória persistente Intel® Optane™ DC proporcionaram um desempenho inovador. Esse benchmark de HCI de mais de 13,7 milhões de IOPS, acompanhado por latência previsível e extremamente baixa, é mais que o dobro do nosso benchmark líder do setor anterior de 6,7 milhões de IOPS. 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 configurado para usar espelhamento de três vias e volumes ReFS delimitados, 12 x Intel® S2600WFT, 384 GiB de memória, 2 x "CascadeLake" de 28 núcleos, 1,5 TB de memória persistente Intel® Optane™ DC 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 completos de desempenho.

Parâmetro de comparação Desempenho
4K 100% leitura 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: