Por que tem 'gato' esse comportamento estranho?

8

Estou usando cat para canalizar arquivos diferentes em um arquivo grande. O número de arquivos diferentes varia de dois arquivos até dez, mas o tamanho total de todos os arquivos é sempre o mesmo (um par de GB).

Meu problema: Sempre que chego ao caso em que tenho um total de seis arquivos, o tempo necessário para concatená-los picos (ou seja, significativamente mais do que cinco ou sete), e eu não faço ideia do porquê.

Alguém tem uma ideia?

Os arquivos (todos do mesmo tamanho)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

Comando

cat outputTEMP* >> output && rm -f outputTEMP*

Atualmente, a máquina precisa realizar alguns cálculos, mas atualizarei mais tarde quando novas medições estiverem disponíveis.

    
por brandstaetter 04.12.2009 / 14:39

2 respostas

4

Uma maneira de depurar esse problema é usar strace.

strace -tt -e trace=open,close -o /tmp/strace.cat.log cat apt.list authors.txt >/tmp/t.test
cat /tmp/strace.cat.log 

23:12:08.022588 open("apt.list", O_RDONLY|O_LARGEFILE) = 3
23:12:08.023451 close(3)                = 0
23:12:08.023717 open("authors.txt", O_RDONLY|O_LARGEFILE) = 3
23:12:08.025403 close(3)                = 0
A opção

-tt registra o registro de data e hora da chamada do sistema para uma resolução de milissegundos. -e trace = abre, fecha log somente abre, fecha API. Tente removê-los e você verá um arquivo de log muito barulhento.

    
por 06.12.2009 / 08:16
2

Então, o comentário de Davides está certo. Precisamos de duas coisas aqui, para fazer uma avaliação precisa:

  1. garantia de armazenamento em cache não faz parte do cenário
  2. medição real do tempo que está sendo usado.

Supondo que você tenha o espaço em disco, descreverei um cenário de teste que determinará com mais precisão se esse é um problema real. Em caso afirmativo, a evidência de apoio desta abordagem ajudará os desenvolvedores a saberem que é real e conseguir reproduzi-lo.

Para ajudar no isolamento de problemas, não vamos fazer a parte rm aqui. deixe os arquivos TEMP se assentarem depois. Você pode repetir os testes fazendo a parte 'rm' mais tarde, se desejar.

Este é o cenário de teste:

  • crie 9 diretórios - um para cada quantidade de arquivos (2 3 4 5 6 7 8 9 e 10) - se você não tiver espaço, talvez faça 2, 5, 6, 7 e 10.
  • verifique se você está colocando arquivos DIFERENTES em cada um desses diretórios; NÃO há duplicatas em qualquer lugar
  • use o comando time assim:

    time (cat outputTEMP * > > output)

Capture os números real, do usuário e do sistema relatados para cada teste executado.

Concordo com Reynolds; se isso for real, você deve mandar um email com detalhes para [email protected].

    
por 04.12.2009 / 19:08