Por que o Debian Linux permite espaço de endereçamento virtual de até 128TiB por processo, mas apenas 64TiB de memória física?

22

Acabei de ler aqui :

  • up to 128TiB virtual address space per process (instead of 2GiB)
  • 64TiB physical memory support instead of 4GiB (or 64GiB with the PAE extension)

Por que isso? Quer dizer, o suporte a memória física está sendo limitado pelo kernel ou pelo hardware atual?

Por que você precisaria do dobro do espaço de memória virtual do que a memória física que você pode realmente endereçar?

    
por gsi-frank 16.08.2017 / 22:16

3 respostas

34

Esses limites não vêm do Debian ou do Linux, eles vêm do hardware. Arquiteturas diferentes (processador e barramento de memória) têm diferentes limitações.

Nos atuais processadores para PC x86-64, a MMU permite 48 bits de espaço de endereço virtual . Isso significa que o espaço de endereço é limitado a 256 TB. Com um bit para distinguir endereços de kernel de endereços de usuários, isso deixa 128 TB para o espaço de endereço de um processo.

Nos atuais processadores x86-64, endereços físicos podem usar até 48 bits , o que significa que você pode ter até 256 TB. O limite aumentou progressivamente desde que a arquitetura amd64 foi introduzida (a partir de 40 bits, se bem me lembro). Cada bit do espaço de endereço custa algumas lógicas de fiação e decodificação (o que torna o processador mais caro, mais lento e mais quente), portanto, os fabricantes de hardware têm um incentivo para manter o tamanho reduzido.

O Linux só permite que os endereços físicos subam para 2 ^ 46 (então você só pode ter até 64 TB) porque permite que a memória física seja totalmente mapeada no espaço do kernel. Lembre-se de que existem 48 bits de espaço de endereço; um bit para kernel / user deixa 47 bits para o espaço de endereço do kernel. Metade disso, no máximo, endereça diretamente a memória física, e a outra metade permite que o kernel mapeie o que for necessário. (O Linux pode lidar com a memória física que não pode ser mapeada integralmente ao mesmo tempo, mas isso introduz complexidade adicional, portanto, ela é feita apenas em plataformas onde é necessário, como x86-32 com PAE e armv7 com LPAE.)

É útil para a memória virtual ser maior que a memória física por vários motivos:

  • Permite ao kernel mapear toda a memória física e ter espaço para mappins virtuais.
  • Além dos mapeamentos da memória física, há mapeamentos de troca, de arquivos e de drivers de dispositivos.
  • É útil ter memória não mapeada em locais: páginas de proteção para capturar estouros de buffer , grandes zonas não mapeadas devido a ASLR , etc.
por 17.08.2017 / 00:16
9

Não sei porquê, mas posso pensar em sete razões pelas quais seria útil suportar o dobro do espaço de endereçamento que a memória física.

  1. O primeiro é para que você possa executar aplicativos que precisam de memória extra - mesmo que isso signifique trocar para o disco.
  2. Layers de memória mais limpos para particionar o uso da memória. Por exemplo, um sistema operacional pode aceitar endereços com números mais altos e deixar endereços com números mais baixos para aplicativos para tornar a separação mais limpa.
  3. A randomização do layout do espaço de endereço é um pouco mais eficaz.
  4. Marcar páginas como executáveis pode significar memória residual.
  5. E / S mapeada na memória.
  6. A alocação de memória é mais fácil: é possível alocar blocos maiores por vez.
  7. Fragmentação de memória reduzida
por 16.08.2017 / 22:48
6

Essas são limitações de hardware. O hardware x86_64 / amd64 atual permite endereços virtuais de 48 bits e vários endereços físicos (depende da implementação - por exemplo, minha estação de trabalho aqui suporta apenas 36 bits). O kernel do Linux divide o espaço de endereço virtual pela metade (usando metade do kernel, metade do espaço do usuário - exatamente como acontece no x86).

Então você tem:

2⁴⁸ bytes ÷ 2 = 2⁴⁷ bytes = 128 TiB

O tamanho do endereço físico é geralmente menor porque é realmente físico. Ele pega pinos / pads, transistores, conexões, etc., na CPU e linhas de rastreamento na placa. Provavelmente também é o mesmo nos chipsets. Não faz sentido suportar uma quantidade de memória RAM que é inconcebível durante a vida útil do núcleo do processador ou do soquete - todas essas coisas custam dinheiro. (Mesmo com 32 slots DIMM e 64GiB DIMM em cada um, você ainda está apenas em 2TiB. Mesmo se a capacidade de DIMM dobra anualmente, estamos a 5 anos de distância de 64TiB.

Como Peter Cordes aponta, as pessoas agora estão anexando armazenamento não-volátil, como XPoint 3D para o barramento de memória, o que torna possível a falta de espaço de endereçamento. Processadores mais novos estenderam o espaço de endereçamento físico para 48 bits; é possível que o wiki do Debian não tenha sido atualizado.

    
por 16.08.2017 / 23:58