fwrite () est plus rapide si unlink () le fichier avant que le tronque

Je veux effectuer un test simple des performances du disque sur une plate-forme rhel 6. Il suffit de noter les octets 1G sur le disque. J’ai trouvé que si le fichier n’était pas lié avant, il serait beaucoup plus rapide que tronqué. Il était environ 1.5s contre 15s.

Pourquoi? Je pensais que unlink () le dernier lien dur tronquera le fichier à 0 et supprimera l’inode. Pourquoi fwrites était plus rapide avec unlink () que tronqué?

#include  #include  #include  int main(int argc, char* argv[]) { if (argc < 2) { return -1; } char buf[1024]; srand(time(0)); int i; for (i = 0; i < 1024; ++i) { buf[i] = rand(); } /* unlink(argv[1]); */ FILE* fp = fopen(argv[1], "wb+"); if (fp == NULL) { perror("fopen"); return -1; } for (i = 0; i < 1024 * 1024; ++i) { if (fwrite(buf, 1024, 1, fp) != 1) { perror("fwrite"); return -1; } } return 0; } 

La suppression d’un fichier peut sembler plus rapide que sa troncature lorsque l’espace disque disponible est suffisant et que le système de fichiers peut supprimer des fichiers et récupérer leur espace paresseux. Il suffit de marquer l’inode comme étant supprimé et de supprimer le fichier en arrière-plan ou ultérieurement et de créer un nouvel inode presque instantanément, prêt à recevoir de nouvelles écritures.