linux user group brescia

immagine del castello

Archivio della mailing list

[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