O limite de 1 GiB para a memória kernel do Linux em um sistema de 32 bits é uma conseqüência do endereçamento de 32 bits, e é um limite bastante rígido. Não é impossível mudar, mas está lá por uma boa razão; mudá-lo tem consequências.
Vamos pegar a máquina do caminho de volta ao início dos anos 90, quando o Linux estava sendo criado. Naquela época, nós tínhamos argumentos sobre se o Linux poderia ser executado em 2 MiB de RAM ou se realmente precisava de 4 MiB inteiro . É claro que os esnobes high-end estavam todos zombando de nós, com seus 16 servidores monstros MiB.
O que essa divertida pequena vinheta tem a ver com alguma coisa? Nesse mundo, é fácil tomar decisões sobre como dividir o espaço de endereço de 4 GiB obtido a partir de um simples endereçamento de 32 bits. Alguns sistemas operacionais o dividem ao meio, tratando o bit superior do endereço como o "sinalizador de kernel": os endereços 0 a 2 31 -1 tiveram o bit superior limpo, e foram para o código de espaço do usuário e os endereços 2 31 até 2 32 -1 tiveram o bit superior definido e foram para o kernel. Você poderia apenas olhar para o endereço e informar: 0x80000000 e acima, é o espaço do kernel, caso contrário, é espaço do usuário.
À medida que os tamanhos de memória do PC aumentaram em direção ao limite de memória de 4 GiB, essa divisão simples de 2/2 começou a se tornar um problema. O espaço do usuário e o espaço do kernel tinham boas declarações em muita memória RAM, mas como nosso propósito em ter um computador é geralmente rodar programas de usuário, ao invés de rodar kernels, sistemas operacionais começaram a brincar com o usuário / kernel. A divisão de 3/1 é um compromisso comum.
Quanto à sua pergunta sobre o físico vs virtual, na verdade não importa. Tecnicamente falando, é um limite de memória virtual, mas isso é apenas porque o Linux é um sistema operacional baseado em VM. A instalação de 32 GiB de RAM física não alterará nada nem ajudará a swapon
a uma partição de permuta de 32 GiB. Não importa o que você faça, um kernel Linux de 32 bits nunca poderá endereçar mais de 4 GiB simultaneamente.
(Sim, eu sei sobre o PAE . Agora que os SOs de 64 bits estão finalmente assumindo, espero que possamos começar a esquecer esse corte desagradável.Eu não acredito que possa ajudá-lo neste caso de qualquer maneira.)
A conclusão é que, se você estiver executando o limite da VM do kernel de 1 GiB, poderá recompilar o kernel com uma divisão 2/2, mas isso impactará diretamente os programas de espaço do usuário.
64 bits é realmente a resposta certa.