[LINUX] Allgemeine Beschreibung des CPUFreq-Kerns und der CPUFreq-Benachrichtigungen

Ursprünglich ist es Teil des Quellcodes des Linux-Kernels, daher wird es als GPLv2 behandelt (Anerkennung, dass es sein sollte).

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 Ich werde lesen.


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.

Der CPUFreq-Kerncode befindet sich in der Derivers / cpufreq / cpufreq.c. Dieser CPUFreq-Kerncode bietet eine Standardschnittstelle für CPUFreq-Architekturtreiber. (Ein Teil des Codes führt Frequenzänderungen durch.) Enthält auch "Benachrichtiger". Gerätetreiber und Teile des Kernels erfordern möglicherweise Richtlinienänderungen (z. B. Wärmemodule wie ACPI), alle Frequenzänderungen (Zeitsteuerungscode usw.) oder eine bestimmte Durchsetzung von Geschwindigkeitsbegrenzungen (z. B. in der ARM-Architektur). LCD-Treiber) ist erforderlich. Außerdem wird die Kernelkonstante "loops_per_jiffy" aktualisiert, wenn die Frequenz geändert wird.

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.

Referenzzähler für cpufreq-Richtlinien werden von cpufreq_cpu_get () und cpufreq_cpu_put () bereitgestellt. Dadurch wird der cpufreq-Treiber ordnungsgemäß beim Core registriert und erst nach dem Aufruf von cpufreq_put_cpu () entladen. Dadurch wird sichergestellt, dass nicht jede cpufreq-Richtlinie während der Verwendung freigegeben wird.

  1. CPUFreq notifiers

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

CPUFreq-Notifier folgen der Standardschnittstelle für Kernel-Notifier. Weitere Informationen zu Benachrichtigern finden Sie unter linux / include / linux / notifier.h.

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

Es gibt zwei verschiedene CPU Freq-Benachrichtigungen. Einer ist Policy Notifiers und der andere sind Transition Notifier.

2.1 CPUFreq policy notifiers

These are notified when a new policy is created or removed. Es wird benachrichtigt, wenn eine neue Richtlinie erstellt oder gelöscht wird.

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.

Diese Phase wird im zweiten Argument an den Notifier gezeigt. Diese Phase ist CPUFREQ_CREATE_POLCY, als die Richtlinie zum ersten Mal erstellt wurde. Und CPUFREQ_REMOVE_POLICY, wenn die Richtlinie gelöscht wird.

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).

Das dritte Argument ist vom Typ void * pointer. Dies ist ein Zeiger auf die Struktur cpufreq_policy, die aus mehreren Werten besteht, einschließlich der minimalen und maximalen Frequenzen der neuen Richtlinie (minimale und maximale Frequenzen (in 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.

In der Richtlinie wird es möglicherweise erneut für jede Online-CPU benachrichtigt. Dies liegt daran, dass der CPU Freq-Treiber die CPU-Kernfrequenz umschaltet und diese Änderung keine externen Auswirkungen hat.

The second argument specifies the phase - CPUFREQ_PRECHANGE or CPUFREQ_POSTCHANGE.

Das zweite Argument gibt die Phase an. CPUFREQ_PRECHANGE oder CPUFREQ_POSTCHANGE.

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

Das dritte Argument ist die Struktur cpufreq_freqs mit den folgenden Werten:

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

Weitere Informationen zu OPP finden Sie unter Dokumentation / power / opp.rst.

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.

Diese Funktion stellt eine Konvertierungsroutine zur Verfügung, die die internen Informationen von OPP-Schichten über die aktuell aktivierte Frequenz in ein Format konvertiert, das cpufreq entschlüsseln kann.

Warning Do not use this function in interrupt context.

Verwenden Sie diese Funktion nicht im Interrupt-Kontext.

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.

Diese Funktion ist nur gültig, wenn CONFIG_CPUFREQ aktiviert ist und CONFIG_PM_OPP ebenfalls hinzugefügt wird.

dev_pm_opp_free_cpufreq_table

Free up the table allocated by dev_pm_opp_init_cpufreq_table

Geben Sie die von dev_pm_opp_init_cpufreq_table zugewiesene Tabelle frei.

Recommended Posts

Allgemeine Beschreibung des CPUFreq-Kerns und der CPUFreq-Benachrichtigungen
Betrachten Sie die Beschreibung von Dockerfile (Django + MySQL②)
Dies und das der Einschlussnotation.
Skript zum Ändern der Beschreibung von Fasta
Überprüfen Sie das Konzept und die Terminologie der Regression
Vergleich von Klassenvererbung und Konstruktorbeschreibung
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Die Geschichte, deep3d auszuprobieren und zu verlieren
Betrachten Sie die Beschreibung von docker-compose.yml (Django + MySQL ③)
Zusammenfassung der Unterschiede zwischen PHP und Python
Vollständiges Verständnis der Konzepte von Bellmanford und Dyxtra
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Organisieren Sie die Bedeutung von Methoden, Klassen und Objekten
Angeben des Bereichs von Ruby- und Python-Arrays
Ändern Sie die Farbe von Fabric-Fehlern und Warnungen
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Organisieren Sie die grundlegende Verwendung von Autotools und pkg-config
Ich habe die Varianten von UKR gelesen und implementiert
Berücksichtigung der Stärken und Schwächen von Python
Die schönen und bedauerlichen Teile von Cloud Datalab
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Holen Sie sich den Titel der Yahoo News und analysieren Sie die Stimmung
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Ermitteln und verarbeiten Sie die Codierung der Textdatei automatisch
Beziehung der Fibonacci-Zahlenreihe und des Goldenen Schnitts
Der Prozess der Installation von Atom und der Ausführung von Python
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
[FSL] Segment- und Volumenmessung des basalen Hirnkerns (Basalganglien)
Referenz und Änderung der rekursiven Python-Obergrenze
Ich habe mir die Versionen von Blender und Python angesehen
Ich habe das Standardbetriebssystem und die Shell der Docker-Maschine überprüft
Visualisierung der Verbindung zwischen Malware und dem Callback-Server
[Django 2.2] Sortieren und erhalten Sie den Wert des Beziehungsziels
Persönliche Hinweise zur Integration von vscode und anaconda
Überprüfen Sie den Linux-Verteilungstyp und die Version
Animieren Sie die Grundlagen der dynamischen Planung und Rucksackprobleme