Jak cgroups oddziałują z procesami nie zgrupowanymi?


12

Mam 3 procesy na maszynie z jednym rdzeniem. Każdy proces jest dokładnie taki sam i spala procesor tak szybko, jak to możliwe (ciasna pętla). Dwa z nich ( Ai B) są uruchamiane z cgexec w oddzielnych grupach z udziałami ustawionymi na 512 i 512. Trzeci ( C) jest uruchamiany regularnie, nie z cgexec.

Gdy wszystkie są już uruchomione, Cotrzymuje 66% procesora, Aa Bdzieli 33%. Jeśli zabiję Cwtedy Ai Bdostać 50% każda (zgodnie z oczekiwaniami).

Dlaczego Cdostaje 66%? W tym scenariuszu spodziewałbym się po 33%, a może 50% (C), 25% (A) i 25% (B). 66% Cnie zadziała, bez względu na to, jak robię matematykę.

Ogólnie chcę zrozumieć, w jaki sposób procesy uruchamiane bez cgexecinterakcji z procesami uruchamianymi, cgexecjeśli chodzi o współdzielenie zasobów (w szczególności procesor, ale bardziej ogólna odpowiedź byłaby doceniona, gdyby nie była zbyt złożona).


Przede wszystkim zastanawiam się, jak mierzysz procent wykorzystania procesora? Jakie są priorytety A, B i C?
KWubbufetowicz

Wydaje mi się, że mierzyłem użycie procesora topi uważam, że zostały one uruchomione dość prosto z wiersza polecenia: cgexec -g cpu:foo myprogrami ./myprogram. Minęło trochę czasu, więc nie pamiętam z całą pewnością.
Micah Zoltu

Czy to możliwe, że mój program używa więcej niż jednego wątku / procesu? Btw, czy nadal jesteś zainteresowany rozwiązaniem tego problemu?
KWubbufetowicz

Program był aplikacją testową napisaną tylko w celu przetestowania tego zachowania. Celowo było to jedno wątek, aby zawęzić wyniki. Nadal jestem zainteresowany odpowiedzią na to pytanie.
Micheasz Zoltu

Ta strona z RedHat może tu być pomocna. cpu.sharesjest bardzo osobliwą opcją konfiguracji; Polecam dzielenie rzeczy na procesory, jeśli to możliwe, cpuset.cpuszamiast tego.
Wildcard

Odpowiedzi:


3

Grupy C są hieraryczne i są dziedziczone przez wszystkie podprocesy. Więc wszystkie procesy muszą znajdować się w jakiejś grupie. Domyślnie jest to grupa główna i domyślnie ma 1024 udziały, czyli dwa razy więcej niż A i B w twoim przykładzie.

Czas procesora jest dzielony między grupami według wagi przypisanej im w jednostkach centralnych. Akcje.

Gdyby A miał 1024 udziały, a B 512, C 256 i D 256, rozkład czasu procesora wynosiłby A - 50%, B - 25%, C i D 12,5%.


Tak więc każdy proces, który nie został uruchomiony za pomocą cgexec, znajduje się w grupie głównej z 1024 udziałami, równo podzielonymi między wszystkie bezpośrednie dzieci. Jednym z takich bezpośrednich dzieci jest grupa wygenerowana przez wywołanie cgexec. Zatem cgexecproces nieprocesowy uzyskałby 50%, a wszystkie procesy pogrupowane podzieliłyby pozostałe 50%. W ramach pogrupowanych procesów dzielą ich 50% równomiernie, co oznacza, że ​​oba otrzymują 25%. To miałoby sens, ale to nie jest zachowanie, które zaobserwowałem. Widziałem 66%, 33% i 33%. Czy potrafisz zaktualizować odpowiedź, aby zawierała więcej szczegółów i być może przykładową dystrybucję?
Micheasz Zoltu

Och, myślę, że rozumiem. Każdy proces w systemie operacyjnym uruchomiony bez cgexecotrzyma 1024 udziały. Każdy proces uruchamiany za pomocą cgexecpobiera określone udziały. Tak więc w tym przypadku jeden proces otrzymuje 1024 udziały, a pozostałe dwa po 512, co powoduje dystrybucję, którą widziałem. Czy mógłbyś zaktualizować swoją odpowiedź, aby dać trochę więcej jasności, na przykład na przykład?
Micheasz Zoltu

Właściwie to wciąż się nie sumuje. 1024 + 512 + 512 = 2048. 512/2048 == 25%. Nie sądzę, aby ta odpowiedź była prawidłowa, przynajmniej na pozór.
Micah Zoltu

czy masz jakieś inne grupy? Może to wpływać na liczby. Możesz także sprawdzić dokumenty redhat, jest to podobny
Lazy404

Nie ma już nic ważnego do uruchomienia, pudełko było bezczynne przed i po uruchomieniu testowym. Wszystkie przykłady pokazują tylko, co się stanie, gdy wszystkie procesy zostaną uruchomione z konfiguracją cgroups. Nie dyskutuje o tym, co się dzieje, gdy niektóre procesy nie używają cgroups, co staram się rozgryźć.
Micah Zoltu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.