Jak uruchomić program z tylko jednym rdzeniem procesora?

28

Próbuję uruchomić kilka skryptów związanych z serwerem gier w Terminatorze. Jedynym problemem jest to, że kiedy to robię, Terminator wykrywa wszystkie moje rdzenie procesora i opóźnienia komputera. Czy jest jakiś sposób, aby go uruchomić, ale oszukać, że mam tylko 1 rdzeń procesora?

użytkownik245115
źródło
2
Cześć, wygląda na to, że cierpisz na problem z Xy, czasem warto spojrzeć wstecz na to, co chcesz osiągnąć, a nie na próbę rozwiązania, które wypróbowałeś, ponieważ wydaje się, że potrzebujesz uruchomić program bez spowalniania twojego PC, nie tylko żeby uruchomić coś na jednym rdzeniu. Niemniej jednak jest to bardzo dobre pytanie. +1
Vality
powiązane: unix.stackexchange.com/questions/23106/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

44

Nie chodzi o to, terminatorże „rozkłada się” na cały procesor danego procesu. Sam Linux (jądro) robi to. Domyślnie zadanie (proces) jest zaplanowane do uruchomienia na wszystkich procesorach; jeśli używa wątków, może używać więcej niż jednego procesora na raz.

Aby ograniczyć proces do określonego procesora, użyj polecenia taskset.

taskset --cpu-list 1,2 my_command 

To polecenie zmusza my_command do uruchamiania tylko na procesorach nr 1 lub 2.

Aby dowiedzieć się więcej, wpisz man tasksetlub wyszukaj „powinowactwo procesora do systemu Linux” (pierwsze kliknięcie tutaj ).

Rmano
źródło
2
Nawiasem mówiąc, możesz także spróbować przywrócić „złe” procesy, zmniejszając ich priorytet w harmonogramie.
Matteo Italia
@ MatteoItalia Odkryłem, że Ubuntu 13.10 i 14.04 domyślnie ignorują niezły poziom. Trzeba dodać kernel.sched_autogroup_enabled = 0, aby /etc/sysctl.confzrobić to praca. Jednak zauważyłem również, że 13.10 często panika jądra podczas rozruchu, jeśli autogrupa jest wyłączona.
kasperd
Co z procesami potomnymi procesu nadrzędnego? Czy dziedziczą powinowactwo rdzenia / procesora swojego procesu macierzystego?
yildizabdullah
5

Chociaż inna odpowiedź dała już dosłowną odpowiedź, zbadałbym możliwość, że nie zrobiono tego we właściwy sposób. Zamiast tego powinieneś uruchomić skrypt, którego nie chcesz spowalniać komputera (np. Nieinteraktywne skrypty) za pomocą nicepolecenia.

Aby to zrobić, po prostu przedrostek polecenia, które chcesz uruchomić, na przykład: nice command_to_run Spowoduje to, że program zostanie pozbawiony priorytetów poniżej innych zadań i nie spowolni twojego komputera. Często używam tej techniki podczas długiej kompilacji, która w innym przypadku spowolniłaby mój komputer do przeszukiwania, ma to tę zaletę, że pozwala programowi używać wszystkich rdzeni, gdy komputer nie jest zajęty, ale szybko przestanie go używać, gdy uruchomisz coś jeszcze.

Rzeczywistość
źródło
Jeśli użyję polecenia typu „ładny otwarty terminator”, czy terminator będzie działał ze wszystkimi rdzeniami procesora, niezależnie od tego?
user245115
Aha, a propos, jeśli poruszę myszką i nic się nie otwiera, czy użyje wszystkich procesorów? A jak długo trzeba czekać, aż przestanę poruszać myszą, aby wykorzystać wszystkie procesory? Czy mogę tego używać z zestawem zadań? (Tak, jestem prawdziwym noobem z Linuksem.)
user245115
@ user245115 Jeśli użyjesz miłego narzędzia, możliwe, że terminator użyje wielu rdzeni procesora, jednak natychmiast przestanie używać tych rdzeni, jeśli inny program (nie działający z ładnym) chce ich użyć, więc nie wystąpi spowolnienie, jednak będzie używaj ich, jeśli są całkowicie bezpłatne i nieużywane. Nie powinno na to wpływać użycie myszy ani żadna inna interakcja z programem.
Vality
@ user245115 Powinno być również możliwe użycie tego z zestawem zadań, po prostu pisząc, taskset nice open terminatoraby użyć obu. Będzie to jednak przesada, ponieważ będziesz używać dwóch różnych programów, aby osiągnąć efekt zmniejszenia zużycia zasobów przez program.
Vality
@ user245115 Gdy tylko podejmiesz jakąkolwiek inną akcję (np. poruszanie myszą), terminator otrzyma mniej czasu procesora, jest to natychmiastowe i gdy tylko przerwiesz inne działanie, użyje go ponownie (również efektywnie natychmiast)
Vality