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?
rhel
memory
linux-kernel
ram
virtual-memory
Mike B
fonte
fonte
Respostas:
Na documentação do kernel, em
Documentation/x86/x86_64/mm.txt
:2 47 bytes = 128TiB
fonte
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 ).
fonte
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 .
fonte
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.
fonte