Comment puis-je configurer des groupes de contrôle pour partager équitablement les ressources entre les utilisateurs?

11

Il y avait auparavant une option de configuration du noyau appelée sched_user ou similaire sous cgroups. Cela a permis (à ma connaissance) à tous les utilisateurs de partager équitablement les ressources système. En 2.6.35, il n'est pas disponible. Existe-t-il un moyen de configurer mon système pour partager automatiquement les ressources io / cpu / mémoire entre tous les utilisateurs (y compris root?). Je n'ai jamais créé de groupe de contrôle auparavant, existe-t-il un bon tutoriel pour le faire? Merci beaucoup.

NightwishFan
la source
Eh bien, j'ai pris un butin au paquetage cgroups-bin sur Ubuntu, et je suis assez sûr qu'il "fait ça" par défaut si je l'installe. J'ai supposé que cela nécessiterait une configuration, mais je suppose que c'est le cas si vous avez des besoins spéciaux. J'ai testé en exécutant le stress avec 2 threads cpu sous root et 2 sous mon utilisateur et les 4 threads semblent partager 50% en haut, ce qui me fait penser que cela fonctionne. Cela peut "le résoudre" pour moi, mais si quelque chose j'aimerais avoir un moyen plus clair de confirmer, ou une meilleure idée de comment le configurer, merci encore!
NightwishFan

Réponses:

12

La documentation du noyau fournit une couverture générale des groupes de contrôle avec des exemples.

Le cgroups-binpackage (qui dépend de libcgroup1) déjà fourni par la distribution devrait être correct.

La configuration se fait en modifiant les deux fichiers suivants:

/etc/cgconfig.conf

Utilisé par libcgroup pour définir les groupes de contrôle, leurs paramètres et points de montage.

/etc/cgrules.conf

Utilisé par libcgroup pour définir les groupes de contrôle auxquels appartient le processus.

Ces fichiers de configuration contiennent déjà des exemples, essayez donc de les adapter à vos besoins. Les pages de manuel couvrent assez bien leur configuration.

Ensuite, démarrez le gestionnaire de charge de travail et le démon de règles:

service cgconfig restart
service cgred restart

Le gestionnaire de charge de travail (cgconfig) est responsable de l'allocation des ressources.
Ajout d'un nouveau processus au gestionnaire:

cgexec [-g <controllers>:<path>] command [args]

Ajout d'un processus déjà en cours d'exécution au gestionnaire:

cgclassify [-g <controllers>:<path>] <pidlist>

Ou automatiquement sur le fichier cgrules.conf et le démon de règles CGroup (cgred), qui force chaque nouveau processus généré dans le groupe spécifié.


Exemple /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

Exemple /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Cela partagera les ressources CPU environ 50-50 entre l'utilisateur 'alice' et 'bob'

remuer
la source
Learning cgroups, a ajouté ceci. Merci.
Jigar