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 :

utilisation de la RAM


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 47
    Points
    47
    Par défaut utilisation de la RAM
    Bonjour a tous

    Pour mon projet, j'ai besoin de specifier que mon process doit utiliser une quantité de RAM configurable. En gros, si je dis à mon process qu'il doit utiliser 100Mo de RAM, il doit pouvoir utiliser 100Mo de RAM.
    J'ai donc deux questions :
    1. Comment faire cela avec un malloc par exemple ?
    voici une ebauche de code qui est sensé le faire ... mais le fait-il vraiment ?
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        int RAM = 100;  // RAM en Mo que le process doit utiliser
        unsigned long int RAMlong=(unsigned long int)RAM*1024*1000;
        unsigned long int *buff ;
        buff=(unsigned long int*)malloc(sizeof(unsigned long int)*RAMlong);
        if (buff==NULL){printf("Not enough memory\n");return 1;} 
        else {
        	for (j=0;j<10;j++){buff[j]=RAMlong;}
        }
    Trouvez vous ce type de code correct pour mon besoin ?
    Ma deuxieme question est :
    2. Comment verifier qu'effectivement, 100Mo sont utilisées par mon process ? un top ? si oui, quelle colonne du top svp ? J'ai l'impression que %MEM ne donne pas ce que je souhaite ?



    Exemple de top :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     1452 fferreir  15   0 46980 2580 2192 S   94  0.1   0:19.80  C1C___00_014

    MA CONF : Je suis sous Linux, RedHat 4, Bi processeur 64


    Merci a tous pour vos conseils avisés !!
    pepito

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 38
    Points
    38
    Par défaut
    Fait attention qu'un "int" fait 4 octets en mémoire, donc si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    malloc(sizeof(unsigned long int)*RAMlong)
    tu auras:
    4*RAMlong = 4*RAM*1024*1000 octets alloués...

    Pour mieux faire, ce serait plutôt avec un sizeof(char) (puisque char ne fait qu'un octet...)

    Et pourquoi c'est 1024*1000 et non 1024^2?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 47
    Points
    47
    Par défaut
    Heu oui, bonne question :
    Pourquoi ca serait 1024 ^2 ?

    Sinon, pour le top ? qqn aurait une idee pour savoir combien de RAM mon process utilise vraiment ?
    Merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 38
    Points
    38
    Par défaut
    parce qu'un Mo fait 1024 Ko, qu'un Ko fait 1024 octets => 1024*1024 = 1024^2 (ben oui, juste des maths... c'était pour aller plus vite )

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Citation Envoyé par pepito31 Voir le message
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        int RAM = 100;  // RAM en Mo que le process doit utiliser
        unsigned long int RAMlong=(unsigned long int)RAM*1024*1000;
        unsigned long int *buff ;
        buff=(unsigned long int*)malloc(sizeof(unsigned long int)*RAMlong);
        if (buff==NULL){printf("Not enough memory\n");return 1;} 
        else {
        	for (j=0;j<10;j++){buff[j]=RAMlong;}
        }
    Quelques remarques sur le code :
    • Les identifiants en majuscule sont généralement réservés à des constantes, ce que n'est pas RAM.
    • Il vaudrait mieux que la quantité de RAM à utiliser soit configurable, soit au lancement, soit dans un fichier de conf
    • Cf explications des autres posts sur 1 Mo = 1024 Ko = 1024*1024 octets. Donc a priori, tu cherches à allouer 1024 * 1024, et non pas 1024 * 1000
    • Attention, ensuite tu es en train de te créer un buffer de 1 048 576 unsigned long int, ce qui n'est pas ce que tu dis que tu souhiates faire. En effet, la taille d'un unsigned long int n'est pas la même sur toutes les machines, et il n'est donc pas possible d'allouer un buffer de 100 Mo comme cela. Ce que tu cherches à faire est plus probablement du genre :
      buffer = malloc (RAMlong);
    • for (j=0;j<10;j++){buff[j]=RAMlong;} : Si tu as alloué un buffer de 100 Mo via la commande que je te donne ci-dessus, tu ne peux plus faire cela (puisque chaque "case" de ton buffer est un char).


    Citation Envoyé par pepito31 Voir le message
    Trouvez vous ce type de code correct pour mon besoin ?
    Si ton besoin est d'allouer 100 Mo, et que tu suis les recommandations, alors oui, ce code semble correcte. En revanche, cela ne sous-entends en rien que ce code soit correct pour l'utilisation que tu souhaites en faire.

    Citation Envoyé par pepito31 Voir le message
    Ma deuxieme question est :
    2. Comment verifier qu'effectivement, 100Mo sont utilisées par mon process ? un top ? si oui, quelle colonne du top svp ? J'ai l'impression que %MEM ne donne pas ce que je souhaite ?

    Exemple de top :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     1452 fferreir  15   0 46980 2580 2192 S   94  0.1   0:19.80  C1C___00_014

    MA CONF : Je suis sous Linux, RedHat 4, Bi processeur 64
    Je suppose que tu parles de RedHat Enterprise 4 (RHEL 4), et pas de RedHat 4 ?

    Le plus simple dans tous les cas est de lire le man de ps, et de voir quelles sont les bonnes optiuons à mettre pour voir la taille exacte en mémoire de ton processus (attention à la différence entre size et mem)
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Attention, lorsque l'on demande de la mémoire au système d'exploitation, il n'en donne pas forcement de la RAM. Il peut y avoir des parties qui sont dans le cache du processeur et des parties qui peuvent être swappé.
    Je ne répondrai à aucune question technique en privé

  7. #7
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par millie Voir le message
    Attention, lorsque l'on demande de la mémoire au système d'exploitation, il n'en donne pas forcement de la RAM. Il peut y avoir des parties qui sont dans le cache du processeur et des parties qui peuvent être swappé.
    Le cache est entièrement transparent (sauf DMA). L'espace dans le cache du processeur n'est pas alloué par l'OS.

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par corrector Voir le message
    Le cache est entièrement transparent (sauf DMA). L'espace dans le cache du processeur n'est pas alloué par l'OS.
    Oui, je n'ai pas dit le contraire (à moins que c'était juste des précisions ?)
    Je ne répondrai à aucune question technique en privé

Discussions similaires

  1. Utilisation d'une RAM
    Par Misaki43 dans le forum VHDL
    Réponses: 2
    Dernier message: 11/06/2014, 21h44
  2. Limiter l'utilisation de la RAM?
    Par soufiane2102 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 28/06/2012, 16h10
  3. Utiliser une clef USB comme de la ram de mémoire vive
    Par Lorponos dans le forum Composants
    Réponses: 28
    Dernier message: 18/08/2006, 18h32
  4. Comment savoir quel programme utilise toute la RAM ?
    Par Gloup dans le forum Administration système
    Réponses: 4
    Dernier message: 26/05/2006, 18h22

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