Faz sentido copiar arquivos em paralelo para a mesma montagem NFS?

1

Veja um exemplo:

( cp /tmp/one /nfs/one ) &
( cp /tmp/two /nfs/two ) &
( cp /tmp/three /nfs/three ) &
( cp /tmp/four /nfs/four ) &
( cp /tmp/five /nfs/five ) &
wait

Contra um servidor NFS ocupado, isso faz com que algo seja ganho vs

cp /tmp/one /nfs/one;
cp /tmp/two /nfs/two;
cp /tmp/three /nfs/three;
cp /tmp/four /nfs/four;
cp /tmp/five /nfs/five;

Meu pensamento é que eu posso estar gastando mais tempo no primeiro exemplo gerando subshells (especialmente em uma máquina fazendo isso muitas vezes de uma só vez, criando muitos processos de usuário) onde por causa das limitações de largura de banda e atualização de inodes do NFS, não está me ganhando nada.

Os arquivos em questão estão entre 20k e 2mb, nunca mais que 6 de cada vez, e estão sempre sendo copiados para o mesmo caminho completo (apenas nomes de arquivos diferentes). Há um número destes acontecendo em uma matriz de servidores (~ 50) todos referenciando o mesmo pequeno conjunto de montagens NFS.

    
por Justin 16.01.2012 / 20:40

2 respostas

2

paralelizar provavelmente não ajuda. No entanto, vai depender de algumas coisas: a velocidade do seu disco local, a velocidade da sua rede local e o mesmo no servidor.

Se o disco local estiver atrelado ao fazer uma única cópia, não. Não vai ajudar.

Se a sua rede local estiver vinculada ao fazer uma única cópia, não. Não vai ajudar.

Se a rede do seu servidor NFS estiver atrelada ao fazer uma única cópia, não. Não vai ajudar.

Se o disco do seu servidor NFS estiver atrelado ao fazer uma única cópia, então ... bem, você obtém a imagem.

A melhor maneira de determinar se vai ser útil ou não é cronometrar ambas as operações, repetidamente, por exemplo, 10 corridas, para obter algo estatisticamente útil. Basicamente, se você achar que não está maximizando nenhuma dessas quatro coisas acima ao fazer uma cópia única, então pode ver um benefício de desempenho ao fazer isso em paralelo. Mas somente o teste lhe dirá isso.

    
por 16.01.2012 / 21:26
1

Como alguns dos arquivos são 20k, você provavelmente está gastando parte da sua largura de banda em operações diferentes da escrita real.

Existe uma excelente opção -n do NFS na ferramenta iostat , que mostra a porcentagem das suas IOPS gastas na gravação real.

# iostat -nmht 20

Filesystem:   ... rMB_svr/s  wMB_svr/s  ops/s  rops/s  wops/s
nfsserv:/share
              ... 0.00       17.5       9660   0.00    4508

Por favor, aguarde alguns períodos (cada período é de 20 segundos aqui) para iostat acumular algumas estatísticas.

Neste exemplo, apenas metade das IOPS são operações de gravação. Você também pode ver que o tamanho do bloco aqui é 4k. É provável que você possa melhorar o desempenho sobrepondo WOPS e não WOPS e executando seus processos em paralelo.

Tente observar a carga da CPU no seu servidor NFS e a utilização da largura de banda da rede. Em um servidor NFS com uma matriz de disco, a execução de vários processos deve ter um efeito muito bom.

    
por 12.04.2012 / 16:23