Czy ustawienie wyższego poziomu dla procesu jest skutecznym sposobem zmniejszenia jego wpływu na obciążenie systemu / czas procesora?

10

Mam zadanie rsync cron, które przesuwa obciążenie serwera i wyzwala alerty monitorowania. Jeśli ustawię uruchamianie zadania z wysokim ładnym poziomem, czy to skutecznie zmniejszy wpływ, jaki ma on na wartości obciążenia systemu?

Gregg Leventhal
źródło
W przypadku rsync bardziej efektywne byłoby użycie jego przełączników w celu zmniejszenia kompresji lub ograniczenia wykorzystania przepustowości.
Nemo

Odpowiedzi:

9

Nie zmniejszy to obciążenia.

Pozwoli to innym procesom częściej wykorzystywać czas procesora tylko wtedy, gdy istnieje możliwość rywalizacji o zasoby (kilka procesów „konkuruje” o zbyt mało dostępnego czasu procesora).

Totor
źródło
9

Zmiana ładnej wartości nie zmniejszy bezpośrednio obciążenia systemu. Można go jednak wykorzystać, aby pozostawić więcej zasobów dostępnych dla pozostałych procesów, co, jak podejrzewam, jest tym, czego naprawdę chcesz.

Od http://linux.101hacks.com/monitoring-performance/hack-100-nice-command-examples/

Jądro decyduje o tym, ile czasu procesor jest wymagane dla procesu na podstawie dobrej wartości. Możliwy dobry zakres wartości to: -20 do 20. Proces, który ma niezłą wartość -20, ma bardzo wysoki priorytet. Proces o niezłej wartości 20 ma bardzo niski priorytet.

Tak więc, chcesz uruchomić zadanie cron na wyższym poziomie niż inne procesy, jeśli chcesz mieć pewność, że inne procesy będą miały priorytet.

Aby to zrobić, chcesz, aby skrypt cron był wykonywany w następujący sposób:

/bin/nice -n 10 /path/to/cron-script

Spowoduje to uruchomienie skryptu cron z wartością dodaną zwiększoną o 10. Prawdopodobnie chcesz trochę przetestować, aby znaleźć niezłą (nie zamierzoną) równowagę między pozostałymi procesami a czasem wykonania skryptu.

Zobacz także Jak miło działa? oraz http://www.cyberciti.biz/faq/change-the-nice-value-of-a-process/, aby uzyskać więcej informacji.

M_dk
źródło
5

Zmiana ładnego poziomu procesu raczej nie wpłynie na wartość obciążenia systemu. Wartość obciążenia systemu to średnia długość kolejki uruchomień , która jest w zasadzie liczbą procesów, które chcą korzystać z procesora.

Jeśli uruchamiasz proces związany z procesorem (rsync nie jest, ale tylko na przykład), to zawsze będzie chciał wykorzystać czas procesora, ilekroć jest dostępny. Ponieważ zawsze chce działać, przyczyni się do obciążenia wartości 1,0 do wartości obciążenia systemu. Nie ma znaczenia, jaki jest ładny poziom procesu, ponieważ na kolejność procesów nie ma wpływu średnia długość kolejki uruchamiania.

Greg Hewgill
źródło
Należy o tym pamiętać. Jeśli uruchomisz wiele ładnych procesów, obciążenie systemu będzie wyglądać bardzo wysoko, nawet jeśli w rzeczywistości żadna praca nie zostanie spowolniona. W niektórych przypadkach ładunek ujawnia prawdziwy problem, tj. Linux nie jest w stanie pozwolić, aby proces nicowania wykorzystał wszystkie zasoby, które mogłyby faktycznie wykorzystać bez problemu (wszystkie z nich czekały przez większość czasu na brak korzyści).
Nemo
3

Możesz rozważyć 3 sposoby zmniejszenia wpływu procesu na obciążenie systemu / czas procesora:

  • Użyj nicepolecenia, aby ręcznie obniżyć priorytet zadania.
  • Użyj cpulimitpolecenia, aby wielokrotnie wstrzymywać proces, aby nie przekroczył określonego limitu.
  • Użyj Linuksa built-in control groups, mechanizmu, który nakazuje harmonogramowi ograniczenie ilości zasobów dostępnych dla procesu.

Zasoby

http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups

RafaSashi
źródło
Na pewno chcesz użyć cgroups do zrównoważenia zasobów systemowych. Pozwala to na partycjonowanie zasobów według własnego uznania (procesor, pamięć, IO dysku, przepustowość dysku), aw sytuacjach niskiego obciążenia nawet procesy o niskim priorytecie uzyskują maksymalną wydajność, w przeciwieństwie do sztuczek w trybie użytkownika, które często kończą się spowalnianiem procesu o niskim priorytecie.
Mikko Rantalainen