C: Optimiser l'ecriture disque grace aux Buffers ?

C: Optimiser l'ecriture disque grace aux Buffers ? - Programmation

Marsh Posté le 25-01-2001 à 01:27:02    

On souhaite réeecrire un fichier quelconque dans un autre fichier. Comment déterminer la taille optimale du buffer à utiliser et cela sans faire une lecture préalable du fichier? Comment déclarer un tel buffer? ...

 

Reply

Marsh Posté le 25-01-2001 à 01:27:02   

Reply

Marsh Posté le 25-01-2001 à 08:18:41    

comprends pas bien la question... de quel buffer veux tu parler?

Reply

Marsh Posté le 25-01-2001 à 08:28:15    

Si tu veux utiliser un buffer en ram (c'est bien ça?), recopie les champs de ton fichier dans une liste chainée, comme ça tu ne t'inquiètes pas de la taille. Fixe juste une taille max pour la chaine.
Sinon, je ne vois pas exactement ce que tu recherches.
 
vw

Reply

Marsh Posté le 25-01-2001 à 10:52:37    

En principe les lecture et écriture doivent se faire avec un buffer de taille BUFSIZ (défini dans stdlib.h).
 
En principe c'est pas à toi d'optimiser les entrées/sorties, le système d'exploitation s'en occupe.
 
Tu peux également utiliser mmap pour mapper les fichiers en mémoire.

Reply

Marsh Posté le 25-01-2001 à 13:05:50    

voila on doit faire un prog de compression (fichiers et/ou repertoires) la premiere etape consiste a regrouper tous les fichiers en un seul puis de creer l'arbre de codage correspondant (huffman). Mais on a ordre d'optimiser la copie des fichiers dans le fichier compresssé en utilisant la taille adéquate du buffer en fonction de la taille des fichiers je pense, mais c ne surement pas le seul parametre qui rentre en compte pour determiner la taille optimale du buffer (en effet je vais pas faire un fread de 1 char et fwrite de 1 char , car chaque acces disque coute en temps d'execution. De meme prendre un buffer trop grand, ralentit aussi le process). Comment inplémenter dynamiquement un buffer qui s'adapte le mieux à une copie de fichier a fichier? Voila ma question.

 

Reply

Marsh Posté le 25-01-2001 à 15:20:58    

#include<sys/stat.h>
 
...
struct stat fileinfo;
...
stat("fichier.alire", &fileinfo);
int taille=fileinfo.st_size
...
 
Donc tu peux choisir la taille de ton buffer en fonction de la taille du fichier.

Reply

Marsh Posté le 25-01-2001 à 15:31:01    

Ben il faut voir comment le disque dur ecrit un fichier, plus clairement quelle est la taille d'un paquet qu'il ecrit d'un coup, et prendre un buffer multiple de cette taille.
 
vw

 

Reply

Marsh Posté le 25-01-2001 à 18:12:03    

Apparement, et d'après des test que j'ai fait avec un prog en C++, la taille optimale du buffer en écriture est de 256Ko.
J'ai un disque 8.4Go, DMA33, avec sans doute 512Ko de cache.
L'idée pour le writebuffer, c'est de ne pas dépasser la taille de la cache du disque (sinon, le prog doit attendre que le disque écrive les données).
Avec les tests que j'ai fait, un buffer de plus de 512Ko est plus lent qu'un buffer de 256Ko.
 
Pour le readbuffer, à mon avis, le plus gros est le mieux (en fonction de la RAM disponible).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed