View Full Version : Disabilitare lo swap per un singolo processo senza permessi di root
Cait Sith
16-11-2017, 09:23
Vorrei sapere se c'è un modo per un utente senza permessi di root di lanciare un processo facendo in modo che questo non usi lo swap anche se le impostazioni di sistema lo consentono.
perche'... con i permessi di root riusciresti a farlo?
Cait Sith
16-11-2017, 13:50
Per il singolo processo non lo so, ma se avessi i privilegi di root potrei disabilitare lo swap impostando la swappiness (https://en.wikipedia.org/wiki/Swappiness) a 0.
Nel mio caso non lo posso fare, ma visto che il processo che lancio è un processo utente, chiedere di non usare lo swap per un mio processo mi sembra una richiesta lecita da fare al sistema operativo.
- https://www.linuxquestions.org/questions/linux-software-2/setting-swappiness-for-a-single-process-4175600845/
- https://unix.stackexchange.com/questions/10214/how-to-set-per-process-swapiness-for-linux
pabloski
16-11-2017, 16:30
Vorrei sapere se c'è un modo per un utente senza permessi di root di lanciare un processo facendo in modo che questo non usi lo swap anche se le impostazioni di sistema lo consentono.
A parte i cgroups, l'altro modo e' usare mlock http://man7.org/linux/man-pages/man2/mlock.2.html
Pero' ho dubbi sulla necessita' di fare cio'. Se il sistema e' settato correttamente, un applicativo che necessita di molta ram dovrebbe swappare pochissimo ( e quindi diventa inutile settare manualmente ). Se non c'e' sufficiente ram, o swappi o vai in out of memory.
Cait Sith
16-11-2017, 17:03
La mlock l'avevo vista in giro sul web, solo che mi pare di capire che devo chiamarla sulla singola allocazione, e questo è un problema perchè dovrei modificare pesantemente il codice sorgente e soprattutto capire quali sono le allocazioni più grandi.
I cgroups non li conoscevo, adesso provo a leggere bene per vedere se fanno al caso mio.
Comunque il problema è che il programma in questione è stato scritto con l'ipotesi di swap disabilitato. Purtroppo con certi parametri deve allocare molta memoria e se va in swap intasa la macchina. Quindi, nel caso in cui la memoria richiesta sia troppa, preferisco che le malloc falliscano: in questo caso il programma ritorna un messaggio di errore forzando l'utente a modificare i parametri.
Cait Sith
16-11-2017, 18:16
Come non detto: ho visto che con l'mlock si può fare una sola chiamata per tutte le allocazioni del processo con l'istruzione:
mlockall(MCL_CURRENT | MCL_FUTURE);
Adesso verifico se funzione e poi vi faccio sapere.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.