Pourquoi «chat» a-t-il cet étrange comportement temporel?

8

J'utilise catpour diriger différents fichiers en un seul gros fichier. Le nombre de fichiers différents varie de deux à dix, mais la taille totale de tous les fichiers est toujours la même (quelques Go).

Mon problème: chaque fois que j'arrive au cas où j'ai un total de six fichiers, le temps qu'il faut pour les concaténer des pics (c'est-à-dire beaucoup plus qu'avec cinq ou sept), et je n'ai aucune idée pourquoi.

Quelqu'un a une idée?

Les fichiers (tous de même taille)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

Commander

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

Actuellement, la machine doit effectuer certains calculs, mais je mettrai à jour plus tard lorsque de nouvelles mesures seront disponibles.

brandstaetter
la source
Quelle est la ligne de commande exacte que vous utilisez?
innaM
J'ai ajouté la ligne de commande.
brandstaetter
C'est vraiment bizarre. Je ne peux pas vous dire pourquoi cela agit de cette façon, mais vous devriez peut-être déposer un rapport de bogue en texte brut à [email protected].
Reynolds
Mesure le! Et assurez-vous que vous ne mettez pas en cache lorsque vous mesurez!
Davide

Réponses:

4

Une façon de déboguer ce problème consiste à utiliser 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

L'option -tt enregistre l'horodatage de l'appel système à une résolution en millisecondes. -e trace = ouvrir, fermer le journal uniquement ouvrir, fermer l'API. Essayez de les supprimer et vous verrez un fichier journal très bruyant.

tony-p-lee
la source
2

Le commentaire de Davides est donc tout à fait exact. Nous avons besoin de deux choses ici, pour faire une évaluation précise:

  1. la mise en cache de l'assurance ne fait pas partie du scénario
  2. mesure réelle du temps que cela prend.

En supposant que vous disposez de l'espace disque, je vais décrire un scénario de test qui déterminera plus précisément s'il s'agit d'un problème réel. Si tel est le cas, les preuves à l'appui de cette approche aideront les développeurs à savoir qu'elle est réelle et à pouvoir la reproduire.

Pour aider à isoler les problèmes, ne faisons pas du tout la partie rm ici. laissez les fichiers TEMP s'asseoir après. Vous pouvez ensuite répéter les tests en faisant la partie «rm» plus tard, si vous le souhaitez.

Voici le scénario de test:

  • créez 9 répertoires - un pour chaque quantité de fichiers (2 3 4 5 6 7 8 9 et 10) - si vous n'avez pas d'espace, faites peut-être simplement 2, 5, 6, 7 et 10.
  • assurez-vous de placer DIFFÉRENTS fichiers dans chacun de ces répertoires; AUCUN doublon n'importe où
  • utilisez la commande time comme ceci:

    heure (sortie chatTEMP * >> sortie)

Capturez les nombres réels, utilisateur et sys signalés pour chaque test que vous exécutez.

Je suis d'accord avec Reynolds; si cela est réel, vous devez absolument envoyer les détails par e-mail à [email protected].

pbr
la source
Une autre pensée: pour vous assurer de copier la même quantité TOTALE de données dans le fichier de sortie. Donc, si c'est 1 Go au total, dans le répertoire «2», vous auriez des fichiers de 1/2 Go de large, et dans le répertoire «10», vous auriez des fichiers de 1 / 10e de Go, etc.
pbr