2015-08-08 20 views
10

hanno cercato una descrizione del progetto multicore che continuo a trovare diversi schemi, ma tutti hanno un aspetto un po 'come questo:Qual è responsabile di modificare il carico e la frequenza di core di processore multicore

multicore design

lo so dall'esaminare l'output del comando i7z che i diversi core possono funzionare a frequenze diverse.

Ciò suggerirebbe che le decisioni relative a quale nucleo verrà assegnato un nuovo processo e per modificare la frequenza del core stesso verranno eseguite dal sistema operativo o dal blocco di controllo del core stesso.

La mia domanda è: cosa controlla le frequenze di ogni singolo core? È il lavoro di associare un processo READY con il core specifico posto sul sistema operativo o è fatto da qualcosa all'interno del processore.

+1

@xmojmr Ho provato diversi PDF dal collegamento che hai fornito. Sono tutti Figura 3-9, ma non quello che hai descritto. Puoi dirmi per favore quale intendi? – v010dya

+1

apri http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architects-software-developer-manual-325462.pdf (_Volumi Combinati: 1 , 2A, 2B, 2C, 3A, 3B e 3C_), ctrl + F "_Algoritmo per l'estrazione della frequenza del processore_" – xmojmr

+1

@xmojmr Tutti i modelli discussi lì (come mostrato nella tabella inferiore di tale diagramma) trattano i processori single-core . Quindi non aiuta davvero. – v010dya

risposta

2

I processi di pianificazione/thread su core sono puramente up to the OS. L'hardware non ha alcuna comprensione delle attività in attesa di essere eseguite. Mantenere l'elenco dei processi operativi del SO che sono eseguibili rispetto all'attesa per l'I/O è completamente una cosa software.

La migrazione di un thread da un core ad un altro avviene tramite il codice del kernel sul core originale che memorizza lo architectural state in memoria, quindi il codice del SO sul nuovo core che ripristina lo stato salvato e riprende l'esecuzione dello spazio utente.

Tradizionalmente, le decisioni relative al ridimensionamento della frequenza e della tensione vengono eseguite dal sistema operativo. Prendi Linux come esempio: il codice decisionale è chiamato governor (e anche questo arch wiki link came up high on google). Osserva cose come la frequenza con cui i processi hanno utilizzato il loro intero time slice sul core corrente. Se il governatore decide che la CPU deve funzionare a una velocità diversa, programma alcuni registri di controllo per implementare la modifica. A quanto ho capito, l'hardware si occupa della scelta dello right voltage to support the requested frequency.

Da quello che ho capito, il sistema operativo in esecuzione su ciascun core rende le decisioni indipendenti. Su hardware che consente a ciascun core di funzionare a frequenze diverse, il codice decisionale non ha bisogno di coordinarsi tra loro. Se l'esecuzione di una frequenza elevata su un core richiede un chip ad alta tensione, l'hardware si occupa di questo. Penso che l'implementazione moderna di DVFS (dinamizzazione dinamica della tensione e della frequenza) sia piuttosto di alto livello, con il sistema operativo che indica l'hardware che N scelte desidera e il microcontrollore di potenza di bordo che cura i dettagli degli oscillatori/divisori di clock di programmazione e regolatori di tensione.

La funzione "Turbo" di Intel, che aumenta opportunisticamente la frequenza al di sopra della frequenza massima sostenibile, prende le decisioni nell'hardware. Ogni volta che il sistema operativo richiede la frequenza più pubblicizzata, la CPU utilizza il turbo quando l'alimentazione e il raffreddamento lo consentono.

Skylake di Intel fa un ulteriore passo avanti: il sistema operativo può avere il controllo totale su DVFS sull'hardware, opzionalmente con vincoli. Ciò gli consente di reagire da un microsecondo a un microsecondo, piuttosto che su una scala temporale di millisecondi. Questo in realtà consente prestazioni migliori in carichi di lavoro scoppiettanti, perché è disponibile più budget di potenza per il turbo quando è utile. Alcuni benchmark sono abbastanza esplosivi da poterlo osservare, come alcuni browser/javascript IIRC.

C'è stato un intero discorso sulla nuova gestione energetica di Skylake a IDF2015, check out the slides and/or archived webcast. Anche il vecchio metodo è descritto in molti dettagli, per illustrare la differenza, quindi dovresti verificarlo se vuoi più dettagli del mio sommario. (L'elenco degli altri colloqui IDF è here, grazie a Agner Fog's blog per il collegamento)

+0

Ok. Sono abbastanza sicuro che questa sarà una risposta accettata, ma permettimi di prendere un po 'di tempo per assorbire tutte le informazioni che hai fornito. – v010dya

1

La frequenza del core è controllata da una determinata tensione applicata a un "oscillatore" del core.

Questa tensione può essere modificata dal sistema operativo ma può anche essere modificata dal BIOS stesso se viene rilevata una temperatura elevata nella CPU.

+1

Ti ho dato una taglia, dal momento che hai risposto alla maggior parte della domanda. Ma potresti per favore spiegare qualcosa. OS vuole inviare il comando all'oscillatore, ciò che sta realmente accadendo è che questo comando è caricato per essere eseguito. Ha bisogno di essere caricato nel core che verrà modificato o lo farà qualsiasi core (qualsiasi core invia il comando all'oscillatore di un altro core o il sistema operativo carica il comando nel core specifico per l'esecuzione). – v010dya

+0

Volodya, sfortunatamente non conosco precisamente la risposta a questa domanda. Tuttavia, in base alla mia conoscenza dell'architettura del PC, la mia scommessa è che qualsiasi core può fare il lavoro. –

+1

@ v010dya questi processi sono completamente indipendenti, quindi qualsiasi core potrebbe farlo. In realtà, la risposta non è semplice in quanto ci sono un sacco di cose che accadono. Il SO genera una "richiesta", che viene passata ai rispettivi controllori (attraverso i driver). Quindi i controllori fanno "il loro lavoro". Ma la frequenza può anche essere modificata senza l'intervento del sistema operativo. Ad esempio (semplificato) - un "BIOS" (non è un BIOS, ma per semplicità ...) cambia frequenza in base al carico del core. In questo caso il sistema operativo carica il core, sì, ma non ha un vero controllo sulla CPU. ecc ... –