Mam regularny proces, który nie jest tak ważny, ale zużywa tyle mocy procesora, i mam inny proces, który jest naprawdę ważny, ale spędza większość czasu bezczynnie, ale gdy dostanie pracę, naprawdę potrzebuje dużej mocy obliczeniowej
Próbowałem z systemem nice -20 ./low_priority_process
, a nice --20 ./high_priority_process
jednak wciąż niższy priorytet zużywają znaczną ilość CPU podczas wysokiego proces priorytetem jest w potrzebie, w jaki sposób można uruchomić proces, który będzie naprawdę produktywności lub nawet automatycznego zawieszenia, gdy inny proces wykorzystujący moc procesora
RR
harmonogramu dla procesu o wysokim priorytecie.Odpowiedzi:
Spójrz na cgroups , powinien dostarczyć dokładnie to, czego potrzebujesz - rezerwacje procesora (i więcej). Sugerowałbym przeczytanie kontrolującego priorytetu aplikacji korzystających z cgroups .
To powiedziawszy, umieść ważne, ale często bezczynne procesy w grupie z przydzielonym 95% procesora, a inne aplikacje w inną z przydzielonym 5% - w razie potrzeby uzyskasz (prawie) całą moc na swoje zadania, podczas gdy proces głodny energii osiągnie w tym czasie najwyżej 5%. Kiedy przepływy obliczeniowe znikną, cała wydajność procesora spadnie na pozostałe procesy. Jako korzyść, jeśli utworzysz specjalną grupę (z minimalnymi wymaganiami wydajności) dla takich procesów
sshd
, będziesz mógł zalogować się bez względu na to, co próbuje uzyskać cały procesor, na jaki jest to możliwe - zarezerwowany zostanie pewien czas procesorasshd
.źródło
cpulimit
lubnice
modyfikujące grupę procesów? ponieważ i jeśli cgroup jest wywołaniem API, to nie jestem w stanie przekompilować żadnej z tych aplikacji, aby użyć cgroupsystemd
, przynajmniej w niektórych przypadkach) „kradną” interfejs cgroups od użytkowników, którzy muszą korzystać z interfejsu systemu init (zwykle specjalne polecenie). Przeczytaj link do odpowiedzi i artykuł w Wikipedii. Naprawdę. :)libcgroup
pakiet, który zawiera narzędzia do pracy z cgroups, w tym daemon (cgrulesengd
), który może faktycznie sortować procesy na grupy w zależności od pewnych warunków.Jeśli priorytet procesu (wartość ładna) jest niski, nie będzie to przerywać procesu o wyższym priorytecie. Powodem, dla którego proces o niskim priorytecie wciąż zużywa znaczną ilość procesora, gdy proces o wyższym priorytecie jest uruchomiony, jest fakt, że proces o wyższym priorytecie nie jest tak zajęty. Prawdopodobnie czeka na IO. Użyj,
chrt -p -i 0 $PID
aby uruchomić proces z jeszcze niższym priorytetem niżnice 19 -p $PID
(zakładając, że mówimy tutaj o Linuksie).chrt -p -i 0 $PID
umieszcza proces w „prawdziwym” bezczynnym harmonogramie.http://linux.die.net/man/1/chrt
źródło
Wypróbuj ten przykład, aby uruchomić proces jako proces niski.
Jeśli twoja praca jest niezła, tar xvf asets.zip
Posługiwać się
nice tar xvf resources.zip
Po tym problem
w górę, aby monitorować proces rozpakuj
ps aux | grep „smoła”
Wypróbuj coś konkretnego z cpulimit
cpulimit -l 50 python 0 9999999999> / dev / null &
źródło
-20
to „niski priorytet” i--20
„wysoki priorytet”, spójrz na podwójny myślnik dlanice
polecenia. i tak, rozumiem całkowicie dobrą wartość, ale moje pytanie brzmi: czy istnieje sposób, aby powiedzieć harmonogramowi inne niż używanie dobrej wartości-n -20
,-n 20
itd.htop
lubtop
lubps
lub cokolwiekDla przyszłych przybysze, tutaj jest pełna przykładów
nice
ze stresem .stress
:apt-get install stress
nice -20 stress --cpu 2
top
:To pokazuje, że oba procesory są w pełni zajęte.
nice --20 stress --cpu 1
top
To pokazuje, że proces stresu jednordzeniowego uzyskuje pełny procesor, podczas gdy procesy o niższym priorytecie dzielą pozostałe 1 procesor
stress
wywołań i wywołanie jednego 3-procesowegostress --cpu 3
dałoby 66% procesora każdemuźródło