A maioria dos sistemas Linux que eu gerencio possui controladores RAID de hardware (principalmente o HP Smart Array ). Todos eles estão executando o RHEL ou o CentOS.
Estou procurando por ajustes do mundo real para ajudar a otimizar o desempenho de configurações que incorporam controladores RAID de hardware com discos SAS (Smart Array, Perc, LSI etc.) e cache com bateria ou com flash. Suponha RAID 1 + 0 e vários eixos (4 ou mais discos).
Eu gasto bastante tempo ajustando as configurações de rede Linux para aplicativos de negociação financeira e de baixa latência. Mas muitas dessas opções estão bem documentadas (alterando os buffers de envio / recebimento, modificando as configurações da janela TCP, etc.). O que os engenheiros estão fazendo no lado do armazenamento?
Historicamente, fiz alterações no elevador de agendamento de E / S , optando recentemente pelos agendadores deadline
e noop
para melhorar o desempenho em meus aplicativos. À medida que as versões RHEL progrediram, também observei que os padrões compilados dos dispositivos de bloco SCSI e CCISS também foram alterados. Isso teve um impacto nas configurações recomendadas do subsistema de armazenamento ao longo do tempo. No entanto, já faz um tempo desde que eu vi recomendações claras. E eu sei que os padrões do SO não são ideais. Por exemplo, parece que o buffer de leitura antecipada padrão de 128kb é extremamente pequeno para uma implantação em hardware de classe de servidor.
Os artigos a seguir exploram o impacto no desempenho da alteração dos valores de cache de leitura antecipada e nr_requests nas filas de blocos.
http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning
http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with -linux-why-tuning-really-important
http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html
Por exemplo, são sugeridas alterações para um controlador HP Smart Array RAID:
echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler
blockdev --setra 65536 /dev/cciss/c0d0
echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests
echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb
O que mais pode ser ajustado com confiabilidade para melhorar o desempenho do armazenamento?
Estou procurando especificamente pelas opções sysctl e sysfs nos cenários de produção.
Mais do que tudo, tudo depende da sua carga de trabalho.
read_ahead_kb
pode ajudá-lo se for realmente útil ler muitos dados de algum arquivo com antecedência, como ao transmitir vídeo. Às vezes isso pode te machucar muito. Sim, os 128 KB padrão podem parecer pequenos, mas com simultaneidade suficiente começam a parecer grandes! Por outro lado, com um servidor como um servidor de codificação de vídeo que apenas converte os vídeos de um formato para outro, pode ser uma boa ideia ajustar.nr_requests
, quando atenuado, pode facilmente inundar seu controlador RAID, o que prejudica novamente o desempenho.No mundo real, você precisa observar as latências . Se você está conectado à SAN, dê uma olhada com
iostat
,sar
ou o que você gostaria de usar, e veja se os tempos pedido I / O de serviços são através do telhado. É claro que isso também ajuda com os discos locais: se as latências forem muito grandes, considere ajustar as configurações do elevador de E / S fazendo o downgrade de max_requests e outras configurações.fonte
FYI
read_ahead_kb
eblockdev --setra
são apenas maneiras diferentes de definir a mesma configuração usando unidades diferentes (kB x setores):Então o
no seu exemplo não tem efeito.
fonte