ZFS não grava continuamente no array

2

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:

  • Placa-mãe Gigabyte GA-G41M-ES2L
  • CPU Core 2 Duo E6750 (2,66 GHz)
  • RAM DDR2 de 4 GB
  • Placa PCIe SATA Vantec UGT-ST644R (sem RAID sendo usado)
  • Discos rígidos
  • 2 × 1,5 TB e 2 × 1,0 TB
  • SSD de 64 GB (para unidade de inicialização)

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:

  1. Eu executei um benchmark de disco local no array, e o mesmo comportamento se apresentou lá, descartando os computadores Windows e a rede.
  2. A execução de sync parece funcionar bem, mas não de forma consistente nem permanente.
  3. A memória está maximizada para essa configuração, mas não acho que seja imediatamente o problema em questão.
  4. Minha esperança é que isso não seja um problema do controlador (eu não tenho outro, e o quadro tem apenas quatro portas (uma para o SSD, três restantes)).
  5. A maioria das fontes parece dizer que um disco ZIL não ajudará na minha situação.

Atualizações (1 de setembro de 2015):

  1. Instalei o FreeNAS no mesmo hardware, usando a mesma topologia de matriz e corri para o mesmo problema. Isso significa que o problema é provavelmente o hardware.
  2. Para esse fim, coloquei três das quatro unidades no controlador interno e construí um array a partir disso. Problema resolvido! Gravações contínuas obtidas. Concedido, significa que preciso encontrar um novo cartão SATA, mas pelo menos ele funciona em teoria agora.
por MobiusOne 01.09.2015 / 05:26

0 respostas