Perché ha 'cat' questo strano comportamento temporale?


8

Sto usando catper convogliare file diversi in un unico file di grandi dimensioni. Il numero di file diversi varia, da due a un massimo di dieci, ma la dimensione totale di tutti i file è sempre la stessa (un paio di GB).

Il mio problema: ogni volta che arrivo al caso in cui ho un totale di sei file, il tempo necessario per concatenare i loro picchi (cioè significativamente più che con cinque o sette), e non ho idea del perché.

Qualcuno ha un'idea?

I file (tutte le stesse dimensioni)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

Comando

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

Attualmente, la macchina deve eseguire alcuni calcoli, ma aggiornerò in seguito quando saranno disponibili nuove misurazioni.


Qual è la riga di comando esatta che stai usando?
innaM

Ho aggiunto la riga di comando.
brand setetter

Questo è decisamente strano. Non posso dirti perché si comporta in questo modo, ma forse dovresti presentare una segnalazione di bug in testo semplice a bug-coreutils@gnu.org.
Reynolds,

Misuralo! E assicurati di non memorizzare nella cache quando misuri!
Davide,

Risposte:


4

Un modo per eseguire il debug di questo problema è utilizzare 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

-tt opzione registra il timestamp della chiamata di sistema alla risoluzione di milli-secondi. -e trace = apri, chiudi solo log apri, chiudi API. Prova a rimuoverli e vedrai un file di registro molto rumoroso.


2

Quindi il commento di Davides è perfetto. Abbiamo bisogno di due cose qui, per fare una valutazione accurata:

  1. la cache di assurance non fa parte dello scenario
  2. misurazione effettiva del tempo impiegato.

Supponendo che tu abbia lo spazio su disco, descriverò uno scenario di test che determinerà in modo più preciso se questo è un vero problema. In tal caso, le prove a sostegno di questo approccio aiuteranno gli sviluppatori a sapere che è reale e in grado di riprodurlo.

Per aiutare con l'isolamento dei problemi non facciamo affatto la parte rm qui. lasciare che i file TEMP siedano dopo. È quindi possibile ripetere i test eseguendo la parte 'rm' in un secondo momento, se lo si desidera.

Ecco lo scenario di test:

  • crea 9 directory - una per ogni quantità di file (2 3 4 5 6 7 8 9 e 10) - se non hai spazio, fai semplicemente 2, 5, 6, 7 e 10.
  • assicurarsi di inserire file DIVERSI in ciascuna di queste directory; NESSUN duplicato ovunque
  • usa il comando time in questo modo:

    tempo (output catTEMP * >> output)

Acquisisci i numeri reali, utente e di sistema riportati per ogni test eseguito.

Sono d'accordo con Reynolds; se questo è reale, dovresti assolutamente inviare i dettagli via email a bug-coreutils@gnu.org.


Un altro pensiero: assicurarsi di copiare la stessa TOTALE quantità di dati nel file di output. Quindi, se è un totale di 1 GB, nella directory '2' avresti file di 1/2 GB di larghezza, e nella directory '10' avresti file che sono 1/10 di GB, ecc.
pbr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.