SMP - Erste Schritte

Geschrieben von MMind am Sonntag, 9. Juni 2013 in Rockchip

Meinen Basteleien an dem Rockchip-Soc bringen mich abermals mit neuen Bereichen in Kontakt. Ein sehr wichtiger Bereich ist dabei SMP. SMP steht für »symmetric multi-processing« und erlaubt es dem z.B dem Linux-Kernel, laufende Prozesse dynamisch auf alle verfügbaren Prozessoren zu verteilen. Bisher hatte ich ja immer nur mit Ein-Kern-Prozessoren zu tun, sodass ich hier mal eben wieder Neuland betreten habe.

Theorie

Beim Systemstart ist dabei immer nur eine CPU aktiv, d.h. wenn der Linux-Kernel startet arbeitet dieser immer nur auf einem Prozessor. Um alle Kerne zu nutzen, müssen diese separat vom Kernel gebootet werden. Dies geschieht durch verschiedene Funktionen die in einem struct smp_operations zusammengefasst werden.

Die erste Funktion ist »smp_init_cpus«, die eigentlich die Anzahl der vorhandenen Prozessoren bzw. Kerne ermitteln soll. Auf neueren Devicetree-basierenden Plattformen ist dies jedoch nicht mehr nötig, da die Informationen über die verfügbaren CPUs aus dem Devicetree selbst bezogen werden können, weswegen die Funktion auf der Rockchip-Platform nicht nötig ist.

Danach folgt »smp_prepare_cpus«, dessen wichtigste Aufgabe es ist die Cache-Kohärenz zu aktivieren, da jeder Core seinen eigenen Cache besitzt, Inhalte für den gleichen Wert zwischen Caches aber nicht differieren dürfen. In Cortex-A9 Prozessoren, wie dem RK3066, ist dafür die sogenannte Snoop-Control-Unit zuständig, die sogenanntes Bus-Snooping nutzt um Cache-Änderungen zu verfolgen.

Die letzte Funktion ist dann »smp_boot_secondary«, deren Aufgabe es nun ist, die jeweilige CPU in ihrem Argument zu starten. Die Prozedur zum starten eines Kerns ist für jede Plattform unterschiedlich. Bei den Rockchip-SoCs können die Kerne über die PMU aktiviert und deaktiviert werden. Wenn ein Kern startet versucht er ein Programm im prozessoreigenen SRAM zu starten, dass die Initialisierung übernimmt. Deswegen muss dieses (Assembler-)Programm vor Aktivierung des Kerns in das SRAM kopiert werden.

Wenn das alles funktioniert, kann das gestartete System dann über 2 Kerne verfügen.

Ich will Ergebnisse sehen

Da der heutige Tag sehr erfolgreich war, gibt es in der /proc/cpuinfo meines Tablets nun folgendes zu sehen:

processor	: 0
model name	: ARMv7 Processor rev 0 (v7l)
BogoMIPS	: 1196.85
Features	: swp half thumb fastmult vfp edsp neon vfpv3 tls 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x3
CPU part	: 0xc09
CPU revision	: 0

processor	: 1
model name	: ARMv7 Processor rev 0 (v7l)
BogoMIPS	: 1196.85
Features	: swp half thumb fastmult vfp edsp neon vfpv3 tls 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x3
CPU part	: 0xc09
CPU revision	: 0

Hardware	: Rockchip Cortex-A9 (Device Tree)
Revision	: 0000
Serial		: 0000000000000000

2 Kommentare für diesen Eintrag

Ansicht der Kommentare: Linear | Verschachtelt

  • Leo
    Hello! Great Work! Please join us at #linux-rkx @ freenode. We are trying to get the rockchip dev community together Best Regards
  • arokux
    Hallo, arbeitest du weiter an mainlining? Grüße Arokux

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA 1CAPTCHA 2CAPTCHA 3CAPTCHA 4CAPTCHA 5


Suche

Nach Einträgen suchen in Outside the Walled Garden:

Das Gesuchte nicht gefunden? Gib einen Kommentar in einem Eintrag ab oder nimm per E-Mail Kontakt auf!