Intel i7-1065G7 n'atteint pas la fréquence de turbo boost maximale

Aug 18 2020

J'ai un ordinateur portable avec un processeur Intel i7-1065G7 . turbostatrapports

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

(ce sont 4 cœurs physiques / 8 virtuels) Quand je lance une grosse charge monothread (calcul de pi avec mpfr) sur le processeur, j'observe que deux cœurs (peut-être un cœur physique?) fonctionnent à exactement 3500 MHz tandis que les autres ont un la fréquence. Mais ils n'atteignent jamais les fréquences de turbo boost plus élevées.

Si je désactive certains des noyaux de cpu (par exemple avec echo 0 > /sys/devices/system/cpu/cpu[2-7]*/online) l'ordinateur portable n'atteint les fréquences de boost turbo supérieur correspondant, résultant en une performance accrue (une tâche qui a pris en moyenne 18,5 secondes avant prend maintenant 16,8).

Comment puis-je faire en sorte que mon nouvel ordinateur portable atteigne sa vitesse d'horloge maximale alors que tous les cœurs ne sont pas nécessaires?

J'utilise Ubuntu 20.04 avec le noyau 5.4.0 sur un ordinateur portable HP Envy x360.

Ce que j'attends: sur mon ancien ordinateur portable avec un i7-4712MQ turbostat donne

30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores

(c'est aussi une machine 4/8 core). Sur cette machine, une charge monocœur fait passer un cœur à près de 3,3 GHz, sous une charge à deux cœurs deux horloges à 3,2 GHz, etc.

Je n'ai pas vérifié les fréquences individuelles des processeurs sous Windows, mais le gestionnaire de tâches affiche parfois des fréquences supérieures à 3,7 GHz.

Mise à jour: Le problème a donc disparu ... Je ne sais pas pourquoi. J'ai désinstallé linux-cloud-toolsmais je ne pense pas que cela devrait être la raison.

Réponses

H2ONaCl Aug 18 2020 at 08:01

Tu as écrit...

Quand je lance une grosse charge à un seul thread

Si votre programme est à thread unique, il n'a pas besoin d'aller à la fréquence maximale sur les autres threads, donc ce n'est pas le cas.

Votre lien concerne le processeur Intel® Core ™ i7-1065G7.

Le document Intel que vous avez lié indique que le maximum est de 3900 MHz. Vos données semblent montrer qu'il y a un cœur à 3900 MHz, donc je ne sais pas pourquoi vous pensez qu'il n'a pas atteint le maximum. Vous avez posté ceci ...

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

En général, si la lecture n'est pas la fréquence maximale, c'est parce que soit elle ne le fait que par intermittence, donc la mesure ne le montrera que par intermittence, soit elle n'a pas besoin d'être à la fréquence maximale car il y a une contrainte telle que IO. Ne t'inquiète pas. Si vous écrivez un programme qui n'a pas de contraintes, en d'autres termes, c'est un thread contraint de calcul, je vous garantis qu'il ira à la fréquence maximale.

Un temps écoulé de 18,5 s peut ne pas être significatif en raison d'effets aléatoires que vous ne souhaitez pas utiliser pour tirer des conclusions. Les tâches de longue durée de 200 secondes ou plus peuvent vous fournir des données plus significatives.

thesps Sep 28 2020 at 19:04

J'ai vécu quelque chose de similaire, sur une configuration similaire (processeur i7-9700K, Ubuntu 18.04). Et je pense que mon utilisation de la machine peut être similaire: c'est une machine de bureau que j'utilise pour exécuter des applications intensives (mais à un seul thread), tout en ayant éventuellement un navigateur Web et certaines applications de messagerie ouvertes. J'ai trouvé la suggestion dans les commentaires sous le message original pour fonctionner - définir l'affinité du processeur pour les processus. J'avais l'habitude tasksetde le faire [1].

Premier test (aucune modification des paramètres d'affinité): les 8 cœurs sont «inactifs» à une utilisation d'environ 10%. Je lance une tâche unique et intensive en CPU. Un noyau saute à 100%, je vois 3,6 GHz (le maximum sans turbo) sur tous les cœurs en utilisant i7z.

Deuxième essai: Baliser tous les processus en cours d' exécution à noyaux CPU 0 et 1, avec: . Maintenant, ces 2 cœurs se situent à 30-40%, le reste à 0% (bien que certains autres cœurs puissent commencer à devenir actifs lorsque le système d'exploitation démarre les processus). Ensuite, démarrez la même tâche à un seul thread et gourmande en ressources processeur. Un cœur passe à 100%, mais maintenant je le vois atteindre la fréquence turbo maximale de 4,9 GHz. Ensuite, j'ai réinitialisé l'affinité pour utiliser tous les cœurs en remplaçant la plage par , dans mon cas.for i in `sudo ps -aux | awk '{ print $2 }'`; do sudo taskset -a -p -c 0-1 $i; done0-10-7

[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html