Journal Rah nice && cgroups

Posté par  . Licence CC By‑SA.
Étiquettes :
14
16
mai
2012

Grande découverte en essayant Mageia 2 RC. On ne peut plus se suffire de lancer un truc lourd avec nice pour pas qu'il fasse ramer le reste!

Exemple : lancer dans 3 consoles 7z b , nice -20 7z b et top.
Les deux instances de 7z ont droit à 50% de CPU chacune. Par contre, si on les lance dans une seule console :

(nice -20 7z b &);(7z b &);top

Ils se partagent correctement : 90%/10% environ. Mais alors, comment lancer un service en arrière plan qui ne bouffe pas 50% du CPU?

Merci aux rois du cgroup, puisque je suppose que ça vient de cette belle évolution qui permet à Linus de regarder un film en faisant make -j48.

  • # Non, définitivement

    Posté par  . Évalué à 5.

    "On ne peut plus se suffire de lancer un truc lourd avec nice pour pas qu'il fasse ramer le reste" je ne comprends pas cette phrase.

    Vous voulez pas la jouer soft ? Je suis pas contraignant... vous voulez la jouer hard ? On va la jouer hard

    • [^] # Re: Non, définitivement

      Posté par  . Évalué à 0.

      ben "man nice"

      ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

      • [^] # Re: Non, définitivement

        Posté par  (site web personnel) . Évalué à 10. Dernière modification le 16 mai 2012 à 17:46.

        man ironie

        $ echo "On ne peut plus se suffire de lancer un truc lourd avec nice pour pas qu'il fasse ramer le reste" < gcc -x Français --pedantic -o PostLinuxFr
        Syntax Error Try "Il ne suffit plus de lancer nice sur un truc lourd pour qu'il ne fasse plus ramer le reste" instead
        
        
      • [^] # Re: Non, définitivement

        Posté par  (site web personnel) . Évalué à 2. Dernière modification le 16 mai 2012 à 18:05.

        ben "man nice"

        Justement tu devrais le relire parce que nice -20 pour éviter de faire ramer ta bécane, heu comment dire… ou alors je n'ai pas non plus compris ton message. Je devrais peut-être essayer un
        $ apropos zino

        Ou sinon: CGROUP_SCHED=n

        • [^] # Re: Non, définitivement

          Posté par  . Évalué à 1.

          Ah okokok…. en fait c'est pas nice moins vingt, mais nice tiret vingt. Ça ajoute 20 à la valeur par défaut!

          ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

  • # Documentation

    Posté par  . Évalué à 2.

    Voir ici

    J'ai essayé vite fait avec un groupe à 100 cpu share et un à 900.

    100 shares:

    Dict        Compressing          |        Decompressing
          Speed Usage    R/U Rating  |    Speed Usage    R/U Rating
           KB/s     %   MIPS   MIPS  |     KB/s     %   MIPS   MIPS
    
    22:    2281    91   2430   2219  |    30548   110   2512   2756
    23:    2684   113   2424   2735  |    39540   145   2493   3618
    24:    3412   148   2483   3669  |   108073   391   2562  10026
    25:    8092   348   2654   9239  |   105097   388   2548   9883
    ----------------------------------------------------------------
    Avr:          175   2498   4465               259   2528   6571
    Tot:          217   2513   5518
    
    

    900 shares:

    Dict        Compressing          |        Decompressing
          Speed Usage    R/U Rating  |    Speed Usage    R/U Rating
           KB/s     %   MIPS   MIPS  |     KB/s     %   MIPS   MIPS
    
    22:    7785   299   2537   7573  |    92630   326   2565   8357
    23:    5872   232   2580   5983  |    88638   316   2568   8111
    24:    6840   284   2591   7355  |    91305   332   2549   8470
    25:    5969   259   2632   6815  |    90866   337   2534   8545
    ----------------------------------------------------------------
    Avr:          268   2585   6932               328   2554   8371
    Tot:          298   2569   7651
    
    
    • [^] # Re: Documentation

      Posté par  . Évalué à 2.

      J'y suis passé en fouillant, mais c'est pas concluant : même avec 2 shares, mon processus de fond arrive à prendre 30% de cpu sur mon mono-processeur. C'est sûr qu'avec un tri-cpu comme le tien ça se sent même pas, mais c'est pareil : 100% environ et 300% respectivement.

      ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

      • [^] # Re: Documentation

        Posté par  . Évalué à 3.

        Quelques précisions pour comprendre la mécanique des cgroups :
        - la valeur dans cpu.shares est un poids attribué au process (normalisé à 1024) lors de l'attribution de temps sur un core ; Si tu lances deux benchs dans deux cgroups différents sur un même core, tu verras la répartition souhaitée, si tu les mets sur deux core ils mangeront chacun de leur côté.
        - Tu peux contrôler l'affinité, c'est à dire le core sur lequel réside un process, en restreignant les core accessibles grâce à cpu.cpus ; Cela permet par exemple de garantir que certains core restent disponibles.
        - Enfin l'attribution du temps n'a de sens que si le process en demande ; Si celui-ci est bloqué dans une IO il n'en recevra pas même si il a un poids maximum.

        Le cgroup cpu faut vraiment expérimenter un moment pour comprendre. :)

        • [^] # Re: Documentation

          Posté par  . Évalué à 6.

          Cette mécanique est exactement celle permise avec la priorisation nice depuis aussi longtemps que je connais linux. cgroups apporte surtout la possibilité de grouper les taĉhes, pour que 48 processus en basse priorité ne finissent pas par faire saccader un processus unique genre lecteur vidéo en priorité normale. L'idée est que chaque groupe de processus est vu comme un seul droit processeur.

          Mais en fait, j'ai fini par trouver comment faire fonctionner le nice "normalement" :

          echo "kernel.sched_autogroup_enabled = 0" >> /etc/sysctl.conf
          sysctl -p
          
          

          https://bugzilla.redhat.com/show_bug.cgi?id=721416

          ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

  • # schedtool et ionice

    Posté par  . Évalué à 2.

    Tu peux essayer du cote de schedtool et ionice
    exemple: schedtool -D -n 19 -e ionice -c 3 '7z b'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.