Por que o limite teórico de RAM para o RHEL 6 128 TB e como isso é determinado?

8

Estou estudando para o RHCSA e estou confuso com uma declaração que encontrei em algum material de treinamento:

Não há RAM máxima prática; teoricamente, você pode executar 128 TB de RAM no RHEL 6. Mas isso é apenas teoria. A RAM máxima suportada pela Red Hat no RHEL 6 é 16 GB em sistemas de 32 bits e 2 TB em sistemas de 64 bits.

Alguém pode explicar de onde vem o limite teórico de 128 TB? Estou confuso sobre como o autor sabe que o limite teórico existe se o RHEL 6 definir claramente outros limites máximos. Isso é apenas fatorado nos limites teóricos da arquitetura de 64 bits? Ou há alguma outra razão aqui?

Mike B
fonte
3
Aqui está a resposta. Você pode reescrevê-lo e inserir como uma resposta
dchirikov

Respostas:

7

Na documentação do kernel, em Documentation/x86/x86_64/mm.txt:

Virtual memory map with 4 level page tables:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm

2 47 bytes = 128TiB

Ignacio Vazquez-Abrams
fonte
2 ^ 48 = 256 TiB ;-)
Huygens
Resposta muito concisa. Para obter mais informações, consulte lwn.net/Articles/117783 35 bits para o índice da tabela de páginas e 4096 bytes (2 ^ 12) é o tamanho de uma página. Dando 2 ^ (35) * 2 ^ (12) = 2 ^ 47 = 128 TB
pveentjer:
4

Resposta curta

Cada processo Linux pode endereçar no máximo 128 TB de memória virtual . No entanto, isso é mais do que o kernel do Linux pode suportar fisicamente . Portanto, esse limite é teórico.

Provavelmente foi escolhido arbitrariamente, com base em um cenário de uso supostamente "pior dos casos" previsível.

Resposta elaborada

Na verdade, você não pode usar mais RAM do que o seu hardware permite (48 bits = 256 TB é comum hoje em dia) e ficará limitado pela quantidade de memória física que o kernel do Linux pode suportar.

Por exemplo, na arquitetura Intel x86 de 64 bits , o Linux não pode usar mais de 64 TB de memória física (desde a versão 2.6.30 , mas havia 16 TB logo antes). Observe que o RHEL 6 usa um kernel 2.6.32 .

Na arquitetura s390 de 64 bits , o mesmo limite se aplica (desde 2.6.28 ). Se você usa 32 bits, no entanto, o limite é de 4 GB , mas usando um truque estranho chamado PAE , você pode ir até 64 GB (geralmente usado no x86).

Eu acho que outras arquiteturas de 64 bits têm limites mais baixos.

Veja a tabela de limites da Red Hat para mais informações (obrigado Huygens ).

Totor
fonte
1
O limite de 48 bits no x86-64 é muito um limite de hardware neste momento. en.wikipedia.org/wiki/X86-64#Virtual_address_space_details
Mat
Claro, mas isso depende da implementação e pode mudar no futuro. A questão é sobre um limite teórico . Eu atualizei minha resposta embora.
Totor 14/03
2
Isso depende da implementação do hardware. A arquitetura atual da AMD e Intel x86_64 suporta apenas 48 bits de espaço de endereço. Essa arquitetura pode evoluir no futuro.
Huygens
1

Não se deve misturar memória virtual e memória volátil física. O primeiro é específico da arquitetura da CPU e será mapeado para memória volátil e não volátil. O último, também conhecido como RAM, deve ser independente da arquitetura da CPU do ponto de vista do kernel.

A implementação atual da AMD e Intel x86_64 suporta apenas 48 bits de memória virtual endereçável. O que significa que o kernel pode endereçar 2 ^ 48 = 256 TiB por VM de processo.
O kernel do Linux na arquitetura x86_64 divide o espaço endereçável da VM em 2, 128 TiB para espaço do usuário e 128 TiB para espaço do kernel. Assim, um processo pode teoricamente tratar um total de 128 TiB de memória virtual.

O máximo de memória física volátil que o kernel pode suportar é um aspecto diferente, mas eu não conheço essas informações.

Em relação à declaração do autor do RHCSA

O autor da declaração "Não há RAM máxima prática; teoricamente, você pode executar 128 TB de RAM no RHEL 6." está usando terminologia errada ou incompreendida. Aqui está a tabela do site da Red Hat resumindo os recursos do RHEL 3, 4, 5 e 6 . E eles afirmam claramente "Máximo x86_64 de espaço de endereço virtual por processo [...] 128 TB [para RHEL 6]"

A mesma página afirma que o RHEL 6 suporta no máximo 2TB / 64TB de RAM (memória volátil física). Eu acho que isso significa que ele é certificado para uma RAM máxima de 2 TB e, teoricamente, pode chegar a 64 TB. O SLES é muito mais claro a esse respeito .

Huygens
fonte
Você diz que um processo pode endereçar 128 TB, mas todo o sistema (vários processos) pode ter e usar mais, de modo que a frase "você pode executar 128 TB de RAM no RHEL 6" me parece estranha, especialmente porque o funcionário Linux kernel não pode ...
Totor
Você poderia fornecer o ponteiro para onde encontrou a declaração "você pode executar 128 TB de RAM no RHEL 6"? Duvido que seja da Red Hat eles mesmos! O autor está confundindo memória física e memória virtual.
Huygens
@Totor Acabei de atualizar minha resposta com um link para o site da Red Hat, que não confirma a declaração RHCSA.
Huygens
@ Motor: No kernel do Linux, o HIGHMEM não foi portado para 64 bits. Sem o HIGHMEM, toda a RAM é mapeada no espaço de endereço do kernel, que é de 128 TB, daí o limite.
Yuhong Bao
0

A outra razão pela qual é teórica é a falta de experiência na implementação.

É comum que os programadores dimensionem variáveis ​​muito antes do que o hardware é capaz, para que o kernel não precise de uma programação arriscada de substituição e substituição, pois o hardware dessa capacidade aparece uma década ou mais depois.

No entanto, o tamanho variável não é o único limite. As estruturas de dados e seus algoritmos impõem seus próprios limites. Imagine por um momento fazer uma caminhada linear de uma estrutura de dados descrevendo cada página de 4KB desses 128 TB. Existem algumas respostas óbvias: não use páginas de 4KB, não use uma estrutura de dados linear, não acesse essas estruturas de dados frequentemente, descarregue o máximo possível no hardware. Mas existem estruturas de dados mais sutis + limitações de algoritmos que não saberemos até encontrá-las.

Sabemos que, se descobríssemos magicamente um PC de 128 TB amanhã e tentássemos inicializar o Linux nele, ele apresentaria um desempenho terrível, e talvez tão terrível para não começar. Mas consertar os algoritmos é trivial, consertar as estruturas de dados é um pouco trabalhoso, mas ainda muito menos trabalhoso do que consertar o tamanho de uma variável amplamente compreendida. Então, veremos mudanças dessa natureza à medida que o tamanho da memória aumenta.

vk5tu
fonte