Compreendendo o Non-uniform Memory Access

Microsoft O Microsoft SQL Server reconhece o NUMA (Non-uniform Memory Access) e tem um bom desempenho em hardware de NUMA sem configuração especial. Devido ao aumento da velocidade de clock e do número de processadores, fica muito difícil reduzir a latência de memória exigida para usar este poder de processamento adicional. Para evitar isto, fornecedores de hardware fornecem caches de L3 grandes, mas esta é apenas uma solução limitada. A arquitetura de NUMA fornece uma solução evolutiva para este problema. O SQL Server foi projetado para tirar proveito de computadores baseados em NUMA sem exigir nenhuma mudança de aplicativo.

Conceitos de NUMA

A tendência em hardware é voltada para mais de um barramento de sistema, cada um atendendo a um conjunto pequeno de processadores. Cada grupo de processadores tem sua própria memória e, possivelmente, seus próprios canais de E/S. Porém, cada CPU pode acessar a memória associada aos outros grupos de um modo coerente. Cada grupo é chamado de nó NUMA. O número de CPUs dentro de um nó NUMA depende do fornecedor de hardware. É mais rápido acessar a memória local do que a memória associada a outros nós NUMA. Esta é a razão do nome, arquitetura non-uniform memory access.

Em um hardware de NUMA, algumas regiões da memória estão em barramentos fisicamente diferentes de outras regiões. Devido ao NUMA usar memória local e externa, levará mais tempo para acessar algumas regiões de memória que outras. A memória local e a memória externa normalmente são usadas em referência a um thread sendo executado atualmente. A memória local é a memória que está no mesmo nó da CPU que está executando o thread atualmente. Qualquer memória que não pertence ao nó no qual o thread está sendo executado atualmente é externa. A memória externa também é conhecida como memória remota. A taxa de custo para acessar a memória externa em comparação com a memória local é chamada de taxa NUMA. Se a taxa NUMA for 1, será SMP (multiprocessamento simétrico). Quanto maior a taxa, maior o custo para acessar a memória de outros nós. Os aplicativos do Windows que não reconhecem o NUMA (inclusive o SQL Server 2000 SP3 e anterior) às vezes são executados precariamente em hardware de NUMA.

O benefício principal de NUMA é ser evolutivo. A arquitetura de NUMA foi projetada para ultrapassar os limites de evolução da arquitetura de SMP. Com o SMP, todo o acesso à memória é postado no mesmo barramento de memória compartilhada. This works fine for a relatively small number of CPUs, but not when you have dozens, even hundreds, of CPUs competing for access to the shared memory bus. A arquitetura NUMA reduz esses afunilamentos limitando o número de CPUs em qualquer barramento de memória e conectando os vários nós por meio de uma interconexão de alta velocidade.

Nó NUMA com 4 processadores

NUMA de hardware vs. NUMA de software

O NUMA pode compatibilizar a memória com CPUs por meio de hardware especializado (NUMA de hardware) ou de configuração de memória do SQL Server (NUMA de software). Durante a inicialização, o SQL Server é configurado baseado no sistema operacional subjacente e na configuração de hardware ou na configuração NUMA de software. Para NUMA de hardware e software, quando o SQL Server for iniciado em uma configuração de NUMA, o log do SQL Server registrará uma mensagem de configuração de vários modos para cada nó, junto com a máscara de CPU.

NUMA de hardware

Os computadores com NUMA de hardware têm mais de um barramento de sistema, cada um atendendo a um conjunto pequenos de processadores. Cada grupo de processadores tem sua própria memória e, possivelmente, seus próprios canais de E/S, mas cada CPU pode acessar a memória associada a outros grupos de um modo coerente. Cada grupo é chamado de nó NUMA. O número de CPUs dentro de um nó NUMA depende do fornecedor de hardware. Seu fabricante de hardware poderá informar se seu computador oferece suporte a NUMA de hardware.

Se você tiver NUMA de hardware, poderá configurá-lo para usar memória intercalada em vez de NUMA. Neste caso, o Windows e, conseqüentemente, o SQL Server não o reconhecerão como NUMA. Execute a consulta a seguir para localizar o número de nós de memória disponível para SQL Server:

SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks

Se o SQL Server retornar apenas um nó de memória único (nó 0), significa que você não tem NUMA de hardware ou o hardware está configurado como intercalado (não-NUMA). Se você achar que seu NUMA de hardware está configurado incorretamente, contate seu fornecedor de hardware para habilitar o NUMA. O SQL Server ignora a configuração de NUMA quando o NUMA de hardware tem quatro ou menos CPUs e pelo menos um nó tem somente uma CPU.

NUMA de software

O SQL Server lhe permite agrupar as CPUs em nós conhecidos como NUMA de software. Você normalmente configura o NUMA de software quando tem muitas CPUs e não tem NUMA de hardware, mas também pode usar NUMA de software para subdividir nós de NUMA de hardware em grupos menores. Somente o agendador do SQL Server e a Interface de Rede (SNI) do SQL Server reconhecem o NUMA de software. Os nós de memória são criados com base em NUMA de hardware, portanto, não são afetados por NUMA de software. Por exemplo, se você tiver um computador de SMP com oito CPUs e criar quatro nós NUMA de software com duas CPUs cada, você terá apenas um nó de memória atendendo todos os quatro nós NUMA. O NUMA de software não fornece memória para afinidade de CPU.

Os benefícios de NUMA de software incluem a redução de E/S e afunilamentos de gravador lento em computadores com muitas CPUs e nenhum NUMA de hardware. Existe um thread de E/S único e um thread de gravador lento único para cada nó NUMA. Dependendo do uso do banco de dados, estes threads únicos podem ter um afunilamento de desempenho significativo. A configuração de quatro nós NUMA de software fornece quatro threads de E/S e quatro threads de gravador lento que podem melhorar o desempenho.

Você não pode criar um NUMA de software que inclui as CPUs de nós NUMA de hardwares diferentes. Por exemplo, se seu hardware tiver oito CPUs (0..7) e você tiver dois nós NUMA de hardware (0-3 e 4-7), poderá criar um NUMA de software combinando a CPU (0,1) e a CPU (2,3). Você não pode criar um NUMA de software que usa a CPU (1, 5), mas pode usar afinidade de CPU para aproximar uma instância do SQL Server para CPUs de nós NUMA diferentes. Portanto, no exemplo anterior, se o SQL Server usar as CPUs 0-3, você terá um thread de E/S e um thread de gravador lento. Se, no exemplo anterior, o SQL Server usar as CPUs 1, 2, 5 e 6, você acessará dois nós NUMA e terá dois threads de E/S e dois threads de gravador lento.

ObservaçãoObservação

Algumas configurações de hardware compartilham recursos comuns, como um cache de L3/L4. Os processadores podem ser agrupados ao redor destes recursos compartilhados para criar nós NUMA de software.

Para obter mais informações, consulte Como configurar o SQL Server para usar o soft-NUMA.