Estou com um problema de taxa de transferência máxima aqui e preciso de alguns conselhos sobre como ajustar meus botões. Estamos executando um servidor de arquivos de 10 Gbit para distribuição de backup. É uma configuração S-ATA2 de dois discos em um controlador LSI MegaRAID. O servidor também tem 24gig de memória.
Precisamos espelhar nosso último backup carregado com a taxa de transferência máxima.
O RAID0 para nossos backups "quentes" fornece cerca de 260 MB / s de gravação e 275 MB / s de leitura. Um tmpfs testado com tamanho de 20 GB nos fornece cerca de 1 GB / s. Esse tipo de taxa de transferência é o que precisamos.
Agora, como posso ajustar o subsistema de memória virtual do Linux para armazenar em cache os últimos arquivos carregados pelo maior tempo possível na memória sem gravá-los no disco (ou melhor ainda: gravar no disco E mantê-los na memória)?
Eu configurei os seguintes sysctls, mas eles não nos fornecem a taxa de transferência esperada:
# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000
Em teoria, isso deve nos dar 16 GB para armazenar E / S em cache e aguardar alguns minutos até que seja gravado no disco. Ainda assim, quando comparo o servidor com o benchmark, não vejo efeito na gravação, a taxa de transferência não aumenta.
Ajuda ou conselhos necessários.
Respostas:
Pela análise das variáveis que você definiu, parece que você está mais preocupado com o desempenho de gravação e não se importa com possíveis perdas de dados devido a falta de energia.
Você só terá a opção de gravações lentas e o uso de um cache de write-back com operações de gravação assíncronas. As operações de gravação síncrona exigem confirmação no disco e nunca seriam gravadas com preguiça. Seu sistema de arquivos pode estar causando frequentes descargas de página e gravações síncronas (geralmente devido ao registro no diário, especialmente com ext3 no modo data = journal). Além disso, mesmo as descargas de página "em segundo plano" interferirão nas leituras não armazenadas em cache e nas gravações síncronas , diminuindo a velocidade.
Em geral, você deve tomar algumas métricas para ver o que está acontecendo - você vê seu processo de cópia colocado no estado "D" esperando que o trabalho de E / S seja feito pelo pdflush? Você vê atividade de gravação síncrona pesada em seus discos?
Se tudo mais falhar, você pode optar por configurar um sistema de arquivos tmpfs explícito no qual copia seus backups e apenas sincroniza os dados com seus discos após o fato - mesmo usando automaticamente inotify
Para o cache de leitura, as coisas são significativamente mais simples - existem os fcoretools
fadvise
utilitário que possui o--willneed
parâmetro para aconselhar o kernel a carregar o conteúdo do arquivo no cache do buffer.Editar:
Isso não teria influenciado muito seu cenário de teste, mas há um equívoco na sua compreensão. O parâmetro dirty_ratio não é uma porcentagem da memória total do sistema, mas da memória do sistema memória livre .
Há um artigo sobre o ajuste de cargas de gravação pesada com informações mais detalhadas.
fonte
Ou apenas obtenha mais discos ... A configuração da matriz de unidades que você possui não suporta o tempo todo necessário. É um caso em que a solução deve ser reestruturada para atender às suas reais necessidades. Eu entendo que isso é apenas backup, mas faz sentido evitar uma correção kludgy.
fonte
O uso do cache de memória pode implicar na perda de dados, como se algo desse errado, os dados que estão na memória e não são salvos em discos serão perdidos.
Dito isto, há ajustes a serem feitos no nível do sistema de arquivos.
Por exemplo, se você estivesse usando o ext4, poderia tentar a opção de montagem:
barreira = 0
That: "desabilita o uso de barreiras de gravação no código jbd. As barreiras de gravação impõem a ordem adequada das confirmações de diário no disco, tornando os caches voláteis de gravação em disco seguros para uso, com alguma penalidade de desempenho. Se seus discos tiverem bateria de uma maneira ou outro, desabilitar barreiras pode melhorar com segurança o desempenho. As opções de montagem "barreira" e "nobarrier" também podem ser usadas para habilitar ou desabilitar barreiras, para consistência com outras opções de montagem ext4. "
Mais em: http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt
fonte