Do que você mencionou sobre compactação, presumo que todos os tamanhos / velocidades de armazenamento descritos por você estavam em tamanhos não compactados. Se não, isso poderia tornar os tempos de transferência mais longos por um fator igual à taxa média de compactação (mas não se o acesso ao disco for o gargalo, pois a descompactação / compactação ocorre após a leitura do disco em zfs send
e antes de gravar no disco em zfs receive
).
Com base nas informações coletadas até o momento, parece que você tem um gargalo na largura de banda do disco, e não na conexão de rede. Você mencionou que cada sistema pode ler / gravar a ~ 500MB / s, então seu melhor tempo de transferência para 35TB é de cerca de 20 horas (cerca de 2,5x mais lento do que apenas transferir através da rede de 10Gb / s). Mas, com base na sua configuração de espelhamento, surpreende-me que as leituras e gravações recebam o mesmo rendimento - você tem certeza disso? No sistema de envio, você só precisa ler de um disco (para poder fazer a paralelização de leituras em três discos), mas no sistema de recebimento você precisa gravar em todos os três discos (assim você está vinculado à taxa de transferência do disco mais lento). qualquer momento). Para testar a taxa de transferência no lado da recepção, você pode executar dd if=/dev/urandom of=some_file_in_pool bs=1M count=1024 conv=fdatasync
.
Como você disse que os discos de recebimento estão 100% ocupados, meu palpite é que ele não alcança a largura de banda de gravação de 500 MB / s. Isso pode ser porque o limite de gravação real é menor do que esse (o comando dd
acima deve confirmar), ou pode ser que o sistema tenha que fazer leituras de metadados durante o recebimento, e isso está quebrando suas boas tamanho escrever carga de trabalho, adicionando um monte de procura de disco na mistura. Você deve investigar a segunda hipótese mais profundamente usando o DTrace para ver o que o provedor io
acha que seus tamanhos de leitura / gravação são.