2015-08-08 4 views
10

ayant cherché une description de la conception multicoeur je continue à trouver plusieurs diagrammes, mais tous ressemblent un peu à ceci:Quelle est la responsabilité de changer la charge et de la fréquence de base dans le processeur multicoeur

multicore design

Je sais en regardant i7z sortie de commande que différents cœurs peuvent fonctionner à des fréquences différentes. Cela suggérerait que les décisions concernant le noyau qui recevra un nouveau processus et pour changer la fréquence du noyau lui-même soient prises par le système d'exploitation ou par le bloc de contrôle du noyau lui-même.

Ma question est: Qu'est-ce qui contrôle les fréquences de chaque noyau individuel? Est-ce le travail d'associer un processus READY avec le noyau spécifique placé sur le système d'exploitation ou est-il fait par quelque chose dans le processeur.

+1

@xmojmr J'ai essayé plusieurs fichiers PDF à partir du lien que vous avez fourni. Ils ont tous ce que la figure 3-9, mais pas celui que vous avez décrit. Pouvez-vous me dire de qui vous parlez? – v010dya

+1

ouvert http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf (_Combined Volumes: 1 , 2A, 2B, 2C, 3A, 3B et 3C_), ctrl + F "_Algorithme pour l'extraction de la fréquence du processeur" – xmojmr

+1

@xmojmr Tous les modèles présentés ici (voir le tableau ci-dessous) traitent des processeurs monocœur . Donc cela n'aide pas vraiment. – v010dya

Répondre

2

La planification des processus/threads aux cœurs est purement up to the OS. Le matériel n'a aucune compréhension des tâches en attente d'exécution. Le maintien de la liste des processus exécutables par le système d'exploitation par rapport à l'attente des E/S est entièrement une opération logicielle.

La migration d'un thread d'un core vers un autre se fait par le noyau sur le core original stockant le architectural state en mémoire, puis le code du système d'exploitation sur le nouveau core restaure l'état sauvegardé et reprend l'exécution de l'espace utilisateur.

Traditionnellement, les décisions d'échelle de fréquence et de tension sont prises par le système d'exploitation. Prenez Linux à titre d'exemple: Le code de prise de décision est appelé governor (et aussi arch wiki link came up high on google). Il regarde les choses comme la fréquence à laquelle les processus ont utilisé time slice sur le noyau actuel. Si le gouverneur décide que le processeur doit fonctionner à une vitesse différente, il programme certains registres de contrôle pour mettre en œuvre le changement. Si je comprends bien, le matériel prend soin de choisir le right voltage to support the requested frequency. Si je comprends bien, le système d'exploitation fonctionnant sur chaque cœur prend des décisions indépendamment. Sur le matériel qui permet à chaque cœur de fonctionner à des fréquences différentes, le code décisionnel n'a pas besoin de se coordonner les uns avec les autres. Si l'exécution d'une fréquence élevée sur un cœur nécessite une puce haute tension, le matériel s'en charge. Je pense que l'implémentation moderne de DVFS (tension dynamique et mise à l'échelle de fréquence) est assez haut niveau, le système d'exploitation indiquant simplement le choix de N et le microcontrôleur de bord prenant en charge les détails des oscillateurs de programmation/diviseurs d'horloge et les régulateurs de tension.

La fonction «Turbo» d'Intel, qui augmente de manière opportuniste la fréquence au-dessus de la fréquence maximale durable, prend la décision dans le matériel. Chaque fois que le système d'exploitation demande la fréquence annoncée la plus élevée, la CPU utilise le turbo lorsque l'alimentation et le refroidissement le permettent.

Le Skylake d'Intel va encore plus loin: le système d'exploitation peut confier le contrôle total de DVFS au matériel, éventuellement avec des contraintes. Cela lui permet de réagir de microseconde à microseconde, plutôt que sur une échelle de temps de quelques millisecondes. Cela permet réellement de meilleures performances dans les charges de travail en rafale, car plus de budget de puissance est disponible pour turbo quand c'est utile. Quelques benchmarks sont assez éclatants pour observer ceci, comme certains IIRC de browser/javascript.

Il y avait une discussion entière sur la nouvelle gestion de l'alimentation de Skylake à IDF2015, check out the slides and/or archived webcast. L'ancienne méthode est décrite avec beaucoup de détails là aussi, pour illustrer la différence, donc vous devriez vraiment vérifier si vous voulez plus de détails que mon résumé. (La liste des autres entretiens IDF est here, merci à Agner Fog's blog pour le lien)

+0

Ok. Je suis assez sûr que cela va être une réponse acceptée, mais laissez-moi prendre quelques minutes pour absorber toutes les informations que vous avez fournies. – v010dya

1

La fréquence centrale est contrôlée par une tension donnée appliquée à «l'oscillateur» du cœur.

Cette tension peut être modifiée par le système d'exploitation mais elle peut également être modifiée par le BIOS lui-même si une température élevée est détectée dans la CPU.

+1

Je vous ai donné une prime, puisque vous avez répondu à la plupart des questions. Mais pourriez-vous expliquer quelque chose s'il vous plaît? OS veut envoyer la commande à l'oscillateur, ce qui se passe réellement, c'est que cette commande est chargée pour être exécutée. A-t-il besoin d'être chargé dans le core qui sera changé ou fera n'importe quel core (n'importe quel core peut envoyer la commande à l'oscillateur d'un autre core ou le système d'exploitation charge la commande dans le noyau spécifique pour l'exécution). – v010dya

+0

Volodia, malheureusement je ne connais pas précisément la réponse à cette question. Cependant, sur la base de ma connaissance de l'architecture PC, mon pari est que n'importe quel noyau peut faire le travail. –

+1

@ v010dya ces processus sont complètement indépendants, donc n'importe quel noyau pourrait le faire. En fait, la réponse n'est pas simple car il se passe beaucoup de choses. Le système d'exploitation génère une "demande", qui est transmise aux contrôleurs respectifs (via les pilotes). Ensuite, les contrôleurs font "leur boulot". Mais la fréquence peut également être modifiée sans intervention de l'OS. Par exemple (simplifié) - un "BIOS" (ce n'est pas un BIOS, mais pour plus de simplicité ...) change de fréquence en fonction de la charge du noyau. Dans ce cas, le système d'exploitation charge le noyau, oui, mais n'a aucun contrôle réel sur le processeur. etc ... –