ZFS e tamanhos de unidades mistas para uma matriz de faixas espelhada

1

Estou tendo um problema de desempenho com o array do ZFS que acho que é devido à desfragmentação. Eu tenho uma matriz listrada de 20 dispositivos com 2 unidades espelhadas cada. Recentemente, adicionei alguns dispositivos a esse array listrado que são maiores (2x) que os originais.

Usando zpool iostats mostra que mesmo enquanto alguns dos dispositivos antigos estão 90% cheios e os novos apenas 50% cheios, as gravações são igualmente distribuídas entre todos os dispositivos, independentemente do% livre ou do espaço de cada unidade.

O ZFS espera dispositivos do mesmo tamanho para uma matriz listrada? Esta é a razão pela qual os discos não são usados da mesma forma, ou isso é completamente irrelevante?

    
por Mara Ara 16.10.2014 / 16:50

1 resposta

1

Testei isso usando zdb -ddddd [consulte link ]

Eu criei dois arquivos chamados disk1 e disk2 que eram 400M e, em seguida, disk3 e disk4 em 650M, e eu criei um zpool "tank" usando eles:

zpool create tank mirror disk1 disk2
zpool add mirror disk3 disk4

( Eu estou supondo que você usou zpool add mirror para incluir os discos no pool, e não zpool attach os discos para um espelho existente vdev; o último é uma idéia universalmente ruim e não vai aumentar capacidade de qualquer maneira, seria apenas adicionar outro dispositivo de espelho )

Quando eu enchi o pool 100M por vez com mkfile , eu verifiquei zdb -ddddd tank <inode#> para ver quais vdevs estavam sendo gravados, e zfs fez o balanceamento da carga entre cada um; dos 400 endereços de bloco, em média, cerca de 300-350 foram gravados nos "discos" menores e 450-500 no maior, mesmo no último arquivo que encheu a piscina.

Isso significa que o ZFS irá equilibrar os blocos gravados entre cada vdev em um pool. (Neste caso, entre cada um dos seus 11 espelhos). OTOH, se você fosse adicionar uma unidade maior a um espelho existente usando zpool attach , o ZFS não seria capaz de utilizar esse espaço extra, já que ele grava os mesmos blocos em cada disco em um espelho.

Normalmente, é recomendável usar os mesmos discos em um pool, mas isso não é necessário. Não se preocupe em adicionar uma unidade mais rápida a uma piscina com discos mais lentos; em um pool, seu disco mais lento é o seu afunilamento (embora adicionar um log SSD para o ZIL possa atenuar esse problema).

Além disso, eu não me preocuparia com desfragmentação no ZFS, é a natureza da fera - como o ZFS é um sistema de arquivos Copy-on-Write , é inevitável. (Ou seja, em vez de sobrescrever um bloco com dados novos, ele grava os novos dados em um novo bloco e atualiza ponteiros de metadados e somas de verificação para usar o novo bloco.) Eu não esperaria que isso reduzisse o desempenho. p>

O que reduzirá o desempenho é estar 90% cheio (interfere com Copy-on-Write). É aconselhável manter a utilização em ou abaixo de 80% para o desempenho máximo.

O que me faz pensar em outra coisa - seu pool já existia e você adicionou dois novos discos - os dados existentes NÃO serão exibidos nesses discos, não até que sejam reescritos, por isso esperaria ver menos dados totais nos novos discos por algum tempo.

    
por 13.11.2014 / 22:38

Tags