UPD memory placement aware NUMA scheduler
This commit is contained in:
Binary file not shown.
@@ -745,5 +745,108 @@ eBPF-Tracing-Programme oder ähnliche Programme zu erstellen. Wenn Sie die Heade
|
|||||||
als Modul erstellen, wird ein Modul namens kheaders.ko erstellt, das bei Bedarf
|
als Modul erstellen, wird ein Modul namens kheaders.ko erstellt, das bei Bedarf
|
||||||
geladen werden kann, um Zugriff auf die Header zu erhalten.
|
geladen werden kann, um Zugriff auf die Header zu erhalten.
|
||||||
|
|
||||||
|
\subsection{Kernel log buffer size (16 $\Rightarrow$ 64KB, 17 $\Rightarrow$ 128KB)}
|
||||||
|
CONFIG\_LOG\_BUF\_SHIFT [=17] \textbf{[17]}\\
|
||||||
|
Wählen Sie die minimale Größe des Kernel-Protokollpuffers als eine Potenz von 2 aus.
|
||||||
|
Die endgültige Größe wird durch den Konfigurationsparameter LOG\_CPU\_MAX\_BUF\_SHIFT
|
||||||
|
beeinflusst, siehe unten. Eine höhere Größe kann auch durch den Boot-Parameter
|
||||||
|
\glqq log\_buf\_len\grqq{} erzwungen werden.\\
|
||||||
|
Beispiele:\\
|
||||||
|
\indent 17 $\Rightarrow$ 128 KB\\
|
||||||
|
\indent 16 $\Rightarrow$ 64 KB\\
|
||||||
|
\indent 15 $\Rightarrow$ 32 KB\\
|
||||||
|
\indent 14 $\Rightarrow$ 16 KB\\
|
||||||
|
\indent 13 $\Rightarrow$ 8 KB\\
|
||||||
|
\indent 12 $\Rightarrow$ 4 KB\\
|
||||||
|
Symbol: LOG\_BUF\_SHIFT\\
|
||||||
|
Type: Integer (Ganzzahl)\\
|
||||||
|
Range: [12 25]
|
||||||
|
\subsection{CPU kernel log buffer size contribution (13 $\Rightarrow$ 8 KB, 17 $\Rightarrow$ 128KB)}
|
||||||
|
CONFIG\_LOG\_BUF\_SHIFT [=12] \textbf{[12]}\\
|
||||||
|
Diese Option ermöglicht es, die Standardgröße des Ringpuffers entsprechend der Anzahl
|
||||||
|
der CPUs zu erhöhen. Der Wert definiert den Beitrag jeder CPU als eine Potenz von 2.
|
||||||
|
Der beanspruchte Speicherplatz beträgt in der Regel nur wenige Zeilen, kann aber viel
|
||||||
|
mehr sein, wenn Probleme gemeldet werden, z. B. bei Rückverfolgungen.
|
||||||
|
Die erhöhte Größe bedeutet, dass ein neuer Puffer zugewiesen werden muss und der
|
||||||
|
ursprüngliche statische Puffer ungenutzt ist. Dies ist nur auf Systemen mit mehr CPUs
|
||||||
|
sinnvoll. Daher wird dieser Wert nur verwendet, wenn die Summe der Beiträge größer ist
|
||||||
|
als die Hälfte des Standard-Kernel-Ringpuffers, wie durch LOG\_BUF\_SHIFT definiert.
|
||||||
|
Die Standardwerte sind so eingestellt, dass mehr als 16 CPUs erforderlich sind, um die
|
||||||
|
Zuweisung auszulösen. Diese Option wird auch ignoriert, wenn der Kernelparameter
|
||||||
|
\glqq log\_buf\_len\grqq{} verwendet wird, da er eine exakte (Zweierpotenz) Größe des
|
||||||
|
Ringpuffers erzwingt. Die Anzahl der möglichen CPUs wird für diese Berechnung verwendet,
|
||||||
|
wobei Hotplugging ignoriert wird, so dass die Berechnung für das Worst-Case-Szenario
|
||||||
|
optimal ist und gleichzeitig ein einfacher Algorithmus ab dem Hochfahren verwendet
|
||||||
|
werden kann. Beispiele für Verschiebungswerte und ihre Bedeutung:
|
||||||
|
\indent 17 $\Rightarrow$ 128 KB für jede CPU\\
|
||||||
|
\indent 16 $\Rightarrow$ 64 KB für jede CPU\\
|
||||||
|
\indent 15 $\Rightarrow$ 32 KB für jede CPU\\
|
||||||
|
\indent 14 $\Rightarrow$ 16 KB für jede CPU\\
|
||||||
|
\indent 13 $\Rightarrow$ 8 KB für jede CPU\\
|
||||||
|
\indent 12 $\Rightarrow$ 4 KB für jede CPU\\
|
||||||
|
Symbol: LOG\_CPU\_MAX\_BUF\_SHIFT\\
|
||||||
|
Type: Integer (Ganzzahl)\\
|
||||||
|
Range: [0 21]
|
||||||
|
|
||||||
|
\subsection{Printk indexing debugfs interface)}
|
||||||
|
CONFIG\_PRINTK\_INDEX [=y] \textbf{[Y]}\\
|
||||||
|
Unterstützung für die Indizierung aller zur Kompilierzeit bekannten
|
||||||
|
printk-Formate unter\\
|
||||||
|
$<$debugfs$>$/printk/index/$<$module$>$ hinzufügen.
|
||||||
|
Dies kann als Teil der Wartung von Daemonen, die /dev/kmsg überwachen,
|
||||||
|
verwendet werden, da es die Überprüfung der in einem Kernel vorhandenen
|
||||||
|
printk-Formate erlaubt, was die Erkennung von Fällen ermöglicht,
|
||||||
|
in denen überwachte printks geändert oder nicht mehr vorhanden sind.\\
|
||||||
|
Es gibt keine zusätzlichen Laufzeitkosten für printk, wenn dies aktiviert ist.
|
||||||
|
|
||||||
|
\subsection{Scheduler features \texorpdfstring{$\rightarrow$}{->}}
|
||||||
|
Scheduler-Funktionen
|
||||||
|
|
||||||
|
\subsubsection{Enable utilization clamping for RT/FAIR tasks}
|
||||||
|
CONFIG\_UCLAMP\_TASK [=y] \textbf{[Y]}\\
|
||||||
|
Diese Funktion ermöglicht es dem Scheduler, die geklemmte Auslastung jeder CPU
|
||||||
|
auf der Grundlage der auf dieser CPU geplanten RUNNABLE-Tasks zu verfolgen.
|
||||||
|
Mit dieser Option kann der Benutzer die minimale und maximale CPU-Auslastung
|
||||||
|
angeben, die für RUNNABLE-Aufgaben zulässig ist. Die maximale Auslastung
|
||||||
|
definiert die maximale Häufigkeit, mit der ein Task laufen soll, während die
|
||||||
|
minimale Auslastung die minimale Häufigkeit definiert, mit der er laufen soll.\\
|
||||||
|
Sowohl die Minimal- als auch die Maximalwerte für die Auslastung sind Hinweise
|
||||||
|
für den Scheduler, um seine Frequenzauswahl zu verbessern, aber sie erzwingen
|
||||||
|
oder gewähren keine bestimmte Bandbreite für Tasks.\\
|
||||||
|
Im Zweifelsfall sagen Sie N für Nein.
|
||||||
|
|
||||||
|
\paragraph{Number of supported utilization clamp buckets}$~$\\
|
||||||
|
CONFIG\_UCLAMP\_BUCKETS\_COUNT [=5] \textbf{[5]}\\
|
||||||
|
Legt die Anzahl der zu verwendenden Klammerbereiche fest. Der Bereich der
|
||||||
|
einzelnen Buckets ist SCHED\_CAPACITY\_SCALE/UCLAMP\_BUCKETS\_COUNT.
|
||||||
|
Je höher die Anzahl der Clamp-Buckets, desto feiner die Granularität und
|
||||||
|
desto höher die Präzision der Clamp-Aggregation und -Verfolgung während der
|
||||||
|
Laufzeit.
|
||||||
|
Mit dem minimalen Konfigurationswert haben wir beispielsweise 5 Clamp-Buckets,
|
||||||
|
die jeweils 20 \% Auslastung verfolgen. Eine um 25 \% gesteigerte Aufgabe
|
||||||
|
wird im Bucket [20..39]\% gezählt und setzt den effektiven Wert der
|
||||||
|
Bucketklemme auf 25 \%.
|
||||||
|
Wenn eine zweite, um 30 \% erhöhte Aufgabe auf derselben CPU eingeplant wird,
|
||||||
|
wird diese Aufgabe im selben Bucket wie die erste Aufgabe gezählt und erhöht
|
||||||
|
den effektiven Bucket-Clamp-Wert auf 30 \%.
|
||||||
|
Der effektive Klemmwert eines Bereichs wird auf seinen Nennwert (20 \% im
|
||||||
|
obigen Beispiel) zurückgesetzt, wenn keine weiteren Aufgaben mehr in diesem
|
||||||
|
Bereich gezählt werden. Bei einigen Aufgaben kann eine zusätzliche
|
||||||
|
Verstärkungs-/Kappungsmarge hinzugefügt werden. Im obigen Beispiel wird
|
||||||
|
die 25 \%-Aufgabe auf 30 \% angehoben, bis sie die CPU verlässt.
|
||||||
|
Sollte dies auf bestimmten Systemen nicht akzeptabel sein, ist es immer
|
||||||
|
möglich, den Spielraum zu verringern, indem die Anzahl der Clamp-Buckets
|
||||||
|
erhöht wird, um den verbrauchten Speicher gegen die Genauigkeit der
|
||||||
|
Laufzeitverfolgung einzutauschen.\\
|
||||||
|
Im Zweifelsfall sollten Sie den Standardwert verwenden.
|
||||||
|
|
||||||
|
\subsection{Memory placement aware NUMA scheduler}
|
||||||
|
CONFIG\_NUMA\_BALANCING [=y] \textbf{[Y]}\\
|
||||||
|
Diese Option fügt Unterstützung für automatische NUMA-bewusste
|
||||||
|
Speicher-/Task-Platzierung hinzu.
|
||||||
|
Der Mechanismus ist recht primitiv und basiert darauf, dass Speicher
|
||||||
|
migriert wird, wenn er Referenzen auf den Knoten hat, auf dem die Aufgabe läuft.\\
|
||||||
|
Dieses System ist auf UMA-Systemen inaktiv.
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
Reference in New Issue
Block a user