2012-06-19 12 views
7

Sto estendendo il kernel di Linux per controllare la frequenza di alcuni thread: quando sono pianificati su un core (qualsiasi core!), La frequenza del core viene modificata scrivendo la corretta p -stato al registro IA32_PERF_CTL, come suggerito nel manuale di Intel. Tuttavia, quando sono programmati diversi thread con frequenze "personalizzate" diverse, sembra che il throughput di tutto il thread aumenti, come se tutti i core funzionassero alla frequenza massima impostata.Intel MSR ridimensionamento della frequenza per - thread

Ho eseguito molte prove e misurazioni in diverse condizioni di carico e configurazione, ma il risultato è lo stesso. Dopo alcune prove con CPUFreq (senza app in esecuzione, ho impostato frequenze diverse su ogni core, e infine le frequenze misurate, con cpufreq-info -w, erano uguali), mi chiedo se i core della CPU possono in realtà eseguire in diversi , frequenze indipendenti o se esistono criteri o vincoli hardware.

Infine, esiste un modello di CPU che rende fattibile questo ridimensionamento di frequenza a grana fine?

La CPU che sto usando è Intel Core i5 750

+2

I core della CPU non possono funzionare con tensioni diverse, quindi questo limita la capacità di impostare coppie di frequenza/tensione diverse. –

+0

In generale, ciascuna generazione Intel porta una maggiore separazione tra i core e consente un controllo più dettagliato su queste cose. – ugoren

risposta

4

Non è possibile controllare le singole frequenze del core per i nuclei attivi. È possibile, tuttavia, controllare che le frequenze di tutti i core attivi siano uguali. Le ragioni sono nelle risposte precedenti: tutti i core sono sullo stesso piano di tensione attivo. Speriamo che i processori Haswell di nuova generazione consentano di controllare separatamente ogni core.

2

cpufreq-info visualizzerà informazioni su quali nuclei devono essere sincroni nei loro P-states:

[[email protected] ~]# cpufreq-info 
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009 
Report errors and bugs to [email protected], please. 
analyzing CPU 0: 
    driver: acpi-cpufreq 
    CPUs which run at the same hardware frequency: 0 1 <---- THIS 
    CPUs which need to have their frequency coordinated by software: 0 <--- and THIS 
    maximum transition latency: 10.0 us. 

Almeno a causa di suggerirei di passare attraverso le interfacce cpufreq invece di impostare direttamente i registri, oltre a rendere possibile l'esecuzione su CPU non Intel che potrebbero avere requisiti non comuni.

Verificare inoltre come far rimanere i thread del kernel su core specifici, per evitare commutazioni impreviste, se non lo si è già fatto.

+0

Grazie a tutti per le risposte! Ora ho ottenuto il quadro generale. – user1466329

+0

Qualcuno ha provato con Haswell? Perché non ho una macchina con tale architettura, e mi chiedevo se ora è possibile farlo; nel caso lo facesse, riproverò. In secondo luogo, non penso di poter passare a cpufreq, dal momento che sto lavorando a livello di pianificazione. Per dare una visione d'insieme del progetto su cui sto lavorando, è finalmente finalizzato ad ottenere una pianificazione delle risorse consapevole degli obiettivi e dello stato: quindi non posso lasciare a qualcun altro la decisione. – user1466329

+0

L'idea di impostare l'affinità principale, tuttavia, ha molto senso. Ad ogni modo, dovrei anche capire la granularità del tempo nell'impostazione della frequenza. – user1466329

3

Penso che manchi un pezzo grosso dell'immagine!

Leggere i domini di alimentazione e degli orologi. Tutti i core del processore all'interno di un dominio funzionano allo stesso stato P (cioè, la stessa frequenza e tensione). Lo stato P in cui verranno eseguiti tutti i core in quel dominio sarà sempre lo stato P del core che richiede il più alto stato P in quel dominio. Gli MSR non riflettono affatto questo, né le interfacce che espone il kernel.

Anandtech ha un buon articolo su questo: http://www.anandtech.com/show/2658/2

"Questo è tutto molto simile al Phenom di AMD, ma dove i due differiscono è nel modo in cui gestiscono la gestione dell'alimentazione Mentre AMD permetterà singoli core a richiesta. Diverse velocità di clock, Nehalem tenta di eseguire tutti i suoi core alla stessa frequenza, se un core è inattivo allora è semplicemente power gated e il core è effettivamente disattivato. "

Non ho collegato un misuratore di potenza a SB/IB, ma suppongo che il comportamento sia lo stesso.

0

Voglio ringraziare tutti per il contributo! Ulteriori indagini, ho trovato altri dettagli che condivido con la comunità.

Come suggerito, Nehalem colloca tutti i core in un singolo dominio di clock, in modo tale che la massima frequenza impostata tra tutti i core sia applicata a tutti loro; alcuni strumenti possono mostrare frequenze diverse su core inattivi, ma è sufficiente eseguire qualsiasi applicazione per aumentare al massimo la frequenza. Questo, dai miei test, si applica anche a Sandy Bridge, dove i core e le slice LLC risiedono tutti nello stesso dominio frequenza/tensione. Suppongo che questo comportamento si verifichi anche con Ivy Bridge, poiché è solo un'iterazione 'tick'. Invece, credo che Haswell collochi core e slice LLC in domini diversi, singolari, abilitando così le frequenze per-core. Questo è anche pubblicizzato in diverse pagine come http://www.anandtech.com/show/8423/intel-xeon-e5-version-3-up-to-18-haswell-ep-cores-/4

Problemi correlati