IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Temps de lecture disque


Sujet :

C++

  1. #1
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut Temps de lecture disque
    Bonjour,

    j'ai un fichier composé de n groupe d'octets de tailles variables.

    sous windowsXP SP2
    je lis ce fichier à l'aide de n appels à la fonction fread.

    lors de la première lecture du fichier le temps de lecture est T1

    lors de la deuxième lecture et des lectures suivante le temps est environ entre T1/2 et T1/4 (dépends de la machine)

    lorsque je ferme l'application et que je la relance les temps sont toujours entre T1/2 et T1/4.

    Si je ferme la session les temps sont toujours courts.

    Si je redémarre la machine (reboot) le temps est à nouveau T1 pour la première lecture.


    Quelqu'un pourrait-il m'expliquer d'où vient ce phénomène ou où trouver des informations sur la lecture des fichiers avec windows qui pourraient expliquer ces temps.

    D'avance merci, parce que là

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben... Les fichiers sont mis en cache, tout simplement...
    Les Windows 9x accordaient 50% de la mémoire au "cache système" ce qui est un terme pour le cache (logiciel) supérieur des accès au disque dur (par opposition au "cache disque", qui est réservé au contrôleur de disque)

    Je ne sais pas où trouver des infos détaillées, mais j'ai bossé pour un thésard qui travaillait justement sur les temps d'accès...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Médinoc
    Ben... Les fichiers sont mis en cache,
    Effectivement je me doute bien qu'il y a un cache
    Citation Envoyé par Médinoc
    tout simplement...
    Par contre, je me demande bien comment est géré ce cache et ce qu'il contient, et ça ne me parait pas très simple :/

    En effet, fread va lire les données sur le disque dur lors de tous les appels, il doit donc y avoir, je pense, une sorte "d'index des fichiers lus" en cache mais je ne sais pas du tout où trouver d'infos. :/

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Il y a aussi un cache avec le disque dur.
    Mais je ne sais pas comment ils sont gérés (ni le cache de l'OS ni le cache "physique").

  5. #5
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut
    Voui,
    et est-il possible de "préchargé" un fichier en cache avant de le lire ?

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Non, mais tu peux le lire... ce qui va le "précharger"

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Quand tu commences la lecture du fichier, Windows va précharger le reste.

    Avec les fonctions de l'API Win32 (comme CreateFile()), tu peux même optimiser en disant de quelle façon tu comptes accéder au fichier (avec FILE_FLAG_SEQUENTIAL_SCAN et FILE_FLAG_RANDOM_ACCESS)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    mat.M
    Invité(e)
    Par défaut
    oui encore une fois il est souhaitable d'utiliser des API spécifiques comme CreateFile dont parle Medinoc plutot que fread du C

  9. #9
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut
    Hum...mais coté portabilité :/

    donc mieux vaut faire un chargement spécifique à chaque platforme ?

    Citation Envoyé par Médinoc
    Quand tu commences la lecture du fichier, Windows va précharger le reste.
    Peux-tu me préciser ce que tu entends par "commencer" la lecture et précharger le reste.

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne sais pas s'il suffit d'ouvrir le fichier ou s'il faut lire le premier octet (ou carrément le premier secteur). Toujours est-il que Windows chargera les secteurs suivants en avance, avant que tu ne les lises.

    Bien entendu, c'est supposé plus performant en mode séquentiel...

    PS: Tu as aussi des extensions non-standard à fopen(), qui permettent de spécifier cela:
    http://msdn.microsoft.com/library/de...c_._wfopen.asp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #ifdef WIN32
    #define _CRT_SECURE_NO_DEPRECATE
    #define FOPEN_SEQ "S"
    #define FOPEN_RAND "R"
    #else
    #define FOPEN_SEQ
    #define FOPEN_RAND
    #endif
     
    #include <stdio.h>
     
    //...
     
    {
    //...
     
    FILE* pt_fich = fopen(
     nomFich,       //Nom du fichier
     "r" FOPEN_SEQ  //Juste un espace entre les deux, le compilo concatène
     );
     
    //...
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Pourquoi ne pas simplement utiliser ifstream?

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Parce que les streams n'ont aucun moyen, standard ou non, de spécifier des flags d'optimisation du préchargement.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Ah j'avais pas lu le post sur les flags

  14. #14
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Médinoc
    Je ne sais pas s'il suffit d'ouvrir le fichier ou s'il faut lire le premier octet (ou carrément le premier secteur). Toujours est-il que Windows chargera les secteurs suivants en avance, avant que tu ne les lises.
    Je vais essayé puisque sur un fichier de quelques centaines de Mo, je ne comprends pas vraiment ce qu'il charge lorsqu'on lit les premiers octets.


    En ce qui concerne les options "Random" et "Sequential" mes essais n'ont pas été très concluant pour le moment.


    Sinon pour ifstream, c'était du code C à la base d'où le fread, mais effectivement je ne sais pas non plus gérer le cache grâce aux fstreams.

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Au fait: Fais gaffe si tu as un antivirus actif, ça peut fausser, surtout pour les fichiers compressés (Notamment, n'ouvres pas un tar.gz de 800Mo avec VScan qui tourne, mon 2600+ met un quart d'heure...).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    En portable, y'a ça qui pourrait peut-être t'intéresser :
    http://ice.prohosting.com/newfunk/bo...pped_file.html
    Boost ftw

  17. #17
    Membre régulier Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Points : 109
    Points
    109
    Par défaut
    Effectivement ca m'intéresse
    je vais essayé de voir ce que je peux faire


    Sinon en ce qui concerne fread, je suis encore plus perdu qu'avant :
    J'ai obtenu de très bon résultat en lecture sequentiel, mais je ne les comprend pas.

    J'ai lu un fichier (que j'estime "mis en cache" donc normalement rapide)
    en N secondes.

    J'ai redémarrer ma machine afin de vérifier:
    la lecture prend toujours N secondes

    En lisant un fichier similaire ailleurs sur le disque N secondes.

    En lisant un autre fichier similaire ailleurs sur le disque environ 3*N secondes
    pour la première lecture, N secondes ensuite.


    Je ne comprend pas vraiment ces résultats :
    - est ce que ca pourrait être des informations de style "cache disque" stockées sur le disque ? ( ca me parait un peu tordu )
    - est ce que ca pourrait être le fait qu'un fichier soit fragmenté ? (mais alors pourquoi juste la première lecture est lente ?)


    BTW : j'avais oublié de préciser j'utilise une machine windows qui lit un disque au format NTFS

  18. #18
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Citation Envoyé par Médinoc
    Au fait: Fais gaffe si tu as un antivirus actif, ça peut fausser, surtout pour les fichiers compressés (Notamment, n'ouvres pas un tar.gz de 800Mo avec VScan qui tourne, mon 2600+ met un quart d'heure...).
    Comme Médinoc, je penche plus pour un problème de scan antivirus ou autres logiciels dans le même genre.

    Car déjà faire un cache sur un fichier de + de 100 mo... j'ai un très gros doute la !
    Cache disque dur de 16 mo maxi, et monter en mémoire ensuite des fichiers de 100 Mo j’ai de gros doutes la aussi.

    Et l'antivirus peut scanner le fichier la première fois, stocker des informations dessus, comme quoi il n’est pas infecté par un malware. Et pour les n fois suivante, il peut vérifier, via un md5 ou en vérifiant la taille du fichier, sa date de création ou autres, et ne pas rééxecuter son scan une seconde fois.

  19. #19
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Euseube:
    Il y a aussi un cache avec le disque dur.
    Je ne savais pas cela mais il fonctionne comment en fait? Ne serais pas plutot le cache L2?
    Le processeur le gère de quelle manière? Seulement pour des fichiers spécifiques?

  20. #20
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Je ne savais pas cela mais il fonctionne comment en fait? Ne serais pas plutot le cache L2?
    Le processeur le gère de quelle manière? Seulement pour des fichiers spécifiques?
    Non, il parle d'un cache interne au disque dur.
    La gestion de ce cache dépend du disque dur utilisé.
    Boost ftw

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/06/2015, 13h57
  2. lecture disque rapide
    Par NiamorH dans le forum Windows
    Réponses: 7
    Dernier message: 27/04/2007, 17h24
  3. lecture disque client
    Par gilles74 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/04/2006, 11h49
  4. [readline] temps de lecture
    Par fredericL dans le forum Entrée/Sortie
    Réponses: 15
    Dernier message: 11/05/2004, 16h05
  5. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 08h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo