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.