Process 'gentilezza' vs. 'priorità'

71

Durante l'esecuzione di top , posso vedere questo output di esempio (abbreviato):

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

Ci sono due valori a cui sono interessato: PR (Priorità) e NI (Cortesia).

Se ho capito cosa ho già scoperto correttamente, entrambi determinano quanto tempo CPU un processo otterrà in contrasto con altri processi. Ma qual è la differenza tra questi valori?

Potresti descrivere per favore come manipolare quei valori di un processo e in quali circostanze questo potrebbe essere utile?

    
posta Byte Commander 05.08.2015 - 11:17

2 risposte

71

il valore piacevole è uno spazio utente e PR priorità è l'effettiva priorità del processo che usa il kernel Linux. Le priorità del sistema linux sono da 0 a 139, in cui da 0 a 99 in tempo reale e da 100 a 139 per gli utenti. un buon intervallo di valori va da -20 a +19, dove -20 è più alto, 0 predefinito e +19 è il più basso. la relazione tra valore piacevole e priorità è:

PR = 20 + NI

quindi, il valore di PR = 20 + (-20 to +19) è compreso tra 0 e 39 che esegue il mapping da 100 a 139.

Secondo il manuale in alto:

  

PR - Priorità La priorità di pianificazione dell'attività. Se vedi   'rt' in questo campo, significa che l'attività è in esecuzione in 'tempo reale'   priorità di pianificazione.

NI è un bel valore del compito.

  

NI - Nice Value Il bel valore del compito. Un bello negativo   valore significa maggiore priorità, mentre un valore positivo positivo significa inferiore   priority.Zero in questo campo significa semplicemente che la priorità non verrà regolata   nel determinare la capacità di spedizione di un'attività

Modifica: Di default quando viene avviato un programma in Linux, viene lanciato con la priorità di '0'. Tuttavia puoi cambiare la priorità dei tuoi programmi con uno dei seguenti metodi.

  1. Puoi lanciare un programma con la priorità richiesta usando

    nice -n nice_value program_name
    
  2. puoi anche cambiare la priorità di un processo già in esecuzione usando

    renice -n nice_value -p process_id
    
risposta data pl_rock 05.08.2015 - 11:51
19

Qual è la priorità e perché dovrei preoccuparmi?

Quando si parla di priorità dei processi si tratta solo della gestione del tempo del processore. Il Processore o la CPU è come un gioco di giocoleria umano allo stesso tempo. A volte possiamo avere abbastanza spazio per affrontare diversi progetti. A volte possiamo concentrarci solo su una cosa alla volta. Altre volte qualcosa di importante si apre e noi vogliamo dedicare tutte le nostre energie alla risoluzione di questo problema, mentre mettiamo compiti meno importanti nel dimenticatoio.

In Linux possiamo impostare le linee guida che la CPU deve seguire quando osserva tutte le attività che deve eseguire. Queste linee guida sono chiamate gentilezza o bel valore. La scala di niceness di Linux va da -20 a 19. Più basso è il numero più priorità ottiene l'attività. Se il valore di cortesia è alto come il 19, l'attività verrà impostata sulla priorità più bassa e la CPU la elaborerà ogni volta che ne ha la possibilità. Il valore piacevole predefinito è zero.

Usando questa scala possiamo allocare le risorse della CPU in modo più appropriato. I programmi con priorità più bassa che non sono importanti possono essere impostati su un valore più elevato, mentre i programmi ad alta priorità come i daemon e i servizi possono essere impostati per ricevere più focus della CPU. Puoi anche dare a un utente specifico un valore più basso per tutti i suoi processi in modo da limitare la loro capacità di rallentare i servizi di base del computer.

Source

Imposta la priorità per i nuovi processi con nice , ad esempio

nice -n 10 firefox

per processi esistenti

renice 10 -p $(pgrep firefox)

Per impostare la priorità <0 è necessario sudo , ad esempio:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

ma non per una priorità >=0

Esempio

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

Altro esempio

Per ridenominare tutti i processi in esecuzione per un utente specifico

renice 20 -u user_name
    
risposta data A.B. 05.08.2015 - 13:06

Leggi altre domande sui tag