Hdparm e opções de economia de energia

O hdparm é um utilitário de linha de comando que permite ajustar opções de desempenho e de gerenciamento de energia dos HDs. Um dos usos mais conhecidos para ele é ativar o uso do DMA do acesso de 32 bits para HDs e drives IDE, uma necessidade básica
para um bom desempenho.

Para checar o status atual do drive, logue-se como root e use o “hdparm -c -d”, seguido pelo dispositivo, como em:

# hdparm -c -d /dev/hda

Você receberá um relatório como o abaixo:

/dev/hda:
IO_support = 0 (default 16-bit)
using_dma = 0 (off)

Este é o pior caso possível. Veja que tanto o acesso de 32 bits quanto o DMA estão desativados. O DMA é um recurso básico, que faz com que o dispositivo possa transferir dados diretamente para a memória, sem passar pelo processador. Com o DMA
desativado, o processador é obrigado a ler cada bloco de dados e transferí-los uma a um para a memória, o que faz com que a taxa de transferência seja muito baixa (na faixa dos 3 a 4 MB/s) e a utilização de processamento fique nas alturas durante as
transferência.

Um exemplo comum são as “paradinhas” ao assistir DVDs, que acontecem quando o DMA do drive óptico está desativado. Como o processador tem que parar a decodificação do vídeo para ler mais dados a cada 20 ou 30 segundos, o vídeo acaba sendo exibido com
falhas.

O acesso de 32 bits não tem uma influência tão dramática sobre o desempenho, mas também tem um certo impacto, por permitir que a controladora leia mais dados de cada vez. Para ativar a dupla, basta usar o “hdparm -c1 -d1”, como em:

# hdparm -c1 -d1 /dev/hda

Aproveite para adicionar o comando no final do arquivo “/etc/rc.local”, para que ele seja executado a cada boot.

Na grande maioria dos casos, simplesmente ativar o DMA e modo de transferência de 32 bits já fazem com que o HD trabalhe de forma otimizada, pois o hdparm detecta as configurações suportadas pela controladora.

Mas, em alguns casos, você pode conseguir pequenos ganhos ajustando o modo Ultra DMA usado pelo HD. Neste caso, use os parâmetros “-X66” (UDMA 33), “-X68” (UDMA 66) ou “-X69” (UDMA 100), como em:

# hdparm -X69 /dev/hda

Esta opção deve ser usada apenas em conjunto com HDs IDE, nunca com os HDs serial ATA, que já operam nativamente a 150, 300 ou 600 MB/s.

Ao tentar forçar um modo de transferência não suportado pelo seu drive, você recebe uma mensagem de erro, como em:

# hdparm -X70 /dev/hda

/dev/hda:
setting xfermode to 70 (UltraDMA mode6)
HDIO_DRIVE_CMD(setxfermode) failed: Input/output error

Nestes casos, o padrão do hdparm é voltar à configuração anterior para evitar perda de dados. Mas, em alguns poucos casos, forçar um modo não suportado pode realmente corromper os dados do HD, por isso uso este recurso com cautela.

Você pode verificar os modos suportados pelo seu drive usando o comando “hdparm -i”, como em:

# hdparm -i /dev/hda

Os modos suportados aparecem na linha “UDMA Modes”, como em:

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

A principal observação é que isso é necessário apenas em dispositivos IDE. Ao tentar executá-lo em dispositivos SATA, você receberá uma mensagem de erro, avisando que os parâmetros não são suportados, como em:

# hdparm -c1 -d1 /dev/sda

/dev/sda:
setting 32-bit IO_support flag to 1
HDIO_SET_32BIT failed: Invalid argument
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Inappropriate ioctl for device

Isso acontece por que a ativação e desativação do DMA e do acesso de 32 bits são uma particularidade das interfaces IDE, configurações que surgiram por questões histórias, já que os recursos foram incluídos ao longo do desenvolvimento do padrão. No
caso do SATA, o uso do DMA é um recurso intrínseco do padrão, o que dispensa qualquer configuração.

De qualquer forma, se você achar que o desempenho do HD está abaixo do normal, você pode tirar a dúvida usando o “hdparm -t”, que faz um teste rápido de leitura, indicando a taxa obtida. Em HDs atuais, a taxa deve ficar acima dos 50 MB/s, com exceção
de alguns HDs de notebook:

# hdparm -t /dev/sda

/dev/sda:
Timing buffered disk reads: 190 MB in 3.01 seconds = 63.15 MB/sec

O segundo uso para o hdparm, este independente da interface usada pelo HD, é o ajuste das opções relativas ao gerenciamento de energia.

A principal configuração é o ajuste do tempo de espera ou seja, o tempo de inatividade que o sistema espera antes de colocar o HD em modo de economia de energia (spindown). Ele é ajustado através da opção “-S“, seguida por um número
que vai de 1 a 255.

Esta opção uma notação peculiar, onde os números de 1 a 240 indicam múltiplos de 5 segundos (1 para 5 segundos, 10 para 50 segundos e 240 para 20 minutos) e os números de 241 em diante indicam múltiplos de 30 minutos (242 indica uma hora, 244 duas
horas, e assim por diante). Para um tempo de espera de 10 minutos, por exemplo, use:

# hdparm -S 120 /dev/sdb

Essa opção é bastante útil se você tiver uma máquina com vários HDs instalados, onde apenas o HD principal é usado regularmente e os demais são usados para backup ou armazenamento de arquivos pouco usados.

Nesse caso, uma boa forma de garantir que os HDs fiquem desligados enquanto não são usados (economizando energia e evitando que eles se desgastem desnecessariamente) é fazer com que eles sejam desligados depois de 5 minutos, por exemplo. Nesse caso,
você precisaria apenas incluir linhas como esses no “/etc/rc.local”, especificando os tempos de espera para cada um dos HDs:

# Spindown dos HDs depois de 5 minutos de inatividade:
hdparm -S 60 /dev/sdb
hdparm -S 60 /dev/sdc
hdparm -S 60 /dev/sdd

A grande observação é que a opção “-S” é inefetiva quando usada no HD principal (onde o sistema está instalado), pois as atividades de escrita dos logs, leitura de arquivos e bibliotecas (que ocorrem sempre que qualquer programa precisa de uma função
adicional que ainda não está carregada) fazem com que o HD acabe nunca ficando tempo suficiente sem uso para ativar o spindown.

Forçar uma configuração agressiva (5 ou 10 segundos, por exemplo) acaba sendo contra-produtivo (e perigoso!) pois vai fazer simplesmente com que o HD fique constantemente acelerando e desacelerando, acabando por consumir mais energia que consumiria se
simplesmente ficasse o tempo todo girando.

Uma forma simples de reduzir o problema é adicionar a opção “relatime” entre as opções de montagem para as partições no “/etc/fstab”, como em:

/dev/sda1 / ext3 relatime,errors=remount-ro 0 1
/dev/sda5 / ext3 relatime,defaults 0 2

Ela reduz o uso das operações de atualização de data de acesso (que acabam fazendo com que o sistema precise realizar uma operação de escrita para atualizar a data de acesso sempre que lê cada arquivo), o que não apenas reduz bastante o volume de
operações de escrita, mas também melhora o desempenho.

Outra opção, um pouco mais agressiva, é a “noatime”, que desativa as atualizações completamente, resultando em um ganho adicional. Ela não é indicada para uso em servidores ou em estações de trabalho (já que você passa a não ter como saber quando cada
arquivo foi acessado pela última vez), mas pode ser usado para aumentar um pouco a autonomia das baterias em notebooks, por exemplo. Nesse caso, a entrada no fstab ficaria:

/dev/sda1 / ext3 noatime,errors=remount-ro 0 1

Outra dica é ativar o laptop-mode, que (entre outras coisas) atua sobre o cache de escrita do HD, reduzindo (quando possível) o número de escritas no HD ocasionadas pelos logs e outras funções. Ele ele pode ser instalado através do pacote
“laptop-mode-tools”, que está disponível em quase todas as distribuições, como em:

# apt-get install laptop-mode-tools

Com o pacote instalado, basta ativar o serviço:

# /etc/init.d/laptop-mode start

Voltando ao hdparm, a segunda opção é o “-B”, que ajusta o gerenciamento avançado de energia. Diferente do spindown, que faz o HD simplesmente estacionar as cabeças e parar de girar, o gerenciamento avançado controla fatores como a velocidade de
rotação, a tensão usada, o estacionamento das cabeças e outros fatores.

Devido ao problema de 2007, onde uma configuração agressiva adotada pelo Ubuntu e o Mandriva fazia com que os HDs em algumas máquinas ficassem acelerando e desacelerando constantemente (reduzindo a vida útil), a maioria das distribuições passou a usar
a opção “-B 254”, que reduz a atividade do gerenciamento a um mínimo. Você pode ganhar alguns minutos de autonomia usando a opção “-B 127”, que ainda é bem conservadora, mas já propicia uma certa economia:

# hdparm -B 127 /dev/sda

Como de praxe, é necessário adicionar o comando no arquivo “/etc/rc.local”, ou outro arquivo de configuração para que ele seja ativado durante o boot, já que as configurações do hdparm não são persistentes. Outra opção para salvar as opções é ir direto
na fonte e usar o arquivo “/etc/hdparm.conf” (“/etc/conf.d/hdparm” nas distribuições derivadas do Red Hat), que é lido pelo sistema no início do boot.

Uma opção menos conhecida, mas que é bastante útil em alguns HDs é o gerenciamento acústico que, quando suportado pelo HD, permite escolher entre um modo de funcionamento “silencioso”, onde o HD gira a uma velocidade mais baixa, produz menos barulho e
consome menos energia, ou um modo “barulhento”, onde ele simplesmente funciona com o melhor desempenho possível.

Esta opção é definida usando o parâmetro “-M”, seguido de um número entre 128 e 254, onde 128 é o modo silencioso e o 254 é o modo barulhento. Alguns HDs suportam números intermediários, que permitem escolher a melhor relação performance/barulho.

Para descobrir quais os valores suportados pelo seu dive, use o comando “hdparm -I” (i maiúsculo), como em:

# hdparm -I /dev/hda | grep acoustic

Recommended acoustic management value: 128, current value: 254

Para alterar a configuração, indique o valor desejado, como em:

# hdparm -M128 /dev/hda

Lembre-se de que apenas alguns HDs suportam efetivamente este recurso. Nos demais modelos, a configuração não altera nada.

Concluindo, o hdparm pode ser usado também para limitar a velocidade do CD-ROM, o que pode ser útil em drives muito barulhentos, ou em notebooks, onde você queira economizar energia. Para isso, use o parâmetro “-B”, seguido da velocidade e o drive,
como em:

# hdparm -E 8 /dev/hdc

Pesquisando na web, você verá muitas referências afirmando que o hdparm é destinado a ser usado apenas em HDs IDE e que por isso não é aplicável a HDs SATA. Isso era verdade na época em que o SATA era uma novidade e o hdparm ainda não havia sido
atualizado para trabalhar com eles mas, como vimos, atualmente ele suporta algumas funções.

Outro utilitário similar é o “blktool”, disponível em muitas distribuições através do pacote de mesmo nome. Entretanto, ele é pouco usado e deixou de ser desenvolvido ativamente em 2007.

Ver Mais

Esta postagem foi modificada pela última vez em 21/03/2011 19:44

Postagem relacionada