Estou usando o ZFS nativo com o "ZFS no Linux" instalado a partir do aqui . A configuração não foi um problema e estou usando na configuração espelhada com dois HDDs WD 4TB Red. Infelizmente estou tendo problemas de desempenho, quando escrevendo no disco-matriz. Quando a leitura de desempenho está OK.
Estou tendo o problema de que, durante grandes gravações no array, o processo de cópia pare de ~ 5-10MB / s a cada ~ 5 segundos, conforme relatado pelo rsync. As velocidades entre as barracas são ~ 75MB / s, o que está alinhado com outros sistemas de arquivos e com o que eu esperaria do sistema (tentei o btrfs, que tem ~ 85MB / s). Observando iotop
, descobri que as trava de cópias coincidem com o processo txg_sync
performing / hogging I / O. Esta questão parece ser a questão da E / S "rajada" que parece ser um problema comum com o ZFS (consulte aqui e aqui ). Eu apliquei a opção do primeiro link
options zfs zfs_prefetch_disable=1
que ajudou um pouco com os problemas de desempenho, mas não os resolveu. O intervalo de 5s de txg_sync
parece ser o de vfs.zfs.txg.timeout="5" (por exemplo, 5s), que é a configuração padrão do ZFS no Linux.
Esse comportamento é normal ou há outras configurações que eu posso tentar? Em caso afirmativo, alguma sugestão? Note que não encontrei muitas das opções nos dois links ...
EDIT 2: Para acompanhar um pouco: O sistema que estou usando é um HP ProLiant Microserver N36L, que atualizei para 8 GB de RAM ECC. Os comandos que usei para criar o volume do ZFS são fornecidos aqui. Note que estou usando -o ashift=12
como eu achei (encontrado no FAQ do zfsonlinux) que isso deve fazer com que o ZFS funcione bem com os blocos de 4096Bytes de Advanced Format Disks.
$ zpool create -o ashift=12 -m /zpools/tank tank mirror ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0871252 ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E3PKP1R0
$ zfs set relatime=on tank
$ zfs set compression=lz4 tank
$ zfs create -o casesensitivity=mixed tank/data
Adicionada a opção zfs_prefetch_disable
a /etc/modprob.d/zfs.conf
para tornar as alterações permanentes:
options zfs zfs_prefetch_disable=1
Para que:
$ cat /sys/module/zfs/parameters/zfs_prefetch_disable
1
EDIT 1: Conforme solicitado, adicionei a saída zpool get all
. Note que esqueci de mencionar que liguei a compressão na piscina ...
$ zpool get all
NAME PROPERTY VALUE SOURCE
tank size 3.62T -
tank capacity 39% -
tank altroot - default
tank health ONLINE -
tank guid 12372923926654962277 default
tank version - default
tank bootfs - default
tank delegation on default
tank autoreplace off default
tank cachefile - default
tank failmode wait default
tank listsnapshots off default
tank autoexpand off default
tank dedupditto 0 default
tank dedupratio 1.00x -
tank free 2.21T -
tank allocated 1.42T -
tank readonly off -
tank ashift 12 local
tank comment - default
tank expandsize 0 -
tank freeing 0 default
tank feature@async_destroy enabled local
tank feature@empty_bpobj active local
tank feature@lz4_compress active local