rtprio
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher)
priority
the priority to run user process with (negative values boost process priority)
Perché sono diversi?
Esistono diverse classi di pianificatori di processi su Linux. Quello predefinito (CFQ) assegna sostanzialmente una quantità uguale di intervalli di tempo a ciascun processo che desidera eseguire e mette in coda le attività eseguibili in modo tale che tutti aspettino in media una quantità di tempo uguale per il proprio turno. Esistono alcune eccezioni a questa regola, ma questa è l'idea di base.
Un'altra classe di scheduler è lo scheduler in tempo reale. Il tempo reale è un po 'diverso, piuttosto accoda le attività eseguibili in uno schema di accodamento equo, il processo in tempo reale otterrà il tempo della CPU non appena sarà necessario al processo, questo elimina un processo in esecuzione dalla CPU per fare spazio al "tempo reale ' processo.
Quali valori possono assumere?
Ciò che fa la "priorità" è alterare la gentilezza del processo in modo che all'accesso il tuo processo principale inizi con una certa gentilezza, anche tutti i processi figlio che generi inizino con la stessa gentilezza.
Ciò ha l'effetto di rendere più probabile che venga pianificato a favore di altri processi concorrenti e l'esperienza dell'utente può essere resa più reattiva/interattiva per i valori di gentilezza inferiori e meno reattiva/interattiva se la gentilezza viene aumentata.
Potrebbe essere importante per i normali utenti che effettuano l'accesso avere una priorità inferiore rispetto ai demoni utilizzabili, ad esempio, o per root avere una priorità più alta all'accesso rispetto a tutto il resto.
Per quanto riguarda il tempo reale, la contesa viene gestita con il campo 'rtprio'. Se hai due attività in tempo reale che vogliono entrambe essere eseguite, il valore 'rtprio' viene utilizzato per determinare quale dei processi scegliere per primo come priorità. Un rtprio più alto produce attività con priorità più alta.
L'impostazione di questo in limits.conf consente alle attività in tempo reale di essere impostate su una particolare fascia di priorità senza bisogno di root per impostare il valore. Ciò non ha alcun effetto sulle attività non impostate per essere eseguite utilizzando uno scheduler in tempo reale.
Il valore 'nice' dovrebbe fare lo stesso di 'rtprio' ma per la pianificazione CFQ standard. Non l'ho mai provato però. Imposta il processo iniziale generato quando PAM imposta questi limiti a quel bel vaule, un utente normale può quindi andare a quel bel livello o superiore senza bisogno di root per impostarli. Se non renice esplicitamente, significa che tutti i processi generati da una shell da quel login (ad esempio) erediteranno il valore nice impostato in limits.conf dal processo genitore che è stato inizialmente creato.
Quali sono le impostazioni predefinite?
I limiti "predefiniti" - tecnicamente sono tutti impostati su ciò che è pid 1 a meno che non sia impostato esplicitamente, i limiti delle risorse vengono ereditati dal processo genitore, se nessun limite è stato definito o sovrascritto da nessuna parte allora l'ereditarietà da init
è l'impostazione predefinita.
Altri valori
data
maximum data size (KB)
Quando un processo viene inizializzato, alloca della memoria nota come "segmento di dati" quando il processo viene copiato in memoria, qui è dove vive lo spazio per i globali, forse qualche altro dato inizializzato e la memoria allocata dall'heap. Il limite controlla l'importo massimo allocato che un processo può richiedere.
È improbabile che tu raggiunga mai questo limite perché malloc() raramente utilizza eccessivamente il segmento di dati per archiviare i dati.
fsize
maximum filesize (KB)
Questo imposta letteralmente solo la dimensione massima in cui un file può essere scritto come con quell'utente.
memlock
maximum locked-in-memory address space (KB)
Quasi tutta la memoria acquisita da un'applicazione è "eliminabile". Questo può essere sostituito. La memoria bloccata in memoria non è mai scambiabile e rimane residente. Questo valore è strettamente controllato perché può essere abusato dalle persone per affamare un sistema di memoria e causare lo scambio. Di solito è utile con le applicazioni di sicurezza (che non vogliono mai che le loro pagine vengano scambiate -- e diventano leggibili dalla partizione di swap).
cpu
maximum CPU time (minutes)
Questo rappresenta la quantità totale di tempo che un processo può consumare su una CPU. Un processo che supera questo valore viene interrotto. Nota che questo NON è lo stesso della quantità di tempo che è trascorso dall'avvio del processo.I.E un limite cputime di 1 minuto impiegherebbe 1 minuto per essere consumato se il processo avesse un utilizzo della cpu del 100%, ma 2 minuti per consumare se il il processo ha utilizzato il 50% di utilizzo.
Cosa succede quando la cpu viene superata?
Al processo viene inviato un kill signal SIGXCPU
che chiude il processo. Questo può quindi essere catturato dal processo genitore e gestito lì.
Solo un processo o l'intero utente non può utilizzare la CPU?
Quasi tutti i limiti a cui si fa riferimento vengono gestiti in base al processo. Tempo CPU incluso. Gli unici che non sono credo di essere il numero totale di accessi e il numero totale di processi di quell'utente.
Alcuni altri trucchi con limiti sono:
- I processi massimi includono il numero di thread leggeri.
- Il limite RSS non fa nulla e non lo ha fatto per un certo numero di anni, è inutile impostarlo.