Site icon bintorosoft.com

CPU Pinning & Isolation: latency-sensitive Workloads auf Linux

Close up of computer web page code inside of html file. Big data and Internet of things trend. Application web source code on monitor.

In modernen Multi-Thread- und Multi-Tenant-Umgebungen kann die Standard-CPU-Scheduler-Verteilung zu Latenzspitzen führen. Für Workloads, die niedrige Latenzen erfordern, wie z. B. Finanztransaktionen, Echtzeit-Datenverarbeitung oder High-Performance-Networking, ist CPU Pinning und Isolation unter Linux entscheidend. Dieser Artikel erklärt, wie Prozesse gezielt an bestimmte CPU-Kerne gebunden und isoliert werden, um deterministische Performance zu gewährleisten.

Grundlagen von CPU Pinning

CPU Pinning bedeutet, dass ein Prozess oder Thread explizit auf bestimmte CPU-Kerne gebunden wird. Standardmäßig verteilt der Linux-Scheduler Prozesse dynamisch über alle verfügbaren Kerne, was zu Cache-Invalidierungen und Scheduling-Latenzen führen kann. Pinning reduziert diese Effekte.

Prüfen der aktuellen CPU-Affinität

taskset -cp <PID>

Dieser Befehl zeigt, auf welchen CPUs ein Prozess derzeit ausgeführt wird. Standardmäßig ist die Affinität auf alle Kerne gesetzt.

Prozess an bestimmte CPUs binden

taskset -cp 0-3 <PID>

Der Prozess mit der angegebenen PID wird auf die CPUs 0 bis 3 beschränkt.

Isolierte CPU-Kerne für latency-sensitive Workloads

Um Interferenzen durch andere Prozesse zu vermeiden, können Kerne vom allgemeinen Scheduler isoliert werden.

Kernel Boot Parameter: isolcpus

GRUB_CMDLINE_LINUX="... isolcpus=4-7 nohz_full=4-7 rcu_nocbs=4-7"

Nach Änderung des GRUB-Bootparameters muss der Kernel neu gestartet werden.

cgroups v2 zur Steuerung und Pinning

cgroups v2 erlaubt die Definition von CPU-Zeitlimits und Affinitäten für Gruppen von Prozessen.

Beispiel: cgroup für isolierte Workloads

mkdir /sys/fs/cgroup/latency-sensitive
echo 4-7 > /sys/fs/cgroup/latency-sensitive/cpuset.cpus
echo 0 > /sys/fs/cgroup/latency-sensitive/cpuset.mems
echo <PID> > /sys/fs/cgroup/latency-sensitive/cgroup.procs

Die Prozesse in dieser cgroup werden nur auf CPUs 4 bis 7 ausgeführt und nutzen Memory Node 0.

systemd Service Units mit CPU-Affinität

Für Dienste, die über systemd gestartet werden, lassen sich Affinität und Isolierung direkt in der Unit definieren.

[Service]
ExecStart=/usr/bin/latency-app
CPUAffinity=4 5 6 7
CPUQuota=80%
TasksMax=200

Dies bindet den Service an die Kerne 4–7 und begrenzt CPU-Zeit auf 80%.

IRQ und Isolierung

Bei Netzwerk- oder Storage-Workloads sollten Interrupts ebenfalls auf isolierte Kerne umgeleitet werden, um Latenzspitzen zu vermeiden.

IRQ-Affinität setzen

cat /proc/irq/<IRQ_NUMBER>/smp_affinity
echo 0F > /proc/irq/<IRQ_NUMBER>/smp_affinity

Die Bitmaske 0F bindet IRQs an die ersten vier Kerne. Für isolierte Workloads sollten die isolierten Kerne verwendet werden.

Monitoring und Validierung

Nach Pinning und Isolation ist es wichtig, die CPU-Auslastung und Latenz zu überwachen.

Tools zur Überprüfung

Best Practices

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Exit mobile version