2011-08-19 7 views
0

Im ne sais pas exactement quelle catégorie de mettre cela dans.cp différence de temps de commande

J'ai essayé de faire ce qui suit avec un fichier qui est 7.7GB sur mon système Centos 5,5

time cp original copy 

et

time cp copy copy2 

La copie de la copie est environ la moitié du temps de la copie de l'original. Je pensais que le système d'exploitation était peut-être en cache ou quelque chose, alors je suis allé dans un autre répertoire et j'ai copié quelques petits fichiers, et je suis retourné faire la copie de la copie, et c'était encore beaucoup plus rapide.

Des idées ce qui se passe ici? Le système d'exploitation cache-t-il le fichier ou quelque chose?

Ce qui m'a fait remarquer ce problème est que j'ai du code qui traite ce fichier. Je voulais tester sur deux fichiers, donc je viens de faire une copie. J'ai alors remarqué que le fichier d'origine prend le plus de temps à traiter. Quel type de diagnostics puis-je lancer?

+0

tag C++ supprimé –

Répondre

1

Le système d'exploitation ne cache pas le fichier autant qu'il met en cache les blocs de disque lus.

Il existe plusieurs façons d'essayer de prendre en compte la mise en cache lors de l'exécution de tests de synchronisation. Vous pourriez essayer de vider les tampons de disque de système d'exploitation en allouant une quantité énorme de mémoire (j'exécute habituellement quelque chose comme perl -e '"\0"x1024x1024x1024' pour faire ceci); free avant et après devrait vous donner une idée de la quantité de données que le système d'exploitation a mis en cache (sous les colonnes buffers et cached).

Ou quand vous le temps de votre course, ignorez l'heure du système - qui sera principalement E/S - et juste regarder le temps de l'utilisateur. Bien sûr, des passages différents peuvent très bien traiter des quantités différentes de données, de sorte que vous vous attendez à ce qu'il y ait différentes quantités d'E/S.

La façon la plus fiable consiste à exécuter le test plusieurs fois et utiliser le temps le plus rapide que la valeur à comparer.

0
sync && echo 3 > /proc/sys/vm/drop_caches 
time cp original copy 
sync && echo 3 > /proc/sys/vm/drop_caches 
time cp copy copy2