domingo, 19 de janeiro de 2014

Memória virtual no HD é coisa do passado

Para aquele tempo um recurso especial dos computadores e sistemas operacionais se fazia necessário: a extensão da memória usando o HD. Como a memória RAM física era extremamente limitada, os sistemas utilizavam um “truque” para aumentá-la, usando um arquivo no HD (caso do pagefile.sys do Windows) ou uma partição dedicada (as partições swap, no Linux).
O termo "memória virtual" se refere ao conjunto todo da memória: a RAM física mais um espaço ou arquivo no HD, usado como extensão dela, e gerenciado dinamicamente pelo sistema operacional. Os programas comuns não precisam se preocupar sobre em qual parte seus dados ficarão, já que eles apenas mandam gravar e ler dados na memória. O sistema operacional cuida da tarefa de organizar os dados, movendo eles da RAM física para o HD e vice-versa conforme o uso.
Logo se vê o prejuízo no desempenho: quando o sistema precisa de mais memória ele passa a utilizar o HD, que tem a velocidade de escrita bem mais lenta do que a da RAM (e de leitura também). Qualquer um que já precisou usar o Windows 2000 com 64 MB de RAM, o XP com 128 ou Vista com 512 sabe bem dessa lentidão. Conforme mais programas são abertos, especialmente programas pesados (ou mais abas no navegador), o que não cabe na memória vai sendo jogado para o HD. Ao alternar de aba, janela ou programa, aquele conteúdo que estava no HD precisa ir pra RAM, e o que estava na RAM é jogado de volta ao HD. Isso pode tomar alguns milésimos de segundo apenas, mas na maioria das atividades em PCs com pouca RAM toma na verdade vários segundos inteiros. E isso é cansativo, irrita, desgasta, prejudica o desempenho. Não estamos mais na fase de ficar esperando um tempão a cada alternada de janela.
Com a grande capacidade das memórias RAM esse problema não representa mais lentidão na prática, mas ainda assim alguns dados são repassados para o HD dinamicamente, conforme o uso. Constantemente dados diversos dos programas menos utilizados vão e voltam do arquivo de paginação ou partição swap, que no fundo têm os mesmos objetivos.
É o preço que se paga por uma tecnologia de legado, digamos assim. Por que não eliminar essa lentidão, por menor que ela seja? É justamente este o foco desta dica.

Desative o swap e ganhe desempenho

Pelo que percebi, e várias outras pessoas também, em computadores com 8 GB de RAM ou mais vale a pena desativar totalmente o arquivo de paginação, desde que você não utilize programas pesados, como edição de vídeos ou manipulação de gráficos em alta resolução. Você conseguirá carregar muita coisa na RAM e o HD será usado para seu fim mais básico, que é o armazenamento dos dados – não para uso de constantes operações de leitura e escrita. Esta não é necessariamente a opção recomendada pelas produtoras dos sistemas operacionais, mas na prática parece valer a pena. Com muita RAM física a memória virtual pode utilizar somente ela, dispensando o uso desnecessário do disco mais lento.
Desativar o arquivo de paginação (ou partições swap) é extremamente recomendável para quem utiliza SSDs, os famigerados discos de estado sólido. Eles possuem maiores limitações na quantidade de ciclos de escrita, e a coisa só tem piorado nos últimos lançamentos do mercado.
Pela minha experiência pessoal, em todo tipo de atividade com o arquivo de paginação desativado o ganho de desempenho prático foi perceptível, embora seja difícil mensurá-lo. Inicialmente optei por desativá-lo num notebook com um SSD, para preservar os ciclos de gravação dele. Como o notebook tem 6 GB de RAM, nenhum efeito colateral foi sentido: até hoje o Windows não reclamou de falta de memória.
No computador, com 8 GB, fiz o mesmo. O sistema pode consumir alguns MB a mais do que se tivesse o arquivo de paginação, mas em geral o desempenho se mostrou melhor.
De quebra ainda ganho espaço em disco, o que novamente é algo valioso para os SSDs, dada sua relativa baixa capacidade de armazenamento. No meu caso mesmo, poupar 6 ou 8 GB num SSD de apenas 80 é algo vantajoso. Normalmente o arquivo de paginação do Windows tem quase o mesmo tamanho da capacidade de RAM instalada. Ele é o arquivo pagefile.sys, que normalmente fica na unidade C. Além de desativá-lo totalmente é possível configurá-lo para ficar em outro HD, ou ainda personalizar seu tamanho.

Como desativar o arquivo de paginação no Windows

No Windows, vá até as propriedades do item “Computador” ou “Meu computador”. Basta clicar com o botão direito e ir em Propriedades... No Windows 8 isto também funciona para o item “Computador” no Explorer. Também pode ser aberto pela barra de “charms” (levando o cursor para o canto direito da tela), em Configurações > Informações do PC.
Informações do PC
Para chegar à tela desejada nas novas versões do Windows é necessário clicar em Configurações avançadas do sistema, na barra esquerda:
Configurações avançadas do sistema
Ela nos remete à tela clássica das propriedades. Na guia Avançado, seção Desempenho, clique no botão Configurações.
Configurações avançadas do Windows

Na nova tela clique na outra guia Avançado, e depois em Alterar na seção Memória virtual:

Alterar memória virtual do Windows
Atualmente o Windows gerencia o arquivo automaticamente, cuidando do tamanho dele conforme as necessidades. Para removê-lo, desmarque o item “Gerenciar automaticamente...”, marque Sem arquivo de paginação, clique em Definir e depois no OK.
Desativando a memória virtual no Windows
É necessário clicar em Definir antes de clicar no OK, caso contrário esta última opção não será salva.
Ao clicar em Definir o Windows emitirá um aviso, informando que se o arquivo de paginação for menor que 200 MB e um erro de sistema ocorrer, ele não conseguirá gravar detalhes que poderiam ser úteis na identificação do problema.
Aviso do Windows ao desativar a memória virtual
Cabe a você decidir. Particularmente nunca tive problemas ao desativar este arquivo. Eventuais problemas de hardware que tive acabei descobrindo de outras formas, mas tanto no notebook como no PC atual nada grave aconteceu por ter ficado sem o arquivo de paginação.
Feito isso o Windows deverá ser reiniciado. Voltando àquela tela você verá que o tamanho total do arquivo de paginação ficou em 0 MB, e o arquivo pagefile.sys deve ter sumido da unidade C.
Fazendo isso o Windows consumirá mais memória RAM, é claro, já que não terá espaço no HD definido para uso como extensão da memória virtual. Em testes aqui numa máquina virtual com 2 GB, o Windows 8 consumiu cerca de 500 MB, em média, sem aplicativos de terceiros abertos:
Consumo de memória no Windows 8
Apesar de ser possível, não recomendo fazer isso com 2 GB em máquinas de uso efetivo, já que será necessário ter mais memória RAM para rodar aplicativos, muitas abas no navegador, vídeos, jogos, etc. Com 2 GB poderia valer a pena para o Windows 2000 ou talvez o XP.

E no Linux?

No Linux eu normalmente removo as partições swap, ou melhor, nem as crio na instalação, deixando o uso delas apenas para computadores mais antigos. Aparentemente há vantagens em usar a memória swap para otimizar o sistema, mas na prática percebi maior velocidade sem ela. O sistema não roda inteiramente na RAM (exceto algumas distros especializadas ou live), já que precisa ler os programas a partir do HD, mas pelo menos o conteúdo da memória dinâmica não consome ciclos de leitura e escrita do disco.
Se você já tem uma partição swap, utilize algum gerenciador de partições para desativá-la ou removê-la, como o gparted, por exemplo.
Desativá-la temporariamente pelo gparted é bem prático: clique nela com o direito e marque Swapoff. Para reativá-la, volte ao gparted, clique nela com o direito e marque Swapon.
Swapoff
Se você gostar do resultado e/ou precisar de mais espaço pode valer a pena remover a partição de swap, o que é útil ao usar SSDs de baixa capacidade para suas necessidades. Ainda considerando o gparted, para remover uma partição é bem simples: basta selecioná-la e exclui-la, com cuidado para não fazer isso com a partição de dados.
Excluir partição de swap
Se a opção de excluir não estiver disponível, clique nela com o direito e dê o Swapoff primeiro.
O tipo dela é bem claro: swap. Não há como se perder. Depois de removê-la clique em Aplicar, para gravar as alterações (revise antes para não apagar partições importantes).
Confirme no monitor de recursos (que varia de distro para distro) se o uso de swap foi realmente desativado:
Verificando se o swap foi desativado
Observe o "not available" (não disponível) no campo Swap
Isso também pode ser visto com o comando free, no terminal. Na coluna Total deverá ficar 0, referente à linha Swap (trecho destacado na imagem abaixo).
Swap desativado no Linux
O espaço livre pode ser atribuído a outra partição, ou você pode – em boa parte dos casos – redimensionar a partição principal para ocupar aquele espaço. Se não souber o que fazer, ignore-o ou formate-o em ext4 mesmo (ou outro sistema de arquivos de sua preferência), assim você terá uma partição menor mas evitará o desperdício.
Se você não tiver ideia do que está fazendo, prefira usar o swapon/swapoff mesmo, é mais seguro.
Uma outra alternativa: no terminal, rode (como root) swapoff -a para desativar, e swapon -a para ativar novamente.
Para ajudar a decidir se desativa ou não, observe o monitor de recursos: se no seu sistema for usada uma boa quantidade de memória swap mesmo tendo muita RAM livre, desativá-la pode ser uma boa. 

E no Mac OS X?

Se seu Mac ou Hackintosh tem uma quantidade generosa de memória, a mesma dica pode valer para ele também: desativar o arquivo de paginação reduzirá as atividades de leitura e escrita no disco.
Muita gente que testou teve kernel panic ao precisar utilizar mais memória, quando a memória física estava quase no limite. Aparentemente não é recomendável fazer isso nele, mas se quiser se aventurar, rode este comando numa janela do terminal:
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
Para reativar o comando é basicamente o mesmo, basta trocar o parâmetro unload por load:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
Algumas pessoas relatam que a reativação só pode ser feita no Single Mode (pressione e segure Command + S durante o boot), mas aqui aparentemente não precisou entrar nele.
Se quiser ter certeza de que o arquivo de swap não ocupará espaço no HD, basta removê-lo:
sudo rm /private/var/vm/swapfile*
Há um utilitário gráfico com diversos tweaks para o OS X que tem uma opção para desativar o swap: o Cocktail, que pode ser baixado em:
Desativar memória virtual no OS X
Vá em System > Memory e marque o item "Disable virtual memory swapping".
Independente da forma como você fizer, pode ser bom reiniciar para que a alteração tenha realmente efeito.

Quando esta dica não servirá para você

Se sua máquina tem menos de 8 GB de RAM, sinceramente não recomendo fazer isso de forma alguma. Se você rodar jogos pesados, tendo RAM suficiente você poderá observar um ganho de desempenho, já que o HD será bem menos acessado, ficando livre para carregar os objetos e texturas do jogo. Em contrapartida, se o jogo começar a consumir muita RAM a coisa pode ficar feia.
Não recomendo também caso você rode máquinas virtuais com frequencia, onde ter 8 GB de RAM física pode ser considerado pouco.
Quem usa constantemente o recurso de hibernação também pode verificar uma perda de desempenho na inicialização. Já recomendei bastante a hibernação quando usava um computador mais antigo: num Pentium II o Windows XP levava um minuto para iniciar e meros 12 segundos para voltar da hibernação. Hoje, com o Windows 8 iniciando em 3 segundos no SSD, não utilizo mais. Na verdade a inicialização do Windows 8 conta com a hibernação de alguns componentes do sistema, por isso é mais rápida, mas isso é um tema para outra hora, já bem detalhado pela própria Microsoft.
Se o sistema em que você trabalha é usado eventualmente em máquinas com menor quantidade de memória, também não. Digo isso porque costumo compartilhar HDs com Windows ou Linux entre PCs diferentes. No mundo Windows isso não é oficialmente suportado (*), mas em muitos casos funciona, especialmente em placas com chipsets similares. É útil também entre notebooks e PCs, já que os conectores dos HDs SATA são os mesmos. Nesse caso o sistema poderia ter problemas de falta de memória ao ser inciado num hardware inferior.
No Windows, pelo menos, nunca tive problemas graves com a remoção do swap. Quando usava apenas 4 GB com frequencia vinha um aviso de que era necessário fechar programas para liberar memória. É isso que vai acontecer quando começar a faltar espaço na RAM e o Windows não tiver para onde jogar os dados, já que o arquivo de paginação estaria desativado.
Considerando que os navegadores podem consumir facilmente centenas de MB durante a navegação em várias abas, especialmente com com sites de vídeos, algo comum hoje em dia, realmente não dá para recomendar a desativação da extensão da memória no HD em máquinas com meros 4 GB de RAM. Mas se quiser experimentar, fique à vontade, por sua conta e risco :)
Com 8 GB eu só vi aviso do Windows pedindo para fechar programas quando utilizei uma ramdisk para deixar arquivos de um jogo, que acabou consumindo um grande espaço na memória física – juntando a ramdisk com a memória para o executável, fora o sistema e os outros aplicativos abertos. Quem tem 16 ou 32 GB deve ficar bem tranquilo quanto a isso.
A medida é totalmente reversível, basta voltar na mesma tela de configurações e marcar novamente a opção de gerenciamento automático no caso do Windows, ou simplesmente criar uma nova partição e formatá-la como swap, no Linux. Vale a pena mesmo testar.
Concluindo... Tivemos aqui uma inversão de finalidades. Antes o HD era usado como extensão da memória RAM por ter mais espaço. Hoje a RAM faz o papel de HD super-ultra-rápido por ser mais veloz, por meio das ramdisks, algo plenamente viável para diversas atividades de entusiastas. Quem diria :P
Por fim, note que esta dica é algo que eu particularmente uso há um bom tempo e realmente recomendo, mas não posso garantir que será muito bom para todos. Para boa parte dos usuários a configuração padrão do sistema operacional é a melhor, ela simplesmente funciona sem que o usuário precise se preocupar com o limite da RAM física.
* No Windows 8 Enterprise há o Windows To Go, que permite instalar o sistema num pendrive, bootável em qualquer hardware minimamente suportado. O sistema detecta as configurações durante a inicialização, comportando-se de forma parecida com algumas distros Linux, que também podem ser instaladas em pendrives. Isso é independente do modo "live-usb", já que os programas e dados são mantidos, exatamente como se fosse num HD. Todavia, tive sucesso ao compartilhar o Windows 8 Pro instalado num HD interno entre alguns PCs e notebooks diferentes, bastando conectar o HD e iniciar a máquina... Nas versões anteriores do Windows era muito mais comum ter BSOD (a tela azul...) ao fazer isso.

Nenhum comentário:

Postar um comentário