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

Windows Discussion :

Consomation CPU qui augmente


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut Consomation CPU qui augmente
    Bonjour,

    J'ai un programme qui réceptionne des trame sur le réseau (à l'aide de winPcap) et les enregistre sur un fichier. Ce programme tourne en boucle jusqu'a ce que l'utilisateur clique pour arrêter l'acquisition.

    Le programme fonctionne pour de courte durée mais pas pour des longues...
    En fait je me suis aperçu que l'utilisation du CPU augmente progressivement jusqu'à atteindre 100% d'utilisation ce qui entraine la perte de trame de mon programme d'acquisition ...

    Si quelqu'un passe par là et a déjà eut le problème, je suis preneur !

    Ps : Est ce que ce serait possible que ce soit du à l'écriture intensive sur disque?

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 366
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 366
    Points : 20 402
    Points
    20 402
    Par défaut
    Citation Envoyé par jkalzsmu Voir le message
    Ps : Est ce que ce serait possible que ce soit du à l'écriture intensive sur disque?
    Oui c'est pas impossible le CPU doit permuter entre les interruptions hardware et software ce qui peut plus le solliciter.
    Y'a-t-il utilisation de threads dans ce programme qui appelle wincap ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut Est ce que ce serait possible que ce soit du à l'écriture intensive sur disque?
    A priori, non...
    Mais il devrait être 'simple' de les mettre en commentaire pour voir.
    Sinon, difficile de savoir sans regarder le code mais...

    "ca mange du CPU" alors que ca ne fait que des ES (lecture réseau et écritures disques).
    Note: la ou on consomme du CPU c'est plutôt dans la copie des buffers mémoire mais, il faut dans ce cas un traffic réseau conséquent.
    et la consommation CPU devient insupportable lorsqu'on fait fonctionner le programme longtemps.
    => Cà boucle où? Pourquoi?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Oui c'est pas impossible le CPU doit permuter entre les interruptions hardware et software ce qui peut plus le solliciter.
    Y'a-t-il utilisation de threads dans ce programme qui appelle wincap ?
    Oui il y a un threads qui s'occupe de récupérer les trames reseaux (géré par winpcap). Le programme principale est l'interface graphique (visual c++).

    La boucle est gérée par winpcap mais en gros voilà ce qu'elle fait :
    * Lecture d'une trame.
    * Copie dans le buffer de winpcap.
    * Copie dans un autre buffer pour l'utilisateur.

    En fait le problème n'est pas vraiment la consomation du CPU qui est grande, lorsque je lance le programme, elle est de 30%.
    Le problème c'est qu'elle augmente continuellement lorsque le programme est en train de tourner.
    Elle arrive à 70% de consommation seulement au bout de 5 minutes alors que la charge sur le réseau reste constante ...

    Autre chose que j'ai remarqué et qui pourrait peut être vous aider : lorsque je coupe le trafic sur le réseau, la consommation CPU se remet instantanément en 0%, mais en revanche, si je fait une requête d'entrée sortie sur le disque alors elle est super lente !

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    La boucle est gérée par winpcap mais en gros voilà ce qu'elle fait :
    * Lecture d'une trame.
    * Copie dans le buffer de winpcap.
    * Copie dans un autre buffer pour l'utilisateur.
    En supposant que le temps CPU ne reflète que les copies mémoires, est ce que ces buffers "augmentent" avec le nombre de paquets reçus?
    En espérant que le nombre de bytes copiés n'est que fonction de ceux reçus, çà fait combien de MB occupés en mémoire?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Autre chose que j'ai remarqué et qui pourrait peut être vous aider : lorsque je coupe le trafic sur le réseau, la consommation CPU se remet instantanément en 0%, mais en revanche, si je fait une requête d'entrée sortie sur le disque alors elle est super lente !
    Même lorsque le CPU est tombé à 0% d'utilisation?
    Sinon, ton disque semble être saturé...
    Quelle est la quantité d'information écrite?
    Si tu stockes beaucoup d'informations en mémoire, tu as peut être un problème de pagination.
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Pour ce qui est du buffer de winpcap, sa taille est fixé par mes soins
    C'est en fait un ring qui permet a pcap de stocker les paquets reçu mais non transmit à l'utilisateur.

    Les paquets que je reçoit sont tous de la même taille (jumbo frame de 6978 octets).

    Je pense pas que le disque soit saturé car il fait plus de 500 giga et marche bien (4 disques 15000 tours/min en raid0).
    Moi je penserais plutôt sur une protection de L'OS envers un méchant virus qui pourrait remplir ton disque dur en 1 soirée ...

    Mon collègue pense que le cpu est "dans le paté" apres avoir tourné a fond pendant longtemps. Ce qui expliquerai pourquoi, lorsque le cpu retombe à 0%, il n'arrive toujours pas à écrire sur le disque.

    La quantité d'information écrite est assez grande, c'est de l'ordre de 100Mo/s mais les disques sont capable de supporter une telle charge puisque au début du programme, il n'y a pas de problèmes.

    Merci de ton aide

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Moi je penserais plutôt sur une protection de L'OS envers un méchant virus qui pourrait remplir ton disque dur en 1 soirée ...
    Est ce que çà fonctionne raisonnablement en commentant les écritures disques?

    Mon collègue pense que le cpu est "dans le paté" apres avoir tourné a fond pendant longtemps. Ce qui expliquerai pourquoi, lorsque le cpu retombe à 0%, il n'arrive toujours pas à écrire sur le disque.
    Tant que nous n'aurons pas identifié la ressource (ou plutôt la capacité qui est sur-utilisée) en défaut...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La quantité d'information écrite est assez grande, c'est de l'ordre de 100Mo/s mais les disques sont capable de supporter une telle charge puisque au début du programme, il n'y a pas de problèmes.
    Si je ne m'abuse, 100Mo/7k ~ 1500 IO/s.

    RAID0 c'est bien mais à 150 IO/s par disque, tu n'as qu'une capacité de 4x150 = 600 IO/s. Les autres IOs sont en attente où?
    Note: Il serait sage de faire des IOs au moins 4 fois plus grosses.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Est ce que çà fonctionne raisonnablement en commentant les écritures disques?
    Oui ça marche sans problèmes !

    Citation Envoyé par wiztricks Voir le message
    Si je ne m'abuse, 100Mo/7k ~ 1500 IO/s.

    RAID0 c'est bien mais à 150 IO/s par disque, tu n'as qu'une capacité de 4x150 = 600 IO/s. Les autres IOs sont en attente où?
    Note: Il serait sage de faire des IOs au moins 4 fois plus grosses.

    - W
    Pour ce qui est des disques, un rapide test m'as permit de mesurer une vitesse d'écriture d'environ 120Mo/s ce qui logiquement suffisant pour notre programme.
    Et puis les disques suivent sans problèmes au début du programme alors pourquoi ce ralentissement?
    Par rapport a cette histoire de IO/s, je ne connais pas du tout le fonctionnement de RAID0.

    Concernant des IO plus grande, j'avais modifier mon programme pour ne plus plus demander des écritures de 6978 octets (1 trames), mais plutôt grouper les trames (par paquet de 14 ~ environ 100Ko). Le résultat était le même ...
    C'est certainement du au fait qu'il y a un buffer sur le contrôleur RAID qui permet d'optimiser les appels IO.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Concernant des IO plus grande, j'avais modifier mon programme pour ne plus plus demander des écritures de 6978 octets (1 trames), mais plutôt grouper les trames (par paquet de 14 ~ environ 100Ko). Le résultat était le même ...
    Le résultat? Blocage avec 100% d'utilisation CPU ou çà marche aussi bien dans les premières minutes?

    C'est certainement du au fait qu'il y a un buffer sur le contrôleur RAID qui permet d'optimiser les appels IO.
    Comme ces IOs sont séquentielles, si le contrôleur gère proprement ses buffers, çà ne devrait pas faire de différence... Sinon çà va s'accumuler quelque part.

    Si cela marche raisonnablement en commentant les écritures disques, il reste peut être à confirmer que c'est un problème côte disque en faisant un programme qui écrive "bourin" par paquets de 7K assez longtemps.

    Note: 100Mo/s = 1Go après 10s.
    = 10Go après 1,7 mns
    = 100Go après 17 mns
    J'espère que les 500Go sont libres.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Concernant l'écriture par paquet de 100Ko, en fait le résultat est même pire ... car le temps d'écrire ce paquet sur le disque, la carte réseaux rejette des paquets ... De plus, le CPU continue a augmenter ...

    Je vais essayer d'écrire en bourrin et je donnerais le résultat.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Ok
    Pour le programme d'écriture "bourrin", essaie de paramètrer la taille des IOs pour voir comment se comporte le cache.
    L'idée est de noter le temps mis pour écrire de l'ordre de 50 Go (par exemple) avec des tailles de buffers différentes.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Consomation CPU 100%
    Par Ines102006 dans le forum Oracle
    Réponses: 10
    Dernier message: 27/12/2006, 17h55
  2. Pb de tablespace UNDO qui augmente toujours
    Par foster06 dans le forum Oracle
    Réponses: 2
    Dernier message: 08/12/2006, 18h32
  3. Réponses: 9
    Dernier message: 08/12/2006, 10h36
  4. fenêtre CPU qui s'ouvre
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 18/07/2006, 12h10
  5. [JVM]Mémoire utilisée qui augmente...
    Par Vrylx dans le forum Général Java
    Réponses: 1
    Dernier message: 11/10/2005, 13h10

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