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
|
||||
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}
|
||||
|
||||
Reference in New Issue
Block a user