Non avendo trovato nessun tool per settare l'affinity di un processo su un particolare processore in sistemi SMP ho provato a scriverne una io
In teoria funziona, lettura e scrittura dell'affinity vanno a buon fine, bisogna però capire se funziona sul serio, e io sul kernel 2.6.4 non ho trovato un modo per vedere a manina l'affinity di un processo da qualche parte in /proc/<pid>
Premettendo che:
1- Probabilmente tutto questo è inutile perchè ci sarà gia un tool che lo fa meglio e sono rincoglionito e non l'ho trovato
2- Probabilmente in realtà non funziona oppure ho toppato il modo di settare i processori, ossia con un banale int
3- Sono anni che non programmo in C e non mi ricordavo nulla, ho dovuto tirare fuori il K&R :rollo:
4- Il programmino serve giusto allo scopo, non fa controlli particolari sulla validita dei parametri
Il programma si usa così:
salvate il file sorgente chiamandolo come vi pare e lo compilate con gcc, es gcc -o pippo pippo.c
eseguite il tutto con:
pippo PID CPU per settare l'affinity del processo PID sulla CPU cpu dove 0 è il primo precessore, 1 il secondo, ecc.
pippo PID per sapere che affinity ha il processo e il programma vi risponde dicendo 1 se è il primo processore, 2 se è il secondo, ecc. (si lo so, quando la setti parte da 0, ma non avevo voglia di cambiare). Se vi risponde con un numero maggiore del numero di processori che avete è perchè il processo può girare su tutti i processori. Non ho idea se si possa settare l'affinity su x processori dove x è minore del numero di processori ma maggiore di 1
Vabbè, il mirabolante codice lo trovate qui:
http://alexmaz.supereva.it/schedtest.txt
Se qualcuno con un sistema SMP lo volesse provare
Il tutto è stato scritto e testato su un kernel 2.6.4-gentoo con glibc 2.3.4. Lo dico perchè pare che queste syscall cambino ogni 2x3 e sulle glibc prima delle 2.3.2 sono diverse, stesso vale per i vari kernel, possono cambiare da release a release
Per la cronaca, ho preso spunto da qui:
http://linuxgazette.net/103/pramode.html