[LugBS] Processori multi-core e linux
Diego Guella
diego.guella a sircomtech.com
Mar 10 Feb 2009 15:21:54 UTC
From: "Vaghetti Roberto"
>Salve
>Una curiosità.
>Avendo acquistato recentemente un computer quad-core ho notato che
>invece di un un vero e proprio parallelismo del programma su tutti i
>core si ha invece un utilizzo specifico di un core per
>programma/processo. Infatti quando parte un programma che richiede una
>intensa elaborazione vedo uno dei core fumare (100%) mentre gli altri
>riposano tranquilli.
Senza andare in ambiti complicati da teoria dei sistemi operativi:
Ogni thread in un dato istante può essere in esecuzione su un solo core.
Se quel processo ha un solo thread, può al massimo usare al 100% un solo
core.
Se quel processo ha 10 thread, ma 9 thread dormono per motivi noti agli
sviluppatori, e un solo thread fa l'"elaborazione intensa",
questo thread userà al 100% un solo core, e gli altri _potrebbero_ essere
messi in esecuzione su un altro/altri core, ma se stanno dormendo, non
useranno la cpu perchè non hanno niente da fare.
In altre parole, un processo deve essere stato sviluppato per sfruttare la
potenza di elaborazione di più core, altrimenti si comporta
come hai visto nel tuo caso.
>Mi chiedevo:
>Come avviene in linux l'assegnazione dei processi ai vari core?
Non so come avvenga, ma tieni presente che di recente (kernel 2.6.24 se non
sbaglio) è stato introdotto un nuovo scheduler, chiamato CFS (the Completely
Fair Scheduler)
>E' possibile assegnare/bloccare con linux un processo/programma
>specificatamente ad uno o piu' dei core (per esempio per evitare
>rallentamenti indesiderati di un processo per mancanza di risorse) e
>come?
Si, come ti è stato detto questo si chiama "cpu affinity". (purtroppo non so
come si imposta su linux, ma non credo sia difficile trovarlo)
In pratica invece che lasciare il sistema operativo libero di mettere in
esecuzione il processo (e i suoi thread) dove vuole, lo si forza a usare
solo alcuni core.
Tieni presente che, se il tuo programma che fa elaborazioni intense è
single-threaded:
-cambiando la cpu affinity non puoi renderlo più veloce
-su un quad-core non ti causerà rallentamenti dovuti alla mancanza di cpu,
perchè ce ne sono altre 3 disponibili, e il sistema operativo è abbastanza
intelligente da mettere in esecuzione gli altri processi su quelle.
>grazie
>roberto
Ciao,
Diego
Maggiori informazioni sulla lista
Lug
|