Mam program Podczas pracy temperatura procesora wzrasta z 50 do 80 stopni Celsjusza, co jest moim głównym zmartwieniem.
Mogę kontrolować częstotliwość procesora, aby go spowolnić, ale inne procesy również zostaną spowolnione, czego nie chcę.
Czy możliwe jest spowolnienie określonego procesu bez wpływu na inne procesy w celu utrzymania niskiej temperatury procesora?
Mój system operacyjny to Ubuntu 10.10.
Próbowałem ustawić priorytet procesu
nice -n 15 myprogram
i nie jestem pewien, czy to zadziała. Procesor ma 77 Celsjusza.Czy
nice
ustawia tylko względny priorytet procesu względem innych procesów? To znaczy, jeśli inne procesy nie są uruchomione, czy ten udoskonalony proces będzie działał szybko? Chciałbym ustawić proces, aby cały czas działał powoli.
9
Odpowiedzi:
CPULimit jest dokładnie tym, czego potrzebujesz. Uruchom program, a następnie uruchom cpulimit dla nazwy programu lub PID, określając, jaki procent ma być ograniczony.
Następujące polecenie ogranicza proces na PID 7777 do 5% użycia procesora.
Alternatywnie możesz użyć nazwy pliku wykonywalnego:
Lub bezwzględna ścieżka do pliku wykonywalnego:
Zauważ, że procent dotyczy wszystkich rdzeni; więc jeśli masz 4 rdzenie, możesz użyć 400%.
źródło
Można zmienić tą uruchomionego procesu, aby nadać jej bardziej lub mniej priorytet (tzw „nice value”). Zauważ, że skala priorytetów UNIX jest nieco sprzeczna z intuicją: wartości ujemne oznaczają, że proces jest faworyzowany w stosunku do równoczesnych procesów, tj. Ma „wyższy” priorytet.
Możesz zatem spróbować spowolnić proces, biorąc pod uwagę jego PID poprzez:
Za każdym razem, gdy to uruchomisz, proces „ładna wartość” jest zwiększany o 1; możesz użyć wartości całkowitych innych niż
+1
oczywiście.Polecenie nice pozwala rozpocząć proces z korektą wartości nice +10 (zmień to za pomocą opcji
-n
). Na przykład:Jednak „ładna wartość” wpływa tylko na to, jak bardzo harmonogram preferuje uruchomienie określonego procesu w porównaniu z innymi w systemie: jeśli komputer jest w zasadzie na biegu jałowym, podniesienie „ładnej wartości” jednego procesu nie powstrzyma tego procesu przed pobraniem 100% PROCESOR. Cytuję na stronie getpriority (2) : (Podkreślenie dodane przeze mnie.)
Powodem tego jest sposób, w jaki procesy są uruchamiane na jądrze typu UNIX: za każdym razem, gdy jądro decyduje się na uruchomienie procesu, proces ten ma pełną kontrolę nad rdzeniem procesora przez określony (stały i krótki) okres czasu. „Dobra wartość” może wpływać na to, jak często program planujący jądro chce nadać przedział czasowy procesowi, ale nie można zmienić faktu, że po zaplanowaniu proces działa nieprzerwanie przez ustalony czas.
Dlatego, poza spowolnieniem procesora, nie ma sposobu, aby proces działał wolniej, jeśli w systemie nie ma innych procesów, które mogłyby walczyć o dostęp do procesora.
źródło
nice
nie zrobi nic, aby utrzymać twój procesor chłodny. Nie jest przeznaczony do takiego działania.grupy c zostały utworzone właśnie z tego powodu.
http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
Zapoznanie się z nimi zajmuje trochę czasu i uważam, że potrzebujesz dostępu do konta root, aby je skonfigurować, ale wszystko to można wykonać za pomocą skryptów. Nowsze Ubuntus ma plik .conf, dzięki czemu nie musisz pisać własnego skryptu. Nie jestem pewien co do 10.10.
Miłym miejscem do rozpoczęcia jest ta odpowiedź: https://askubuntu.com/a/94743/170177
Zauważ, że cgroups jest wciąż w fazie rozwoju, więc niektóre funkcje mogą być niedostępne w twoim obecnym jądrze.
Korzystanie z cpu.shares cgroups nie robi nic, czego nie zrobiłaby dobra wartość. Wygląda na to, że naprawdę chcesz zdławić procesy, co z pewnością można zrobić.
Musisz użyć skryptu lub dwóch i / lub edytować /etc/cgconfig.conf, aby zdefiniować parametry, które chcesz.
W szczególności chcesz edytować wartości cpu.cfs_period_us i cpu.cfs_quota_us . Proces będzie wtedy mógł działać przez cpu.cfs_quota_us mikrosekund na cpu.cfs_period_us mikrosekund.
Na przykład:
Jeśli cpu.cfs_period_us = 50000 i cpu.cfs_quota_us = 10000, wówczas proces otrzyma maksymalnie 20% czasu procesora, bez względu na to, co się dzieje.
Na tym zrzucie ekranu podałem procesowi 2% czasu procesora:
Jeśli chodzi o proces, przebiega on w 100%.
Z drugiej strony ustawienia cpu.shares mogą i nadal będą wykorzystywać 100% czasu bezczynności procesora.
W tym podobnym przykładzie podałem proces cpu.shares = 100 (z 1024):
Jak widać, proces ten zużywa cały czas bezczynności procesora.
Bibliografia:
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html
źródło
systemd
robi to trochę inaczej. Na przykład Ubuntu Trusty wydaje się być wyposażony w dwie usługi do zarządzania grupami. Zaktualizuję, gdy będę wiedział więcej.renice
?renice
nie zmienia ilości używanego procesora, po prostu zmienia priorytet procesu w harmonogramie. cgroups mogą zmienić limit procesora w dowolnym momencie. Od czasu opublikowania tej odpowiedzi do grup cg dodane zostały różnego rodzaju poprawki i są bardzo potężne.renice does not change the amount of CPU uses
Wiem o tym;) Właśnie opublikowałem jako przykład programu, który zmienia rzeczy w czasie wykonywania. Dziękuję za odpowiedź, spróbuję cgroups.