Linux 6.10 SLUB reduz consumo de memória em cenários extremos

Linux 6.12-rc4 recebe suporte ao controlador MSI Claw A1M e correções Intel e AMD
tux

O Linux 6.10 SLUB reduz consumo de memória em cenários extremos. Um patch para o alocador SLUB do kernel Linux foi enfileirado antes da próxima janela de mesclagem do Linux 6.10 para ajudar a reduzir o consumo de memória em cenários extremos.

O patch do engenheiro da Huawei, Chen Jun, ajudará a reduzir o consumo de memória em casos extremos. Chen Jun explicou sobre o trabalho:
Quando kmalloc_node() é chamado sem __GFP_THISNODE e o nó de destino não tem memória suficiente, o SLUB aloca um fólio de um nó diferente do nó solicitado, em vez de tirar uma laje parcial dele. No entanto, como o fólio alocado não pertence ao nó solicitado, na alocação a seguir ele é desativado e adicionado à lista de lajes parciais do nó ao qual pertence.

Linux 6.10 SLUB reduz consumo de memória em cenários extremos

Esse comportamento pode resultar em uso excessivo de memória quando o nó solicitado tem memória insuficiente, como SLUB irá alocar repetidamente fólios de outros nós sem reutilizar os alocados anteriormente.

Para evitar o desperdício de memória, quando um nó preferencial é indicado (NUMA_NO_NODE), mas sem uma restrição de GFP_THISNODE prévia:

1) tente obter uma laje parcial do nó de destino apenas tendo __GFP_THISNODE em pc.flags para get_partial()
2) se 1) falhar, tente alocar uma nova laje do nó de destino com GFP_NOWAIT | __GFP_THISNODE oportunisticamente.
3) se 2) falhou, tente novamente com gfpflags originais que permitirão get_partial() tentar listas parciais de outros nós antes de potencialmente alocar nova página de outros nós

Ao testar em uma VM QEMU com quatro nós NUMA, cada um com 1 GB de memória e realizando um caso de teste simples, Chen descobriu que o número de objetos alocados via /proc/slabinfo caiu de 13.519.712 para 4.200.768 objetos. Ou apenas 31% do número original de objetos alocados como encontrado com kernels Linux atuais neste caso extremo.

O patch está na ramificação “for-next” do repositório SLAB.git antes da janela de mesclagem do Linux 6.10 que chegará em meados de maio.

Phoronix