Melhoria de performance

Particionamento

Para um melhor desempenho, os dados que são solicitados constantemente deverão ser armazenados em uma partição no inicio do disco rígido. Esta área é a mais rápida e checa a ser 60% mais rápida que o final do HD (em alguns modelos). Em especial, a partição de boot, swap e binários do sistema poderão ser armazenados nesta partição para aumentar a velocidade da carga de programas e não prejudicar a performance do sistema quando o uso da partição de troca (swap) for necessária.

Em discos rígidos grandes (6GB ou maiores) é recomendável criar no mínimo uma partição pequena para /boot, outra para /, outra para swap e outra para /usr. Ficando distribuídas da seguinte maneira no disco rígido:

BBRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUU

B - /boot
R - Raíz /
S - Swap
U - /usr

Mas a swap não ficaria ainda mais rápida sendo a primeira partição no disco? Sim e não: Realmente fica rápida (na teoria conforme explicado acima), mas levando em consideração que o deslocamento das cabeças de leitura/gravação do disco rígido leva certo tempo, é mais vantajoso mantê-la entre as 2 partições mais acessadas, isto diminui o tempo de acesso caso um programa esteja fazendo uso constante de / ou /usr e precisar trocar dados na partição swap.

Além do mais, a partição / geralmente é pequena (no máximo 800M) deixando a swap em uma área muito próxima do inicio do disco rígido. Com base nisto, você poderá ter uma melhor visão técnica para a construção de suas partições dependendo da função do sistema.

Spindles

Em sistemas que utilizam um disco rígido dedicado para fazer swap, a ligação deste em uma placa controladora independente aumentará bastante a performance do sistema, pois enquanto o disco principal ligado em sua controladora estiver fazendo uma operação de leitura, o outro poderá estar fazendo sua operação de swap simultaneamente. O mesmo não acontece quando dois discos rígidos IDE estão ligados no mesmo cabo (isto não acontece no SCSI).

Fazendo ajustes finos de performance do disco

O hdparm é um programa que permite modificar características diversas da unidade de disco rígido e de CD como modo de transferência de dados, leitura adiante, dma, cache, leitura simultânea de setores, hibernação, etc.

Por padrão as transferências de dados entre a controladora do HD (a plaquinha que fica embaixo dele) e a controladora de periféricos é feita em 16 bits. Para exibir a configuração atual do disco rígido /dev/hda (por exemplo), digite o seguinte comando: hdparm /dev/hda

/dev/hdb:
 multcount    =  0 (off)
 I/O support  =  0 (16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  1 (off)
 keepsettings =  0 (off)
 nowerr       =  0 (off)
 readonly     =  0 (off)
 readahead    =  8 (on)

Imediatamente podemos modificar os seguintes campos para melhorar sensivelmente o desempenho do disco rígido:

multcount

Pode ser modificada com -m[num] e especifica o número máximo de setores que serão acessados de uma só vez na operação de leitura da unidade. O valor máximo recomendado é igual a capacidade máxima suportada pelo seu disco rígido, que pode ser obtida com o comando: hdparm -i /dev/hda

 Model=TS6324A2, FwRev=.340    , SerialNo=A99B99JA
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=13228/15/63, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=256kB, MaxMultSect=16, MultSect=16
 CurCHS=13228/15/63, CurSects=12500460, LBA=yes, LBAsects=12500460
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes: pio0 pio1 pio2 pio3 pio4 
 DMA modes: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4 udma5

O campo MaxMultSect=16 indica o valor de 16 como máximo suportado em uma única operação pela unidade. Valores maiores poderão ser especificados mas não trarão ganho de performance. Para discos rígidos Western Digital é recomendável deixar este valor como 0, porque eles possuem um mecanismo embutido para leitura de setores. Para experimentar valores fora dos padrões, coloque seu sistema de arquivos como somente leitura para não perder dados caso algo saia errado.

Note que o comando hdparm -i mostra alguns detalhes interessantes sobre a configuração do disco rígido e modos de operação suportados.

I/O support

Modificado com -c[num]. O número especificado pode ser 0 para transferência de dados em 16 bits, 1 para 32 bits e 3 para 32 bits com uma seqüencia especial de sincronismo (alguns chips requerem esta ao invés da 1).

using_dma

Modificado com -d[num]. Habilita ou não o uso de DMA para a transferência de dados do HD, ativando o controle de algumas operações pelo chipset livrando a CPU para processamento. 0 desativa DMA e 1 ativa. Note que nem todos os chipsets aceitam esta operação. Esta usada em conjunto com a opção -X oferece um excelente ganho de performance pelo uso correto de sua controladora.

A ativação de dma também pode ser feita automaticamente na recompilação do kernel ou especificando o parâmetro ideX=dma (X é o número da controladora IDE) na linha de comando de boot: ou no arquivo /etc/lilo.conf.

xfermode

Modificado pela opção -X[num]. Permite selecionar o melhor modo de transferência de dados do seu disco rígido, é nesta parte onde você seleciona o modo UltraDMA para transferência de dados, caso seu HD/CD-ROM suporte. Os seguintes valores são válidos:

32 - PIO Mode 0
33 - PIO Mode 1
34 - PIO Mode 2
35 - PIO Mode 3
36 - PIO Mode 4
64 - Ultra DMA Mode 0
65 - Ultra DMA Mode 1
66 - Ultra DMA Mode 2
67 - Ultra DMA Mode 3
68 - Ultra DMA Mode 4
69 - Ultra DMA Mode 5
70 - Ultra DMA Mode 6

Para descobrir os modos PIO e UltraDMA do seu HD, utilize o comando hdparm -I /dev/hd?. NÃO UTILIZE UM MODO PIO/ULTRA DMA NÃO SUPORTADO PELA SUA CONTROLADORA. CASO SUA PLACA CONTROLADORA DO HD SUPORTE UM MODO ALTO PIO/ULTRADMA MAS SUA CONTROLADORA IDE NÃO SUPORTA, VOCÊ DEVERÁ UTILIZAR O VALOR MAIS ADEQUADO PARA AMBAS. FAÇA TESTES SEMPRE QUE ALTERAR O MODO DE FUNCIONAMENTO E ESTEJA ATENTO A MENSAGENS DE ERROS PARA QUE NÃO TENHA PERDA DE DADOS!!!

unmaskirq

Modificado com -u[num]. Habilita ou não o controlador de disco mascarar as interrupções de processador durante o processamento das interrupções de disco. 0 desativa esta função e 1 ativa. Use esta opção com cuidado e sob seu próprio risco: algumas placas controladores de HD e controladoras de periféricos não trabalham bem com a taxa de transferência aumentada, podem ocorrer perda de dados. Coloque o sistema de arquivos como somente leitura antes de testar esta característica.

readonly

Modificado com -r[num]. Coloca o disco em modo somente leitura. A montagem da partição com a opção ro no /etc/fstab é preferida.

readahead

Modificado com -a[num]. Configura o número de blocos que serão lidos antecipadamente no sistema de arquivos (por padrão é usado 8 blocos - 4 Kb). Este número poderá ser modificado para se adequar a utilização do computador. Em sistemas com muita procura de arquivos pequenos (servidores web), um valor pequeno (como o padrão) é recomendável. Se a máquina é um servidor de arquivos dedicado, um valor maior trará maiores benefícios.

Veja mais detalhes sobre o comando hdparm em sua página de manual. Depois de selecionado o melhor valor de performance, você deverá salvar em um arquivo que será lido na inicialização para ativação destes valores. Para fazer teste de performance de leitura bruta utilize o comando hdparm -t /dev/hd?, para fazer testes com o uso de cache, use o comando hdparm -T /dev/hd?.

OBS: Se o Linux resetar o disco rígido, a maioria das configurações retornarão ao seu valor padrão. Isto ocorre devido a opções mau utilizadas no hdparm, não suportadas pelo disco rígido ou por problemas no HD/controladora.

Exemplos:

# Ajusta o número de setores simultâneos para 16 e o modo de transferência para 
# 32 bits no disco rígido /dev/hda
hdparm -c1 -m16 /dev/hda

# Programa a leitura adiante do HD para 64 blocos (32Kb), o modo de transferência 
# para 32 bits, usar DMA, e 16 setores simultâneos.
hdparm -c1 -d1 -m16 -a64 /dev/hda

#Mostra os valores de configuração atuais do disco rígido
hdparm /dev/hda

Data de acesso a arquivos/diretórios

Toda vez que acessamos um arquivo ou diretório da máquina Linux a data/hora é atualizada. Em máquinas normais isto é OK mas em servidores onde o acesso a arquivos é constante (como no diretório /var/spool em servidores de e-mail ou /usr/ em servidores diskless) é recomendável desativar esta característica. Isto reduzirá a quantidade de buscas das cabeças do disco rígido para a atualização deste atributo e conseqüentemente aumentará a performance na gravação de arquivos (o disco rígido usa o sistema mecânico para ler/gravar dados, muito mais lento que a memória RAM eletrônica).

chattr -R +A /var/spool

O atributo +A desativa a gravação da "data de acesso" dos arquivos e sub-diretórios dentro de /var/spool. Para desativar a atualização da "data de acesso" para toda a partição, você pode incluir a opção de montagem noatime no seu /etc/fstab:

/dev/hda1     /var/spool    ext2   defaults,noatime   0   1

OBS: O Linux utiliza três atributos de data para controle de arquivos:

  • atime - Data/Hora de acesso: é atualizado toda vez que o arquivo é lido ou executado.

  • mtime - Data/Hora da modificação, atualizado sempre que alguma modificação ocorre no arquivo ou no conteúdo do diretório. Esta é mais interessante que a ctime principalmente quando temos hardlinks.

  • ctime - Data/Hora da última modificação do inodo do arquivo.

Em partições onde a gravação é freqüente (como na própria /var/spool) a desativação do atributo atime além de melhorar o desempenho do disco, não fará muita falta.