quinta-feira, 28 de fevereiro de 2013

Otimizações práticas ao Ubuntu 12.04 com um disco SSD

Neste tópico apresento algumas modificações extremamente importantes para quem tem o Ubuntu instalado num disco SSD.

Este tópico advém do facto de eu ter comprado esta semana um disco SSD para substituir o meu HD. Depois de instalar o Ubuntu, comparando o arranque ele ficou cerca de 6 vezes mais rápido, aliás, o Plymouth praticamente não é visível (assim que desaparece o Grub, o mouse está logo à vista, o que significa que se está no lightDM):rox: 

Relativamente às diferenças de performance, tal como podem ver pelas imagens deste tópico, são consideráveis em termos de leitura e escrita. Apesar de voltar a mostrar estas imagens, desde já apresento estas duas que mostram as diferenças em termos de leitura no disco, o que é das coisas mais importantes pois está intrinsecamente ligado ao arranque do Ubuntu e das suas aplicações.


Samsung 128GB SSD830

HD 320GB 5400 RPM SATA

Apesar deste tópico ser algo importante para quem utiliza um disco SSD, ele requer alguns níveis de conhecimento avançado em Ubuntu. Por causa disso não criei um artigo no Blog Ubuntued para evitar ter de explicar tudo ao pormenor. Este tópico está feito de forma bastante informal, abstraindo algumas informações que poderão ser encontradas nas referências do tópico. Se você pode usar estas recomendações? Sim, em praticamente qualquer disco SSD atual pode executar sem qualquer medo todas estas recomendações.

Optimizações feitas ao disco SSD



Como é sabido o comportamento dos discos SSD é consideravelmente diferentes dos discos normais, os HDs. A diferência óbvia está no facto do primeiro ser memória flash e no segundo utilizar discos e agulhas que necessitam de se movimentar, trazendo portanto latências consideráveis que depois se sentem ao nível da performance.

Esse funcionamento dos discos, exige certas definições de controlo e garantia de escrita com boas performances e por isso os sistemas como Ubuntu trazem certas definições pre-definidas com esse intuito. Um outro aspeto, que atualmente começa a perder relevância devido aos avanços tecnológicos está no facto dos discos SSD terem um vida mais curta em termos de número de escritas. Novamente atualmente não é um aspeto relevante, no entanto podemos sempre ter algum cuidado neste ponto para ter a certeza que tudo funciona nos conformes.

Backup, backup e backup!



Fazer backups, em português cópias de segurança, é sempre algo prioritário que se vai alterar opções importantes do sistema. Através dos backups temos a certeza que podemos facilmente voltar às opções originais, por isso esta é sem dúvida uma das partes mais importantes de tópico.

Como as modificações mais importantes são no ficheiro que controla as partições, basicamente o backup é apenas relativo a esse ficheiro. Para o fazer, basta executar o comando seguinte que irá criar um ficheiro exatamente igual, mas com um nome diferente, a dizer backup:
sudo cp /etc/fstab /etc/fstab.backup


Desligue o controlo de atividade



Por padrão o Ubuntu grava a atividade que realizamos no disco. Apesar de as primitivas funcionarem de forma natural com o hardware, obviamente que traz sempre um atraso na performance. Este tipo de funcionamento é importante para servidores para controlar a atividade, mas é praticamente inútil para desktops.

Para se saber mais sobre este aspeto convido a ler este conteúdo em inglês:
SPOILER: 


O facto de desligar então esta opção (na verdade são duas, e pelo que se diz na internet uma delas implica a outra, mas por via das dúvidas utilizo as duas ao mesmo tempo) faz com que não só a performance aumente um pouco a performance(ver primeira referência no fundo deste tópico) como também reduz a quantidade de escritas no disco, aumentando assim o tempo de vida do disco.

Para desligar então esta funcionalidade basicamente deve-se incluir duas flags no ficheiro fstab, chamadasnoatime e nodiratime. Esta inclusão deve ficar encostada (sem espaços) às opções que originalmente estavam definidas, separadas com virgulas. Assim, abra o ficheiro fstab com o gedit com o seguinte comando:
sudo gedit /etc/fstab

Será então aberta uma janela semelhante à da imagem acima à direita e você deverá então incluir as duas flags nas partições que são do tipo Ext4. Para se perceber as diferenças entre o início e o fim, transcrevi o ficheiro completo do antes e depois.
  • Antes:
CÓDIGO: SELECIONAR TODOS
proc            /proc           proc    nodev,noexec,nosuid 0       0# / was on /dev/sda1 during installationUUID=30a760a2-5956-4aa7-9124-54e6307dc353 /        ext4    errors=remount-ro 0       1# /home was on /dev/sda3 during installationUUID=0238513e-6e12-43fa-bb40-3e3a2fac1588 /home    ext4    defaults        0       2# swap was on /dev/sda2 during installationUUID=dea4ad21-8e31-48d4-95dd-fd46cd7602fe none     swap    sw              0       0

  • Depois:
CÓDIGO: SELECIONAR TODOS
proc            /proc           proc    nodev,noexec,nosuid 0       0# / was on /dev/sda1 during installationUUID=30a760a2-5956-4aa7-9124-54e6307dc353 /        ext4    discard,noatime,nodiratime,errors=remount-ro 0       1# /home was on /dev/sda3 during installationUUID=0238513e-6e12-43fa-bb40-3e3a2fac1588 /home    ext4    discard,noatime,nodiratime,defaults        0       2# swap was on /dev/sda2 during installationUUID=dea4ad21-8e31-48d4-95dd-fd46cd7602fe none     swap    sw              0       0


Ative o TRIM!



Se você estava atento, provavelmente reparou que este antes e depois apresentado acima, tem não só as duas flags referidas mas também uma terceira chamada "discard". Esta flag ativa a função TRIM. Basicamente ela descarta blocos não utilizados no disco de forma ativa. Isto é bastante útil para melhorar a performance dos discos Flash.

Para evitar ter de repetir algo ao qual nem sou especialista, aqui fica em inglês o que faz esta função:
Wikipedia -TRIM escreveu:In computing, a TRIM command allows an operating system to inform a solid-state drive (SSD) which blocks of data are no longer considered in use and can be wiped internally. While TRIM is frequently spelled in capital letters, it is a command name, not an acronym.


Para usar então esta função que é outra recomendação, basicamente apenas é preciso incluir a referida flag "discard" nas partições ext4.

Escalonador I/O



Os sistemas operativos dos nossos computadores são altamente complexos devido ao facto de permitirem trabalhar com várias aplicações ao mesmo tempo. Uma vez que podem estar várias aplicações a escrever no disco, os sistemas operativos necessitam de um escalonador de input/outputs (de escrita e leitura) para controlar a ordem à qual as aplicações têm acesso ao disco.

O escalonador do Ubuntu está configurado principalmente para HDs, em que tem o referido funcionamento por agulhas. Esse funcionamento, através do cfq, está de certa forma otimizado para isso. No caso dos discos SSD, esse funcionamento é diferente e pode-se estar a perder performance com essa escalabilidade.

O recomendável para SSDs é utilizar o deadline. Com este escalonador, consegue-se sentir diferenças consideráveis quando se está a copiar um ficheiro de tamanho grande que muitas vezes bloqueia o sistema enquanto o procedimento está a decorrer, em que isso irá deixar de ocorrer. Há outras razões para a utilização deste escalonador e até para fazer alguns testes. Aqui não irei abordar isso, mas você pode saber mais lendo a segunda referência incluída no fundo deste tópico.

Para definir então o deadline como escalonador de escritas e leituras no disco, abra o ficheiro que permite definir opções no arranque do Ubuntu através do seguinte comando:
sudo gedit /etc/rc.local

Depois simplesmente adicione o seguinte conteúdo antes do "Exit 0" (tal como pode ver pela imagem acima à direita):
CÓDIGO: SELECIONAR TODOS
# SSD performance tuningecho deadline > /sys/block/sda/queue/scheduler
echo 1 
> /sys/block/sda/queue/iosched/fifo_batch


Resultados destas modificações



Os resultados destas modificações não são algo extraordinário, mas são relevantes em dois aspetos: a performance é melhor e ao fim do dia o acomular dessa diferença sente-se; com estas modificações há uma maior garantia de aumento de vida do disco.

Em termos de diferenças de leitura de dados, tal como se pode ver pelas imagens abaixo houve uma diferença geral de 1MB por segundo: 

Relativamente à escrita de dados, como já tenho o Ubuntu instalado no disco, não pude realizar testes com este utilitário que o Ubuntu traz de origem para analisar a performance dos discos. No entanto, executando o comando seguinte que cria um ficheiro de 800MB, consegui chegar à conclusão que efetivamente existe uma diferença considerável, de cerca de 50Mb por segundo ou talvez até mais (aqui era necessário executar várias vezes para ter uma maior certeza):
dd if=/dev/zero of=/tmp/output bs=80k count=10k; rm -f /tmp/output



Outras otimizações importantes



Entretanto, e porque me esqueci de um ponto muito interessante, para quem quer poupar o seu disco SSD, convém também desligar o ZeitGeist. O Zeitgeist é um processo que está funcionar continuamente no nosso Ubuntu gravando constantemente toda a nossa atividade.

Este funcionamento implica escritas sucessivas no disco, algo que poderá diminuir um pouco a vida útil do disco SSD. Assim, eu também desliguei o ZeitGeist através do artigo seguinte:

Como nota de otimizações (mas agora não relacionadas diretamente com o disco SSD), também realizei as seguintes otimizações:

Referências:










http://forum.ubuntued.info/viewtopic.php?f=24&t=2483
Acesso em 28 de Fevereiro de 2013 às 11:15:hs.

Nenhum comentário:

Postar um comentário