Existe um velho ditado da rede que é:“Problemas de largura de banda podem ser curados com dinheiro. Os problemas de latência são mais difíceis porque a velocidade da luz é fixa.”
Tradicionalmente, havia quatro camadas primárias na hierarquia geral de memória e armazenamento de um servidor de banco de dados. Começando no topo da pirâmide, você tem cache de memória de acesso aleatório estático (SRAM), que normalmente é dividido entre caches L1 e L2 relativamente pequenos e rápidos para cada núcleo físico de um processador e um cache maior, mais lento, on-die, cache L3 compartilhado para todo o processador. Por exemplo, o processador Intel Xeon E7-8890 v4 de 14 nm (Broadwell-EX) tem um cache L1 de 64 KB por núcleo e um cache L2 de 256 KB por núcleo, juntamente com um cache L3 de 60 MB muito maior, mas mais lento, que é compartilhado por todo o processador físico .
A segunda camada é a memória dinâmica de acesso aleatório (DRAM) com capacidades de licença de até 4 TB com o Windows Server 2012 R2, indo até 24 TB com o Windows Server 2016 e com latências na faixa de nanossegundos. Tanto a SRAM quanto a DRAM são voláteis, o que significa que armazenam dados somente quando a energia elétrica é aplicada.
A terceira camada são SSDs SATA/SAS (NAND), com capacidades individuais de até cerca de 4 TB e latências na faixa de microssegundos. Um fator limitante com SSDs SATA/SAS (NAND) mais antigos é o fato de que eles estão usando a interface SATA/SAS que limita sua largura de banda total, dependendo da versão SATA/SAS que estão usando. Eles também são limitados pelo uso do protocolo AHCI legado, que tem muito mais sobrecarga de E/S e maior latência do que o protocolo NVMe mais recente. A quarta camada são as unidades de disco rígido de mídia giratória magnética legada, com capacidades individuais de até 10 TB e latências na faixa de milissegundos.
Cada uma dessas camadas tradicionais tem maior latência, mas menor custo por MB/GB e maior capacidade total à medida que você desce na hierarquia de memória/armazenamento. A latência relativa dessas quatro camadas tradicionais é mostrada na Tabela 1.
Interface | Tipo | Latência relativa (leituras) |
No núcleo/CPU na matriz | Cache SRAM | 1x |
Anexação Direta | DRAM DDR4 | 10x |
PCIe NVMe ou SATA/SAS AHCI | SSD | 100.000x |
SAS/SATA | HDD | 10.000.000x |
Tabela 1:Camadas tradicionais de memória/armazenamento
Novas camadas de memória/armazenamento
Nos últimos dois anos, vimos a introdução e o uso crescente de SSDs PCIe NVM Express (NVMe) baseados na tecnologia flash NAND existente. Eles normalmente têm latências na faixa de 50 a 100 microssegundos. Eles também usam o protocolo NVMe mais recente e muito mais eficiente e a interface PCIe, oferecendo um desempenho muito melhor do que os SSDs SAS/SATA mais antigos usando o antigo protocolo AHCI.
Atualmente, a Hewlett Packard Enterprise (HPE) está vendendo módulos NVDIMM de 8 GB para seus servidores HPE Proliant DL360 Gen9 e servidores HPE Proliant DL380 Gen9. Esses módulos têm 8 GB de DRAM com suporte de 8 GB de flash por US$ 899,00, o que é muito caro por gigabyte. Esses servidores de dois soquetes têm 24 slots de memória, cada um com suporte para DIMMs DDR4 tradicionais de até 128 GB. Quaisquer slots usados para módulos NVDIMM não estarão disponíveis para uso regular de memória. Você pode usar no máximo 16 slots de memória para uso de NVDIMM, o que oferece uma capacidade máxima de 128 GB. Você deve usar os processadores da série Intel Xeon E5-2600 v4 para obter suporte oficial NVDIMM. A Micron está programada para lançar NVDIMMs de 16 GB de maior capacidade em outubro de 2016.
Dispositivo | IOPS | Latência média (ns) | MB/s |
NVM Express SSD | 14.553 | 66.632 | 56,85 |
Modo de bloqueio NVDIMM | 148.567 | 6.418 | 580,34 |
Modo DAX NVDIMM | 1.112.007 | 828 | 4.343,78 |
Tabela 2:Comparação de desempenho de gravação aleatória em 4K (1 thread, QD1)
Os números de desempenho na Tabela 2 são de uma apresentação da Microsoft/Intel (Persistent Memory in Windows) no IDF16 em San Francisco, usando esta metodologia de teste de desempenho:
- Carga de trabalho :Gravações aleatórias de 4 KB, 1 thread, 1 E/S pendente, E/S síncrona, arquivo de 1 GB, NTFS, aquecimento de 3 segundos, tempo de medição de 7 segundos
- Hardware :HPE ProLiant DL380 Gen9, 2x Intel Xeon E5-2650L v3 @ 1.8GHz, 96GB de RAM, 2x 8GB NVDIMM-N, 1x 1600GB NVMe SSD
- Software :Compilação pré-lançada do WS 2016, ferramenta de E/S interna da Microsoft
Há um bom vídeo do Canal 9 chamado Accelerating SQL Server 2016 Performance with Persistent Memory in Windows Server 2016 apresentando Lindsey Allen e Tobias Klima. Uma demonstração no vídeo mostra como o SQL Server 2016 em execução no Windows Server 2016 oferece suporte ao modo DAX (com um sinalizador de rastreamento não especificado). Quando o Windows Server 2016 for GA, o sinalizador de rastreamento não será necessário com uma versão futura do SQL Server.
Essas novas camadas de armazenamento de memória se encaixarão entre a memória DRAM tradicional e os SSDs SATA/SAS.
Um volume de armazenamento que foi formatado no modo DAX pode ser usado para hospedar um arquivo de log de transações do SQL Server 2016 em um cenário em que você precisa do melhor desempenho de gravação possível e não deseja usar durabilidade atrasada ou OLTP na memória. Outro cenário possível seria usar um volume do modo DAX para hospedar seus arquivos de dados tempdb se você tivesse uma carga de trabalho que colocasse um estresse extremo no tempdb.
Futuras camadas de memória/armazenamento
No final de 2016/início de 2017, devemos ver a introdução dos SSDs Intel Optane usando o protocolo NVMe. Serão dispositivos de armazenamento flash que usam a tecnologia Intel/Micron 3D XPoint (pronunciada como cross-point), que funcionará em servidores existentes. Nos testes internos da Intel, esses dispositivos estão mostrando latência cerca de 10 vezes menor e IOPS cerca de 10 vezes maior do que os dispositivos SSD Intel DC P3700 Series PCIe NVMe existentes e de alto desempenho.
Em meados/final de 2017, também devemos ver o lançamento de uma nova forma de DIMM persistente que pode ser usada como memória persistente de capacidade muito grande ou como armazenamento de baixa capacidade de desempenho extremamente alto. Eles serão eletricamente e fisicamente compatíveis com os DIMMs DDR4 atuais e serão suportados na próxima geração da plataforma baseada no processador Intel Xeon (a plataforma Skylake “Purley”). Esses produtos também serão baseados na tecnologia Intel/Micron 3D XPoint. Esses DIMMs Intel oferecerão até o dobro da capacidade de memória do sistema a um custo significativamente menor do que a DRAM DDR4 tradicional, supondo que sua plataforma de processador/servidor a suporte (e a Microsoft aumenta o limite de memória de licença após o lançamento do Windows Server 2016). Esses DIMMs não terão a mesma latência que a DRAM tradicional (serão mais lentos), mas oferecerão uma latência muito menor do que os dispositivos de armazenamento PCIe NVMe.
De uma perspectiva mais ampla do setor, essa nova categoria de dispositivos de memória persistente (PM) oferecerá armazenamento não volátil com desempenho próximo ao de DRAM. Os dispositivos PM residem diretamente no barramento de memória, oferecendo latência muito baixa e alta largura de banda. A Microsoft oferece suporte a dispositivos PM na Atualização de Aniversário do Windows 10 e no Windows Server 2016. Haverá suporte para uma nova classe de volume de armazenamento, que é chamado de Volume de Armazenamento de Acesso Direto (DAX). Os volumes DAX usam arquivos mapeados na memória para fornecer aos aplicativos acesso direto aos dispositivos PM para obter o melhor desempenho absoluto.
Uma razão pela qual o modo DAX é muito mais rápido é porque, depois de mapear a região do NVDIMM em um volume DAX, outras interações com esse armazenamento ignoram completamente a pilha de armazenamento. É literalmente apenas uma memcopy para que os dados sejam persistentes. Isso é muito código que você não precisa executar em todas as interações com o armazenamento. Esse é outro contribuinte muito significativo para a latência (junto com a velocidade da luz). Os volumes DAX são suportados em NTFS e você deve escolher o modo DAX ao formatar o volume. Os aplicativos (como o SQL Server 2016) devem ter sido modificados (pela Microsoft) para oferecer suporte e usar o modo DAX, e você também precisará habilitar um sinalizador de rastreamento.
Para compatibilidade com versões anteriores do hardware PM, também haverá volumes no modo Block, que mantêm toda a semântica de armazenamento existente. Todas as operações de E/S percorrerão a pilha de armazenamento para o driver de disco PM. Isso torna o modo Block totalmente compatível com os aplicativos existentes. Se você tiver um dispositivo de hardware PM, com um sistema operacional compatível, obterá um desempenho de armazenamento significativo sem nenhuma modificação de aplicativo no modo Block. Isso significa que as versões de nível inferior do SQL Server poderão usar os volumes de armazenamento do modo Block.
A conclusão de tudo isso é que teremos muito mais flexibilidade e novas opções sobre como projetar e configurar suas camadas de subsistema de memória e armazenamento nos próximos 12 a 18 meses, desde que você esteja usando o SQL Server 2016 no Windows Server 2016 e tenha hardware novo o suficiente para dar suporte a dispositivos PM. As versões mais antigas do SQL Server poderão usar os volumes PM do modo de bloco se estiverem sendo executados no Windows Server 2016. O hardware mais antigo e as versões mais antigas do Windows Server poderão usar os SSDs Intel Optane. Isso nos dará muitas opções adicionais para melhorar o desempenho do armazenamento!