É melhor passar todos os arquivos para mv ou rodar vários processos mv em paralelo?

1

Eu tenho três maneiras de executar mv . Primeiro:

mv /db/dbfile1 /db/dbfile2 /db/dbfile3  /usb_storage/

e segundo:

mv /db/dbfile1  /usb_storage/ &
mv /db/dbfile2  /usb_storage/ &
mv /db/dbfile3  /usb_storage/ &

terceiro (eu acho primeiro e isso é mesmo?)

mv /db/dbfile1  /usb_storage/ 
mv /db/dbfile2  /usb_storage/ 
mv /db/dbfile3  /usb_storage/ 

Qual destes métodos é melhor? Por quê?

    
por Rahul Patil 21.03.2013 / 03:35

2 respostas

3

Se houvesse algum mérito para mover arquivos em paralelo, há uma boa chance de mv já estar fazendo isso sozinho, ou uma ferramenta semelhante existiria. ;)

Não deve haver nenhum ponto em executar mv em paralelo no mesmo disco de origem / destino, já que você está geralmente limitado por velocidades de mídia de armazenamento de qualquer forma. Se /usb_storage/ for um pendrive, ele não acelerará mais.

mv /db/dbfile1 /db/dbfile2 /db/dbfile3 /usb_storage/

Deve ser o melhor método, já que ele faz o que você quer, bloqueia até terminar (para que sua alternativa seja aproximadamente equivalente, você teria que adicionar um wait no final). Escrever arquivos sequencialmente em vez de em paralelo também ajuda a evitar a fragmentação desnecessária de arquivos.

Além disso, no caso de /usb_storage/ não ser grande o suficiente para armazenar todos os arquivos que você está movendo, em vez de terminar com três incompletas / nenhuma cópia ao trabalhar em paralelo, você pode obter pelo menos um arquivo completo com a solução sequencial.

    
por 21.03.2013 / 04:19
0

Existem ganhos potenciais de desempenho para executar mv em paralelo: enquanto um processo está aguardando uma leitura para retornar, se outro arquivo estiver em cache, ele pode ir direto para a execução de outra solicitação de E / S. Além disso, o agendador de IO pode reordenar as solicitações de setor para todos os arquivos que você está tentando mover para que os cabeçotes de leitura / gravação no HDD (obviamente não muito na chave USB) possam se mover tão pouco quanto possível.

Dito isto, os benefícios de desempenho da execução em paralelo serão mínimos, a menos que você tenha muita fragmentação do sistema de arquivos (para se beneficiar de evitar cabeçotes de leitura / gravação em todo o lugar).

Se você se preocupa com o desempenho, no entanto, eu me certificaria de que o agendador da sua chave USB seja "noop" para que não perca tempo solicitando solicitações novamente quando não for importante fazer uma gravação única na mídia sem cabeças de leitura / gravação. Se o seu programador regular de HDD for o cfq, você também pode tentar usar a mágica ionizada para priorizar suas operações mv sobre qualquer outra coisa que esteja acontecendo com o sistema.

    
por 21.03.2013 / 14:34