Come eseguire un programma con un solo core della CPU?


28

Sto cercando di eseguire un sacco di script relativi a un server di gioco in Terminator. L'unico problema è quando lo faccio, Terminator rileva tutti i miei core della CPU e il PC è in ritardo. C'è un modo per avviarlo ma indurlo a pensare che ho solo 1 core della CPU?


2
Ciao, sembra che potresti soffrire del problema xy qui, a volte vale la pena guardare indietro a ciò che vuoi ottenere e non alla soluzione tentata che hai provato in quanto sembra che ciò di cui hai bisogno sia eseguire un programma senza rallentare il tuo PC, non solo per eseguire qualcosa su un core. Tuttavia, questa è un'ottima domanda. +1
Valità,

Risposte:


44

Non sta terminatorfacendo lo "spreading" su tutta la CPU di un determinato processo. Lo stesso Linux (il kernel) lo sta facendo. Un'attività (processo) è pianificata come disponibile per l'esecuzione su tutte le CPU per impostazione predefinita; se usa i thread può usare più di una CPU alla volta.

Per limitare un processo a una CPU specifica, utilizzare il comando taskset.

taskset --cpu-list 1,2 my_command 

Questo comando impone a my_command di funzionare solo sulle CPU n. 1 o n. 2.

Per saperne di più, digita man taskseto cerca "affinità CPU linux" (prima hit qui ).


2
A proposito, potresti anche provare a rinominare i processi "cattivi", riducendo la loro priorità di pianificazione.
Matteo Italia,

@MatteoItalia Ho scoperto che Ubuntu 13.10 e 14.04 ignorano il buon livello di default. È necessario aggiungere kernel.sched_autogroup_enabled = 0a /etc/sysctl.confper farlo funzionare. Tuttavia, ho anche scoperto che 13.10 frequentemente il panico del kernel durante l'avvio, se il gruppo automatico è disabilitato.
Kasperd,

Che dire dei processi figlio del processo genitore? Ereditano l'affinità core / cpu del loro processo genitore?
yildizabdullah,

5

Sebbene un'altra risposta abbia già dato la risposta letterale, esplorerei la possibilità che ciò non avvenisse nel modo giusto. Invece dovresti eseguire uno script che non vuoi rallentare il computer (come script non interattivi) usando il nicecomando.

Per fare questo semplicemente aggiungi il prefisso al comando che desideri eseguire con nice, ad esempio: nice command_to_run Ciò determinerà la prioritizzazione del programma sotto altre attività e non rallenterà il tuo computer. Uso spesso questa tecnica quando eseguo una compilazione lunga che altrimenti rallenterebbe il mio PC a una scansione, questo ha il vantaggio di consentire al programma di utilizzare tutti i core quando la macchina non è occupata ma la interromperà rapidamente usandoli quando esegui qualcosa altro.


Se uso un comando come "simpatico terminatore aperto" il terminatore funzionerà con tutti i core della CPU a prescindere?
user245115

Oh, a proposito, se muovo il mouse e non si apre nulla, utilizzerà tutte le CPU? Quanto tempo ci vuole dopo che smetto di spostare il mouse affinché utilizzi tutte le CPU? E posso usarlo con tasket? (Sì, sono un vero noob con Linux.)
user245115

@ user245115 Se si utilizza l'utility nice, è possibile che terminator utilizzi più core della CPU, tuttavia smetterà immediatamente di utilizzare tali core se un altro programma (non in esecuzione con nice) vuole usarli in modo da non subire rallentamenti, tuttavia usali se altrimenti sono completamente gratuiti e inutilizzati. Ciò non dovrebbe essere influenzato dall'uso del mouse o da qualsiasi altra interazione con il programma.
Vality,

@ user245115 Dovrebbe anche essere possibile usarlo con tasket semplicemente scrivendo taskset nice open terminatorper usare entrambi. Tuttavia, sarà eccessivo poiché verranno utilizzati due programmi diversi per ottenere entrambi l'effetto di ridurre l'utilizzo delle risorse del programma.
Vality,

@ user245115 Nel momento in cui esegui qualsiasi altra azione (come spostare il mouse) il terminatore avrà meno tempo di CPU, questo è effettivamente istantaneo e non appena interrompi altre attività lo userà di nuovo (anche efficacemente istantaneo)
Vality
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.