Jak skonfigurować cgroups, aby sprawiedliwie dzieliły zasoby między użytkownikami?

11

W cgroups istniała opcja konfiguracji jądra o nazwie schedul_user lub podobna. To pozwoliło (o ile mi wiadomo) wszystkim użytkownikom na uczciwe współdzielenie zasobów systemowych. W wersji 2.6.35 nie jest dostępny. Czy istnieje sposób, w jaki mogę skonfigurować mój system do automatycznego udostępniania zasobów io / cpu / memory wszystkim użytkownikom (w tym rootowi?). Nigdy wcześniej nie zakładałem grupy roboczej, czy jest na to dobry poradnik? Dziękuję Ci bardzo.

NightwishFan
źródło
Cóż, wziąłem łup w pakiecie cgroups-bin na Ubuntu i jestem całkiem pewien, że domyślnie „robi to”, jeśli tylko go zainstaluję. Zakładałem, że będzie to wymagało konfiguracji, ale przypuszczam, że wymaga to tylko specjalnych potrzeb. Testowałem, uruchamiając stres z 2 wątkami procesora pod rootem i 2 pod moim użytkownikiem, a wszystkie 4 wątki wydają się dzielić 50% w górę, co sprawia, że ​​myślę, że działa. Może to dla mnie „rozwiązać”, jeśli jednak chciałbym mieć bardziej przejrzysty sposób na potwierdzenie lub lepszy pomysł, jak to skonfigurować, jeszcze raz dziękuję!
NightwishFan

Odpowiedzi:

12

Jądro dokumentacja zawiera ogólny zasięg cgroups z przykładów.

cgroups-binPakiet (który zależy libcgroup1) już świadczone przez dystrybucji powinno być w porządku.

Konfiguracja odbywa się poprzez edycję następujących dwóch plików:

/etc/cgconfig.conf

Używany przez libcgroup do definiowania grup kontrolnych, ich parametrów i punktów montowania.

/etc/cgrules.conf

Używany przez libcgroup do zdefiniowania grup kontrolnych, do których należy proces.

Te pliki konfiguracyjne zawierają już przykłady, więc spróbuj je dostosować do swoich wymagań. Strony podręcznika dość dobrze opisują ich konfigurację.

Następnie uruchom menedżera obciążenia i demona reguł:

service cgconfig restart
service cgred restart

Menedżer obciążenia (cgconfig) jest odpowiedzialny za alokację zasobów.
Dodanie nowego procesu do menedżera:

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

Dodanie już uruchomionego procesu do menedżera:

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

Lub automatycznie przez plik cgrules.conf i demona reguł CGroup (cgred), który zmusza każdy nowo spawnowany proces do określonej grupy.


Przykład /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;
}

Przykład /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Spowoduje to współużytkowanie zasobów procesora około 50–50 między użytkownikiem „alice” i „bob”

machać
źródło
Ucząc się grup, zaznaczyłem to zakładką. Dzięki.
Jigar,