[LINUX] Description générale des notificateurs CPUFreq core et CPUFreq

À l'origine, il fait partie du code source du noyau Linux, il sera donc traité comme GPLv2 (reconnaissance qu'il devrait l'être).

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

https://www.kernel.org/doc/html/latest/cpu-freq/core.html Je lirai.


General description of the CPUFreq core and CPUFreq notifiers

Authors:  Dominik Brodowski [email protected]  David Kimdon [email protected]  Rafael J. Wysocki [email protected]  Viresh Kumar [email protected]

  1. General Information

The CPUFreq core code is located in drivers/cpufreq/cpufreq.c. This cpufreq code offers a standardized interface for the CPUFreq architecture drivers (those pieces of code that do actual frequency transitions), as well as to “notifiers”. These are device drivers or other part of the kernel that need to be informed of policy changes (ex. thermal modules like ACPI) or of all frequency changes (ex. timing code) or even need to force certain speed limits (like LCD drivers on ARM architecture). Additionally, the kernel “constant” loops_per_jiffy is updated on frequency changes here.

Le code principal de CPUFreq se trouve dans derivers / cpufreq / cpufreq.c. Ce code de base CPUFreq fournit une interface standard pour les pilotes d'architecture CPUFreq. (Une partie du code effectue des changements de fréquence) Il inclut également les «notificateurs». Les pilotes de périphériques et des parties du noyau peuvent nécessiter des changements de politique (par exemple, des modules thermiques comme ACPI), tous les changements de fréquence (code de synchronisation, etc.) ou certaines restrictions de vitesse (par exemple dans l'architecture ARM). Pilote LCD) est requis. De plus, la constante du noyau "loops_per_jiffy" est mise à jour lorsque la fréquence est modifiée.

Reference counting of the cpufreq policies is done by cpufreq_cpu_get and cpufreq_cpu_put, which make sure that the cpufreq driver is correctly registered with the core, and will not be unloaded until cpufreq_put_cpu is called. That also ensures that the respective cpufreq policy doesn’t get freed while being used.

Les compteurs de référence pour les politiques cpufreq sont fournis par cpufreq_cpu_get () et cpufreq_cpu_put (). Cela entraînera l'enregistrement correct du pilote cpufreq avec le noyau et ne sera pas déchargé tant que cpufreq_put_cpu () ne sera pas appelé. Cela garantit que chaque stratégie cpufreq n'est pas publiée pendant l'utilisation.

  1. CPUFreq notifiers

CPUFreq notifiers conform to the standard kernel notifier interface. See linux/include/linux/notifier.h for details on notifiers.

Les notificateurs CPUFreq suivent l'interface standard des notificateurs du noyau. Pour plus d'informations sur les notificateurs, consultez linux / include / linux / notifier.h.

There are two different CPUFreq notifiers - policy notifiers and transition notifiers.

Il existe deux notificateurs CPU Freq différents. L'un concerne les notificateurs de politique et l'autre les notificateurs de transition.

2.1 CPUFreq policy notifiers

These are notified when a new policy is created or removed. Il y a une notification lorsqu'une nouvelle politique est créée ou supprimée.

The phase is specified in the second argument to the notifier. The phase is CPUFREQ_CREATE_POLICY when the policy is first created and it is CPUFREQ_REMOVE_POLICY when the policy is removed.

Cette phase est illustrée dans le deuxième argument du notifiant. Cette phase est CPUFREQ_CREATE_POLCY lorsque la stratégie a été créée pour la première fois. Et CPUFREQ_REMOVE_POLICY lorsque la politique est supprimée.

The third argument, a void *pointer, points to a struct cpufreq_policy consisting of several values, including min, max (the lower and upper frequencies (in kHz) of the new policy).

Le troisième argument est de type pointeur void *. Il s'agit d'un pointeur vers la structure cpufreq_policy, qui se compose de plusieurs valeurs, y compris les fréquences min, max de la nouvelle politique (fréquences minimale et maximale (en kHz)).

2.2 CPUFreq transition notifiers

These are notified twice for each online CPU in the policy, when the CPUfreq driver switches the CPU core frequency and this change has no any external implications.

Dans la politique, il peut à nouveau notifier pour chaque CPU en ligne. Cela est dû au fait que le pilote CPU Freq modifie la fréquence du cœur du processeur et que ce changement n'a aucun impact externe.

The second argument specifies the phase - CPUFREQ_PRECHANGE or CPUFREQ_POSTCHANGE.

Le deuxième argument indique la phase. CPUFREQ_PRECHANGE ou CPUFREQ_POSTCHANGE.

The third argument is a struct cpufreq_freqs with the following values:

Le troisième argument est la structure cpufreq_freqs avec les valeurs suivantes:

cpu	number of the affected CPU
old	old frequency
new	new frequency
flags	flags of the cpufreq driver
  1. CPUFreq Table Generation with Operating Performance Point (OPP)

For details about OPP, see Documentation/power/opp.rst

Voir Documentation / power / opp.rst pour plus d'informations sur OPP.

dev_pm_opp_init_cpufreq_table -

This function provides a ready to use conversion routine to translate the OPP layer’s internal information about the available frequencies into a format readily providable to cpufreq.

Cette fonction met à disposition une routine de conversion qui convertit les informations internes des couches OPP sur la fréquence actuellement activée dans un format que cpufreq peut déchiffrer.

Warning Do not use this function in interrupt context.

N'utilisez pas cette fonction dans le contexte d'interruption.

Example

soc_pm_init()
{
       /* Do things */
       r = dev_pm_opp_init_cpufreq_table(dev, &freq_table);
       if (!r)
               policy->freq_table = freq_table;
       /* Do other things */
}

Note This function is available only if CONFIG_CPU_FREQ is enabled in addition to CONFIG_PM_OPP.

Cette fonction n'est valide que lorsque CONFIG_CPUFREQ est activé et CONFIG_PM_OPP est également ajouté.

dev_pm_opp_free_cpufreq_table

Free up the table allocated by dev_pm_opp_init_cpufreq_table

Libérez la table allouée par dev_pm_opp_init_cpufreq_table.

Recommended Posts

Description générale des notificateurs CPUFreq core et CPUFreq
Considérez la description de Dockerfile (Django + MySQL②)
Ceci et celui de la notation d'inclusion.
Script pour changer la description de fasta
Revoir le concept et la terminologie de la régression
Comparaison de l'héritage de classe et de la description du constructeur
Retrouvez les termes généraux de la séquence de Tribonacci en algèbre linéaire et Python
L'histoire d'essayer deep3d et de perdre
Prenons la description de docker-compose.yml (Django + MySQL ③)
Résumé des différences entre PHP et Python
Compréhension complète des concepts de Bellmanford et Dyxtra
La réponse de "1/2" est différente entre python2 et 3
Organiser la signification des méthodes, des classes et des objets
Spécification de la plage des tableaux ruby et python
Changer la couleur des erreurs et avertissements Fabric
Comparez la vitesse d'ajout et de carte Python
Organisez l'utilisation super basique des Autotools et de pkg-config
J'ai lu et implémenté les variantes de UKR
Prise en compte des forces et faiblesses de Python
Les parties sympas et regrettables de Cloud Datalab
Prise en compte de la différence entre la courbe ROC et la courbe PR
Obtenez le titre de Yahoo News et analysez les sentiments
L'histoire de Python sans opérateurs d'incrémentation et de décrémentation.
Déterminer et traiter automatiquement l'encodage du fichier texte
relation entre la série de nombres de Fibonacci et le nombre d'or
Le processus d'installation d'Atom et de l'exécution de Python
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
Visualisez la gamme d'insertions internes et externes avec python
[FSL] Mesure du segment et du volume du noyau cérébral basal (noyaux gris centraux)
Référence et modification de la limite supérieure récursive Python
J'ai vérifié les versions de Blender et Python
J'ai vérifié le système d'exploitation et le shell par défaut de docker-machine
Visualisation de la connexion entre le malware et le serveur de rappel
[Django 2.2] Trier et obtenir la valeur de la destination de la relation
Notes personnelles sur l'intégration de vscode et anaconda
Vérifiez le type et la version de la distribution Linux
Animer les bases de la planification dynamique et des problèmes de sac à dos