Grenciamento de memória Linux vs MacOs

Não quero levantar polêmica mas eu estou um pouco decepcionado com o gerenciamento de memória no Linux. Eu já testei um Mac com 8G de RAM e HDD de 5400 RPM, tentei fazer ele engasgar e não consegui, mesmo abrindo inúmeras abas no safari e inúmeros pdfs.

Aqui no Linux, eu estou com 16 GB de RAM e HDD 7200 RPM e já tive um cenário de lentidão por causa de que memória foi para swap.

Afinal, isso é impressão minha ou há uma superioridade do MacOs nesse quesito? Ele gerencia melhor a memória?

Obrigado.

1 Curtida

Sem problema algum, você está fazendo o certo, está tentando entender suas dúvidas de forma honesta. Melhor do que simplesmente decidir que o Linux é ruim de forma rasa ou fingir que está tudo bem e se forçar para conviver com um sistema que está falhando com suas demandas.

É, mas mais importante, quem é superior ou não é um falso dilema. Ambos os sistemas gerenciam sua memória bem dentro de suas propostas, nenhum dos dois sistemas por padrão fazem o que todos esperam de um gerenciador de memória pois muitas vezes essas demandas se contradizem. Vou dar 2 exemplos.

Exemplo 1

Fulano é um pesquisador que está treinando uma rede neural, o software treinando a rede neural do Fulano é de longe o programa que mais usa RAM. Esse software está rodando tem 15 dias, faltando pouco para terminar. Algumas horas antes de conseguir obter um resultado, ele tenta alocar mais memória do que existe no cluste (RAM+SWAP), Fulano quer que o Kernel tente salve esse processo a todo custo, mesmo que demore mais, mesmo que matar outros processos menos importantes seja uma tarefa difícil de resolver quase sem ter RAM, mesmo que o uso de memória fique extremamente apertado depois de tudo e resulte em muitos engasgos e mais 1 dia de trabalho. TUDO menos ter que rodar esse algoritmo durante 15 dias novamente.

Exemplo 2

Ciclano é um gamer, ele está rodando um jogo que está usando pouca RAM, Ciclano abre o navegador e esse usa toda a RAM. Ciclano só quer que o Kernel não pense muito e já mate o processo que mais está consumindo RAM ou que foi responsável pelo problema, sem ter travamentos ou engasgos.

Como você pode ver, a estratégia ideal do Fulano é péssima para o Ciclano e vice-versa. E assim se por padrão o Ciclano receber um OS que age como o Fulano espera, ele terá que ajustar o sistema caso contrário ficará decepcionado.

Você precisa considerar que não está apenas comparando 2 sistemas operacionais, mas também 2 hardwares, você terá sem sombra de dúvidas menos problemas em um computador equipado com um HD de estado sólido se comparado a um computador com disco rígido quando a SWAP for exigida e em outros momentos também. Tem alguns anos que você vai ter problemas encontrando um macbook ou iMac, etc sem um SSD para a partição raiz/swap.

Além disso, como o sistema se comporta com pouca RAM, não é resultado exclusivo do gerenciamento de memória, mas também de como o sistema operacional agenda os processos na CPU/GPU e de como subsistemas como o display server reagem nestas condições. De Forma similar ao exemplo de cima, também são feitas escolhas que prejudicam coisas para melhorar outras.

Espero que você entenda que não é um problema simples, mas talvez se você detalhar melhor o que você quer e quais condições resultam no seu problema, talvez possamos resolver o seu problema, pelo que vi são experiências que você teve com sistemas out-of-box o que reduz as chances de o Kernel estar fazendo algo errado e ser o único culpado, ma mesmo assim talvez tenha algumas coisas que possamos fazer para melhorar isso.

5 Curtidas

Muito obrigado pelo exemplo. Foi bastante didático e esclarecedor.

Sendo bem honesto, eu tenho uma certa mania de querer puxar o máximo das coisas, pois deixo muita coisa aberta. Agora mesmo estou com 18 abas do Firefox abertas, Blender, vários PDFs, mensageiros, etc.

O sistema está fluido e sem engasgos, embora tenha 1,9/ 2 GB de swap. O que não entendi foi porque esse Swap foi usado, gerando lentidão momentânea quando estava paginando(é assim que se fala?), mesmo eu configurando o swapiness para só ser usado quando a RAM estivesse acima de 90%. No caso não chegou e o swap já foi usado.

Surgiu essa dúvida, pois o Mac tinha também HDD @ 5400 rpm e o castigei" e ele não chegou a engasgar. Uma vez ouvi falar que eles faziam esse “milagre” pois usavam uma única instância de toolkit gráfico, usava compressão de memória, etc.

A minha dúvida é mais sobre essa diferença, do ponto de vista técnico. No mais o sistema está bastante responsivo.

paginar na verdade é armazenar os dados dos processo, buffers e afim em páginas de forma a permitir descontinuidade, acho que você quis dizer swapping, é não tem tradução direta.

Pois o valor do swappiness não é um percentual nem tem uma relação direta com a RAM, é um valor que na verdade define quão agressivamente o kernel irá fazer uso do swap em vez de começar a descartar páginas de cache para alocar páginas de programa, com base em diversos fatores.

Mas esse mac tinha apenas um HDD tradicional? A Apple usa drives híbridos tem muito tempo mesmo e eles também tem essas informações de rpm, ainda hoje usam.

Não, está mais relacionado a como o sistema deles prioriza os processos responsáveis pela interface e pelo input do usuário, onde como o servidor gráfico se comporta e como o o scheduler trata ele nestes momentos são os principais fatores + o hardware deles que historicamente teve um enfoque melhor em reduzir o impacto das técnicas tradicionais de memória virtual onde você tem camadas (cache, RAM, HDD…). E sim definitivamente isso tem sua parcela nessa fluidez mas um SSD com certeza tem um impacto muito maior.

2 Curtidas

Pelo que parece, isso acontece porque o Mac demora mais pra jogar as coisas pra SWAP, experimenta reiniciar seu PC, abrir o terminal e rodar:

sudo sysctl vm.swappiness=8

Pra ver se melhora

Nota:

Isso é um experimento, evite fazer quando for executar um trabalho muito importante, essa alteração é temporária e só dura até reiniciar

1 Curtida

Complementando um pouco melhor a questão do quanto o software influencia nisso. Muitas vezes é uma questão de iludir o usuário.

Desde que o sistema priorize o servidor gráfico, você vai ter a percepção de que nada travou, mas o conteúdo da janela não responde. Eu tenho um MacBook Air, de 8 GB e com o Jetbrains IDEA o Xcode rodando um simulador do iOS e o Safari aberto para debugar o emulador, volta e meia é isso que acontece, posso mover janelas, mouse, ver o Exposé, mas as janelas não respondem.

Por baixo dos panos está ocorrendo o swapping, o Kernel está pausando o que estiver sendo movido para o SSD e mais um pouco, menos o servidor gráfico para dar conta do recado, e também está indo além, está dando todo o tempo que o servidor gráfico precisar para entregar os frames a tempo.

Outra questão é que ha uma padronização sobre como os softwares devem implementar o loop da interface internamente e interagir com o servidor gráfico que é mais uma questão de design pattern do que realmente o toolkit em sí, mas neste caso estamos ja falando de fluidez dentro do app (o que acontece dentro de uma janela). Mas sem a ajuda do kernel e do servidor gráfico nada impede de tudo inclusive esse software engasgar.

Portanto sim, há uma parcela relevante de motivos em como o software reage, mas não é uma coisa específica do toolkit.

No Linux a coisa é mais complexa pois existem mais fatores envolvidos, como DE, Xorg, Wayland e como as distros priorizam estes serviços via CGroups e ainda por cima o sabor de kernel rodando.

2 Curtidas

Troca o kernel pro ck, xanmod, liquorix ou qualquer outro “com foco em desktop” que vc vai notar uma melhora … talvez

Percebi que você disse que tem só 2gb de SWAP. É muito pouco, principalmente pra você que tem 16 gb de memória RAM.
Sugiro aumentar isso para no mínimo 4 gb de SWAP, mas o ideal mesmo é 16gb de SWAP (para evitar ter problemas com a suspensão).

De unix pra unix deveria ter o gerenciamento próximo, mas no linux isso e normal… Gerenciamento de RAM e um dos piores perto do mac e windows juntos
Eu já até perguntei por uma tentativa de solução desse problema mas só há alguma amenização do problema
Fiz ate um upgrade dessa vez com um SSD num Celeron 847 com 2gb de RAM, e como eu preciso de VM com windows parece que eu enfrento um pesadelo pra subir uma aplicação ali usando gnome boxes
Tem algumas coisas que amenizam como usar o earlyoom e alterar o swappiness, mas não e efetivo o suficiente em certas situações

Tenho uma máquina que uso exclusivamente no Steam e para Emuladores, ela tem 32 gigas de ram, quando instalei o linux por padrão, ele criou uma Swap de 8 gigas e insistia em usar ela, inicialmente apenas mudei a prioridade de uso da Swap, mais depois refiz a instalação com o Zorin Core e removi completamente a SWAP, virou outra máquina, o risco em não ter Swap, é que se acabar a RAM, o sistema provavelmente vai travar, mais no meu caso onde apenas 1 única aplicação é executada de cada vez, a chace disso ocorrer é extremamente remota.

1 Curtida

Dá para desativar o SWAP no arquivo /etc/fstab, ou ainda dá para adicionar até um arquivo como SWAP.

Dificilmente trocar o kernel dá alguma melhora.

Obrigado a todos pelas respostas.

Escolhi uma como resolvida, embora não seja um post de uma “solução fechada” mas foi bastante esclarecedor para mim.

Tem solução mas depende, suporte via fórum é complicado, alguns problemas na computação são complexos mesmo, uma sinergia de vários sistemas e causas silenciosas que se manifestam em momentos particulares, para piorar as vezes o usuário não distingue o que é o sistema ou o programa travando ou uma falta de sincronia fina de hardware causada por driver.

Eu não tenho problema com o gerenciamento de memória na minha Workstation, não engasga nada quando a SWAP entra em funcionamento e se acontece de ocupar toda RAM, o que é difícil no meu sistema, também não ocorre lentidão nem travamento nenhum.

Mas no geral eu tendo a concordar que é muito difícil você obter um sistema focado no usuário comum no Linux, a maioria das distros são feitas para e por pessoas que tem demandas ligadas a indústria de desenvolvimento de software, ironicamente versões Workstation e Server acabam sendo muito similares. E não só poucos usuários sabem como não é legal ter que ajustar e investigar tantos fatores para ter a experiência ideal para você, mas ter como, tem.

1 Curtida

Aumentar a SWAP também não ajudaria, eu pessoalmente mudaria a abordagem já que ele não tem SSD, porque não existe milagre, nem no sistema da maça com um HDD tradicional, você acaba esperando, até mais que em outros sistemas, a única diferença talvez seja uma espera mais ‘bonitinha’ com o gestor gráfico respondendo bem (honestamente eu detesto, nunca sei se sou eu usando o toutchpad errado ou a janela que parou), embora hoje em dia no Linux também seja possível ter uma experiência bem similar.

Eu continuaria usando a SWAP para que os algoritmos do kernel possam fazer o melhor possível com o que tem, mas passaria a fazer o swapping em um cache comprimido na RAM, ZSWAP. O Kernel vai poder continuar gerenciando a RAM da melhor forma possível, sem engasgos.

Para que os programas abram em alta velocidade sem se preocupar em calcular o espaço em RAM, eu mudaria a estratégia de overcomnit para aceitar que os programas declarem o que quiserem como espaço de memória virtual, e para evitar congelamentos ou travamentos no caso de um estouro de memória, eu instalaria algum OOM em userspace, como earlyoom ou nohang ou oomd e configuraria para priorizar matar programas como os navegadores, IDEs, spotify, remote screen, e preservar o Xorg, tmux, compositor, dentre outros ajustes.

1 Curtida

E adicionalmente, existem diversas abordagens por ai para ter o SWAP em um HDD e reduzir o impacto na experiência do usuário mas que são relativamente complexas de implantar, como:

  • patches para kernel (se não me engano um é usado no ChromeOS).
  • Utilizar o CGroups para fazer swapping de programas não relevantes para experiencia visual, para garantir a disponibilidade sempre de 3% da RAM evitar sobrecarga de IO.
  • Trancar as páginas de programas e serviços relevantes para a experiência do usuário na RAM.
  • Dar privilégio ao grupo do usuário dono da sessão gráfica, de forma que outros usuários logados sem gráfico ou deslogados da sessão gráfica sofram swap primeiro.

A maioria das distros não usa nada disso, principalmente porque é difícil estimar todos os possíveis impactos negativos destas práticas. Enfim, como eu disse, nem todas as estratégias resolvem para todos os gostos.

Eu pensei em abrir um tópico pois me veio uma dúvida com relação a isso, mas acho que a dúvida pode ser respondida aqui mesmo. É possível usar a hibernação com ZSWAP? Supondo que eu tenha uma partição SWAP com o mesmo tamanho da RAM que eu tenho, e tiver o ZSWAP ativado, se eu hibernar o PC os dados da RAM vão ser movidos para o HD, da mesma forma que aconteceria se tivesse só a SWAP ativada?

Não sem uma segunda SWAP ou em forma de partição, ou arquivo (a depender da distro). Mas se o tamanho do ZSWAP/RAM for relevantemente grande e a prioridade de cada SWAP for ajustada corretamente, será muito difícil a segunda swap ser usada para outra coisa que não seja hibernar. A não ser que realmente você tenha muito pouca RAM sempre esteja brigando com a mesma, ai ZSWAP sozinha nem seria uma boa ideia.

Hoje em dia eu raramente hiberno minhas máquinas, na minha workstation seriam 32 GB fixos inutilizados, 16GB no notebook, não compensa.

1 Curtida

Tenho 4GB de RAM e uso o LMDE Cinnamon. Até que não tá muito apertado, mas eu pensei em usar esse recurso ZSWAP pra ver se consigo algum ganho em performance. Eu também raramente uso a hibernação, mas eu quero garantir que vou poder usar, se um dia precisar. Então eu vou criar uma partição SWAP de 4GB e ativar o ZSWAP.

1 Curtida

Ativei o ZSWAP e fiz uns testes aqui. Estou impressionado com o “milagre”.