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 ( A
i 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, C
otrzymuje 66% procesora, A
a B
dzieli 33%. Jeśli zabiję C
wtedy A
i B
dostać 50% każda (zgodnie z oczekiwaniami).
Dlaczego C
dostaje 66%? W tym scenariuszu spodziewałbym się po 33%, a może 50% (C), 25% (A) i 25% (B). 66% C
nie zadziała, bez względu na to, jak robię matematykę.
Ogólnie chcę zrozumieć, w jaki sposób procesy uruchamiane bez cgexec
interakcji z procesami uruchamianymi, cgexec
jeś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).
top
i uważam, że zostały one uruchomione dość prosto z wiersza polecenia: cgexec -g cpu:foo myprogram
i ./myprogram
. Minęło trochę czasu, więc nie pamiętam z całą pewnością.
cpu.shares
jest bardzo osobliwą opcją konfiguracji; Polecam dzielenie rzeczy na procesory, jeśli to możliwe, cpuset.cpus
zamiast tego.