Limit BOINC cpu

BOINC è un eccellente modo per fare del bene al mondo, semplicemente con la potenza del computer che non usate. Lo consiglio caldamente.

Ha solo una controindicazione: il calore. A meno che siate su un fisso con un’ottima ventola (e non vi dispiaccia averla sempre al massimo), dovrete limitare il suo uso della CPU. Certo, c’è nel programma un’opzione per farlo… ma lo fa in modo strano.

WOOSH …vrrrrrrrrrrrrrrrrrrrrrrrrrrr WOOOSH …vrrrrrrrrrrrrrrrrrrrrrrrrrrr WOOSH

Cosa stava succedendo? Che BOINC, anziché utilizzare la CPU al 20% per tutto il tempo, la usava… al 100% per il 20% del tempo. Neppure sfalsata: tutti gli otto core che scaldano insieme. Cosa che, secondo me, stressa inutilmente il processore… e di sicuro le mie orecchie!

Come rimediare? Apparentemente, l’unica è usare cpulimit. Ecco il risultato:

Screenshot from 2014-01-24 13:18:28

Ma non è ovvio come usarlo: cpulimit richiede di essere lanciato sul singolo processo da limitare; ma il vero lavoro è fatto da sottoprocessi, che vengono continuamente lanciati e terminati da quello principale. Bisognerebbe costantemente vigilare per nuovi processi; o resteranno non limitati.

Quello che hanno in comune tutti questi processi è essere posseduti dall’utente BOINC. Quello che vorrei, in effetti, è settare un limite per la CPU consumata in percentuale dall’utente BOINC.

Apparentemente, non c’è modo.

…sì, c’è un sistema interno al kernel per settare i limiti per gli utenti; ma aparentemente permette solo di impostare il tempo totale concesso -non in percentuale.

Così, ho fatto la cosa ovvia: mi sono scritto un programma io. Lo posto qui, se a qualcuno può essere utile a perderci un po’ meno tempo.

(noterei che la mia prima versione, quella più ingenua, funzionava… ma i processi cpulimit venivano invocati ripetutamente sullo stesso processo. Il risultato fu che, la sera mi sono reso conto che BOINC si era fermato, perché tutta la CPU era occupata… dai processi cpulimit! La nuova versione evita il problema)

Eccolo qui

 #!/bin/bash

 for p in $(ps -u boinc -o pid=) #per ogni processo (identificato dal PID) dell'utente BOINC
 do
 if [ -z $(fgrep $p cpulimited)] #controlliamo non sia già stato limitato
 then
 cpulimit -p $p -l $1 & #se non lo è limitiamo
 fi
 echo $p >> cpulimited_new #che lo fosse già o no, ora è limitato
 done

 mv cpulimited_new cpulimited #sovrascriviamo la vecchia lista

Per utilizzarlo basta salvarlo in un file, ed aggiungere a “/etc/crontab” la riga

* *     * * *   root    §/path/to/file§ §limit§

dove le § denotano le parti da sostituire: ‘/path/to/file’ è la posizione dove avete salvato lo script; ‘limit’ è il numero che indica quanta CPU volete lasciargli. Ad es, con 15 nessun processo BOINC dovrebbe superare il 15%.

Questo limita i processi una volta al minuto; o ad intervalli diversi a seconda di come cambiate gli asterischi iniziali. Se non volete usare Cron, potete naturalmente incapsulare tutto in un ciclo while con sleep; ed aggiungerlo ai programmi di startup.

Suggerimenti per migliorare?

Advertisements

Informazioni su francescodondi

Qui il mio curriculum online. "nerd score"
Questa voce è stata pubblicata in Uncategorized e contrassegnata con , , , , . Contrassegna il permalink.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...