Prefácio: Eu não sou um usuário especialista em Linux, mas já toquei com Linux o suficiente para ser perigoso.
Estou criando um servidor pessoal, basicamente apenas para usar como armazenamento de vídeo e fotos. As especificações atuais são as seguintes:
Instalei o Ubuntu Server 14.04.3 LTS no SSD, com o ZFSonLinux instalado de acordo com aqui (Ars Technica) . Também está instalado o Samba (Versão 4.1.6-Ubuntu), que estou usando para acessar o servidor do resto do meu (Windows 7 e acima) computadores (dois ou três, no máximo, eventualmente).
Todas as quatro unidades estão conectadas à placa controladora Vantec, e cada par é espelhado e adicionado ao ZPool, resultando em um total de 2,5 TB de espaço. O SSD está conectado diretamente ao controlador de bordo.
Quando funciona, funciona lindamente, no entanto ...
Quando eu escrevo grandes quantidades de dados para o array, o primeiro MB500MB "escreve" muito bem (para o cache, suponho), então o ZFS aguarda cerca de ≈30 segundos, (monitorando usando zpool iostat <pool_name> 1
), grava ≈350MB de cache para o array enquanto aceita mais dados, aguarda ≈30 segundos, grava ≈350MB de cache no array enquanto aceita mais dados, aguarda ≈30 segundos, etc., até que a transferência seja concluída. Nesses 30 segundos, não está fazendo nada (0 in, 0 out), apenas sentado ocioso.
O link de rede é (para minha surpresa, na verdade) capaz de preencher os 350MB em cerca de 5 segundos, deixando muito tempo morto durante todo o processo.
Existe uma maneira de remover esse gargalo / 'respiração'?
Eu tentei alterar o valor zfs_txg_timeout
(o padrão é 5 segundos, o que parece improvável, mas 1 segundo parece não ajudar).
Eu também defini os valores de cache mínimo e máximo para 2GB e 3GB, respectivamente, mas ele ainda começa com um cache relativamente pequeno e lentamente cresce. Eu observei a memória do sistema usada durante isso, e o ZFS parece relutante em aumentar rapidamente o uso de RAM, mesmo quando tudo está esperando.
Eu gosto da maneira que o ZFS me permite segmentar em diferentes tamanhos de vdevs, mas o comportamento descrito torna-o inutilizável para transferir grandes quantidades de dados para ele de forma confiável.
Alguma sugestão, seja para corrigir a configuração atual, ou de uma alternativa que funcionaria de forma comparável? Agradeço antecipadamente pelo insight. Se você precisar de mais alguma informação, me avise.
Notas laterais:
sync
parece funcionar bem, mas não de forma consistente nem permanente. Atualizações (1 de setembro de 2015):
Tags zfs home-server linux ubuntu