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

Linux Discussion :

Simuler un espace faible en ressource mémoire


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Simuler un espace faible en ressource mémoire
    Bonsoir,
    Je travaille sur un projet développé en C, rien de bien compliqué mais j'aimerai pousser les tests dans des cas un peu plus extrêmes comme quand la mémoire sera saturée (donc pour voir le comportement des allocations dynamiques en particulier).
    Existe-t'il des outils pour faire ça assez simplement ? Ou même des commandes en shell ?

    Après quelques recherches j'ai entendu parler de Low Resource Simulation bien que ça ait l'air orienté Windows et driver, et de Software Implemented Fault Injection (SWIFI) mais ça ne m'éclaire pas vraiment...

    en lien : http://en.wikipedia.org/wiki/Fault_i...ault_injection

    Si ce n'est pas clair n'hésitez pas à me faire préciser des choses, je débute un peu.
    Ca me serait vraiment utile, merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 214
    Points : 310
    Points
    310
    Par défaut
    Si ce n'est que simuler que tu n'as plus beaucoup de mémoire, le plus simple est peut-être de rajouter une ligne en début de ton programme qui alloue la majorité de la mémoire disponible.

    Le lien que tu as mis me semble bien plus générique et ajoute des fautes, des corruptions mémoires. C'est bien différent du cas où simplement tu n'as pas assez de mémoire.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    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 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Salut Atomz tu peux faire pour commencer une simple boucle ou tu alloues et désalloues des gros blocs de mémoire cela va fragmenter la mémoire

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Salut,

    Si tu veux juste simuler un manque de memoire (et donc un echec des *alloc()) tu peux simplement les remplacer par un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void *
    mon_malloc(size_t s) {
     
            if ((rand() % 3) == 0)
                return NULL;
            else
                return malloc(s);
    }
    De meme avec calloc/realloc/fopen/fclose etc...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Tout d'abord merci pour vos réponses !

    Jérôme_C Si ce n'est que simuler que tu n'as plus beaucoup de mémoire, le plus simple est peut-être de rajouter une ligne en début de ton programme qui alloue la majorité de la mémoire disponible.
    Comment savoir la mémoire disponible ? Sous Windows ça me fait penser au gestionnaire des taches mais sou Linux aucune idée... Et je voudrais vraiment que ce soit mes allocations qui posent problèmes pour voir le comportement du programme, et non en rajouter.
    Alors allouer précisément sur 4Go par exemple pour que mes petites allocations de matrices dépassent ça serait compliqué ! D'où mon idée d'exécuter le programme dans un tout petit espace mémoire .... après peut-être n'est-ce pas facilement réalisable.

    Je suis sûr que quelqu'un a la solution, quelque part !

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par Atomz Voir le message
    Comment savoir la mémoire disponible ? Sous Windows ça me fait penser au gestionnaire des taches mais sou Linux aucune idée...
    Outre le probleme de determiner la memoire dispo (et deja, definir la memoire dispo: avec la vm et les differents caches et buffer c'est une notion assez difficile a cerner), cette approche limite la memoire pour tout le pc, donc aussi pour tes outils de dev et debug. A toi de voir si c'est un probleme ou pas.

    Citation Envoyé par Atomz Voir le message
    Et je voudrais vraiment que ce soit mes allocations qui posent problèmes pour voir le comportement du programme, et non en rajouter.
    Alors allouer précisément sur 4Go par exemple pour que mes petites allocations de matrices dépassent ça serait compliqué ! D'où mon idée d'exécuter le programme dans un tout petit espace mémoire .... après peut-être n'est-ce pas facilement réalisable.
    Il n'y a rien de magique dans les effets du manque de memoire. D'un point de vue "programme" c'est simplement visible par l'echec des allocations. En faisant echouer aleatoirement tes allocations comme dans mon exemple (dans un 1/3 des cas plus ou moins) ton algo sera confronte a une situation de "manque memoire", qu'elle que soit la situation reelle de la machine.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 214
    Points : 310
    Points
    310
    Par défaut
    D'où mon idée d'exécuter le programme dans un tout petit espace mémoire .... après peut-être n'est-ce pas facilement réalisable.
    Un environnement particulier pour quelques programmes, c'est plus ou moins l'intérêt d'une machine virtuelle, non ?

    Outre le probleme de determiner la memoire dispo (et deja, definir la memoire dispo: avec la vm et les differents caches et buffer c'est une notion assez difficile a cerner)
    Sur un système donné, la quantité de mémoire disponible pour l'allocation dynamique (dans le tas) est connu (avec quelques paramètres si besoin, pour genre avec plus de mémoire pour la pile), ça ne s'agrandit pas indéfiniment.

    Le problème d'avoir un mon_malloc, c'est que tu ne teste que les malloc de ton programme, et pas toutes les fonctions de bibliothèques diverses utilisant de l'allocation dynamique.

  8. #8
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Tu peux utiliser ulimit pour limiter la mémoire disponible pour un process donné.

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par Jérôme_C Voir le message
    Le problème d'avoir un mon_malloc, c'est que tu ne teste que les malloc de ton programme, et pas toutes les fonctions de bibliothèques diverses utilisant de l'allocation dynamique.
    Tu as raison, cette approche est limitee aux tests pour le code qui execute l'allocateur "truque". En fait je ne utilise pas ca pour des simulations ou autres mais simplement pour verifier que j'ai bien blinde la gestion des erreurs.

    Mais bon, le plus simple (et de loin) ca reste quand meme ulimit comme l'a fait remarque matafan. Pourquoi faire simple ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Bonjour,
    Matafan a raison tu peut utiliser ulimit pour limiter la taille mémoire que t'on processus a le droit d'utiliser car comme tout le monde le sais un processus ne peut pas utiliser toute la mémoire physique il n'est pas tout seul imaginait le bordel si c'était le cas :s
    Tout le système planterais plus de tache de fond et ainsi suite ...

    Voici la page man en fr de cette commande shell
    http://www.linux-kheops.com/doc/man/.../ulimit.3.html

    Comme on dit chez moi RTFM (read the fucking manual :p)
    Voila bon courage et bonne journée a tous

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 115
    Points : 104
    Points
    104
    Par défaut
    Pour mettre tout le systeme dans un etat de faible ressource RAM, tu peux ajouter un parametre au boot du noyau du genre mem=256M.

    Apres tout depend de ce que tu veux tester, un ulimit semble suffisant dans ton cas.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour toutes vos réponses !

    Je crois que le ulimit est ce que je cherche, j'avoue ne pas trop avoir le temps de me pencher dessus là mais j'espère pouvoir comprendre le fonctionnement d'ici la fin de la semaine.

    Bonne fin de journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trop de ressource mémoire
    Par Rian83 dans le forum OpenGL
    Réponses: 9
    Dernier message: 17/04/2009, 16h58
  2. [Upload] Ressources mémoire lors de l'upload de photos
    Par Nostromo dans le forum Langage
    Réponses: 11
    Dernier message: 14/10/2007, 18h52
  3. Surveillance niveau de ressources /mémoire
    Par Wilco dans le forum Delphi
    Réponses: 1
    Dernier message: 12/05/2007, 16h28
  4. [Java Outlook Connector] ressources mémoires
    Par winnux dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 26/07/2006, 16h54
  5. Simulation de la réservation de ressource en Java
    Par wazer dans le forum Langage
    Réponses: 9
    Dernier message: 03/03/2006, 12h43

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