Ajustando o comportamento de armazenamento em cache de disco do Linux para máxima taxa de transferência

12

Estou tendo 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 de dois discos S-ATA2 em um Controlador LSI MegaRAID. O servidor também tem 24gig de memória.

Precisamos espelhar nosso último backup enviado com o máximo rendimento.

O RAID0 para nossos backups "quentes" nos dá cerca de 260 MB / s de gravação e 275 MB / s de leitura. Um tmpfs testado com tamanho de 20GB nos dá cerca de 1GB / seg. Este tipo de rendimento é o que precisamos.

Agora, como posso ajustar o subsistema de memória virtual do Linux para armazenar os últimos arquivos carregados pelo maior tempo possível na memória sem gravá-los no disco (ou ainda melhor: gravar no disco E mantê-los na memória)?

Eu configurei os seguintes sysctls, mas eles não nos dão a taxa de transferência que esperamos:

# 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 de cache de E / S e esperar alguns minutos até que ele seja gravado no disco. Ainda quando eu benchmark o servidor não vejo nenhum efeito na escrita, o throughput não aumenta.

Ajuda ou conselhos necessários.

    
por Peter Meyer 15.02.2012 / 11:48

3 respostas

6

Olhando as variáveis que você configurou, parece que você está preocupado principalmente com o desempenho de gravação e não se preocupa 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íncrona. As operações de gravação síncrona exigem o comprometimento com o disco e não seriam escritas com preguiça - nunca. Seu sistema de arquivos pode estar causando freqüentes limpezas de páginas e gravações síncronas (geralmente devido a journalling, especialmente com ext3 em data = journal mode). Além disso, mesmo os livretos de página "de fundo" interferirão nas leituras sem cache e nas gravações síncronas , diminuindo-os assim.

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 executado pelo pdflush? Você vê intensa atividade de gravação síncrona em seus discos?

Se tudo mais falhar, você pode escolher configurar um sistema de arquivos tmpfs explícito para o qual você copia seus backups e apenas sincroniza dados com seus discos após o fato - mesmo usando inotify automaticamente

Para o cache de leitura, as coisas são significativamente mais simples - existe o fcoretools fadvise utility que tem o% parâmetro--willneed para avisar ao kernel para carregar o conteúdo do arquivo no cache do buffer.

Editar:

vm.dirty_ratio = 70

This should in theory give us 16GB for caching I/O and wait some minutes until its writing to disk.

Isso não teria influenciado muito seu cenário de teste, mas há um equívoco em sua compreensão. O parâmetro dirty_ratio não é uma porcentagem da memória total do seu sistema, mas sim da memória gratuita do seu sistema.

Há um artigo sobre Ajuste para cargas de gravação pesada com mais detalhes informação.

    
por 15.02.2012 / 15:44
3

Ou obtenha mais discos ... A configuração da matriz de unidades que você possui não oferece suporte ao que você exige. Este é um caso em que a solução deve ser reprojetada para atender às suas reais necessidades. Eu entendo que isso é apenas backup, mas faz sentido evitar uma correção kludgy.

    
por 15.02.2012 / 15:40
1

O uso do cache de memória pode implicar em 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á ajuste a ser feito no nível do sistema de arquivos.

Por exemplo, se você estivesse usando o ext4, poderia tentar a opção de montagem:

barreira = 0

Isso: "desabilita o uso de barreiras de escrita no código jbd. Barreiras de gravação impõem o ordenamento em disco adequado de confirmações de diário, fazendo com que os caches de gravação de disco volátil sejam usados com segurança, com alguma penalidade de desempenho. Se os discos forem suportados por bateria De uma forma ou de outra, barreiras incapacitantes podem melhorar o desempenho com segurança. 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 do ext4. "

Mais em: link

    
por 15.02.2012 / 15:37