Gentoo Logo

Aviso : A versão original deste artigo foi publicada primeiro na IBM developerWorks, e é propriedade da Westtech Information Services. Este documento é uma versão atualizada do artigo original e contém várias melhorias feitas pelo time de documentação do Gentoo Linux.
Este documento não é mantido ativamente.


Tirando o máximo do swap

1.  Tirando o máximo do swap

Quando você configurou um novo servidor Linux, você cria uma única partição de swap de 128 MB? Se sim, você sabia que está limitando a performance de swap severamente? Você gostaria de aumentar a performance de swap em várias ordens de magnitude, e criar partições de swap maiores que 1 GB? É possível, sem precisar de patches de kernel ou hardware especial, apenas conhecimento geek!

Alguns de vocês podem não se importar com swap. Afinal de contas, sistemas Linux são tipicamente muito eficientes com relação à memória, e o swap quase nunca é tocado. Embora isto seja verdade em sistemas de desktop, servidores são outra história. Porque servidores podem lidar com cargas inesperadas, como processos em fuga, ataques de denial of service, ou mesmo o efeito Slashdot, eles não têm o swap de alta velocidade para não pararem e possivelmente entram em pane quando toda memória física (e mais um pouco) é exaurida.

Ainda não convencido da importância? Eu vou mostrar como é fácil derrubar um servidor lançando uma quantidade massiva de novos processos.

Aviso: Por favor, se você fizer isso, só faça em um servidor fora de produção que você realmente administra!

Vamos dizer que você tem dois comandos grep personalizados em /usr/bin, chamados bobgrep e jimgrep. Agora, vamos presumir que bobgrep é um simples script de shell que chama o executável ELF jimgrep, como a seguir:

Listagem de código 1.1: O script bobgrep

#!/bin/bash
jimgrep -r $*

Tudo bem até agora, mas o que acontece se o jimgrep é acidentamente substituído com um link simbólico para bobgrep? Bem, neste caso, rodar bobgrep ou jimgrep causará um loop infinito, fazendo com que centenas de processos bash sejam lançados em meros segundos. Isto já aconteceu comigo uma vez, e acredite, deu trabalho!

Se um servidor não tem swap adequado, uma situação como esta pode fazer com que a máquina trave em muito menos que um minuto. Como consertamos o problema? Um jeito é aumentar o tamanho de swap além de 128 MB. Felizmente para nós, não há limite de swap de 128 MB em kernéis de Linux 2.2.x+ e mais novos, como havia no passado. Os limites atuais são aproximadamente 2 GB para sistemas x86, PowerPC, e MC680x0, 512 MB para sistemas MIPS, 128 GB para Alpha, e impressionantes 3 terabytes em plataformas UltraSparc!

Listagem de código 1.2: Limites de partição de swap em kernéis modernos de Linux

x86                 2 Gigabytes
PowerPC             2 Gigabytes
Motorola 680x0      2 Gigabytes
Sparc               1 Gigabyte
MIPS                512 Megabytes
Alpha               128 Gigabytes
UltraSparc          3 Terabytes

Embora seja interessante poder aumentar o tamanho de swap além de 128 MB, como aumentar sua performance? Idealmente, seria bom se pudéssemos configurar partições de swap em uma stripe de RAID 0, para que leituras e escritas fossem igualmente balanceadas entre as partições. Se estas partições estão em drives separados e/ou controles, isto irá multiplicar a performance de swap, permitindo que seus servidores lidem com "picos" de uso de memória temporários, sem serem atingidos dramaticamente.

De maneira impressionante, todos kernéis modernos do Linux, por padrão (sem opções especiais de kernel ou patches) permitem que você faça swap paralelo, como numa stripe de RAID 0. Ao usar a opção pri no /etc/fstab para configurar múltiplas partições de swap com a mesma prioridade, nós dizemos para o Linux usá-las em paralelo:

Listagem de código 1.3: Configure múltiplas partições de swap com a mesma prioridade

/dev/sda2       none    swap    sw,pri=3        0       0
/dev/sdb2       none    swap    sw,pri=3        0       0
/dev/sdc2       none    swap    sw,pri=3        0       0
/dev/sdd2       none    swap    sw,pri=1        0       0

No exemplo acima, o Linux irá usar as partições de swap sda2, sdb2, e sdc2 em paralelo. Já que estas partições estão em drives diferentes, e possivelmente até controladores SCSI diferentes, o processamento de leitura e escrita irá quase triplicar. A quarta partição, sdd2, só será usada depois das três primeiras serem exauridas.

A opção pri é realmente fácil de usar. A prioridade deve ser um número entre 0 e 32767, com 32767 sendo a maior prioridade. As partições de swap serão usadas da maior prioridade para a menor prioridade, o que significa que uma partição com uma prioridade de x só será usada se todas as partições com uma prioridade maior que x já estiverem cheias. Se várias partições tiverem a mesma prioridade, o Linux irá automaticamente paralelizar o acesso entre elas. Isto permite que você não só paralelize o swap, mas também priorize acesso para que as partições nos drives mais rápidos (ou regiões dos drives) sejam usadas primeiro. Assim, você pode configurar uma partição de swap de emergência em um disco mais antigo e lento, que só será usado se todo swap de alta velocidade for exaurido primeiro.

Agora está na hora de pôr este conhecimento de swap em ação. Para citar o Sr. Miyagi do Karate Kid: "Swap on, swap off, geek-san!"

Recursos

  • Em Partitioning in action: Moving /home, ensino o passo-a-passo de como mudar /home para uma nova partição.
  • Em Partitioning in action, eu mostro passo-a-passo como mudar /var e /tmp para uma nova partição.
  • Em minha segunda dica, Partition planning tips, eu mostro várias maneiras de organizar seu arranjo de partições eficientemente.
  • O Linux system administrator's guide espelhado na home page da Red Hat.
  • Para mais informações sobre a otimização da performance de sistemas de arquivos, veja o Linux Software RAID HOWTO de Linas Vepstas. Já que a maior parte do código de RAID recente foi adicionado à série 2.3 de kernéis, é uma opção viável para melhorar ainda mais a performance de disco do Linux.

Sobre o autor

Daniel Robbins mora em Albuquerque, New Mexico. Ele foi o Presidente/CEO da Gentoo Technologies Inc., o chefe-arquiteto do Projeto do Gentoo e é um autor contribuinte de vários livros publicados pela MacMillan: Caldera OpenLinux Unleashed, SuSE Linux Unleashed, e Samba Unleashed. Daniel está envolvido com computadores da mesma maneira desde a segunda série quando ele viu pela primeira vez a linguagem de programação Logo e uma dose potencialmente letal de Pac Man. Isto provavelmente explica porque ele já foi um artista-gráfico chefe na SONY Electronic Publishing/Psygnosis. Daniel gosta de passar o tempo com sua esposa Mary e sua nova filha neném, Hadassah. Você pode entrar em contato com Daniel em Daniel Robbins (em inglês).



Imprimir

Atualizado 9 de outubro de 2005

Resumo: Aprenda como melhorar sua performance de swap em seu servidor de Linux em várias ordens de magnitude. O autor Daniel Robbins mostra os passos desta rápida disca sobre como tirar o máximo de seu servidor.

Daniel Robbins
Autor

Marcelo Góes
Tradutor

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.