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).
|