Ich versuche zu verstehen, wie der Linux syscall sched_setaffinity() funktioniert. Dies ist eine Folge meiner Frage here.Wie funktioniert sched_setaffinity()?
Ich habe this guide, die erklärt, wie man den syscall benutzt und hat ein hübsches ordentliches (Arbeiten!) Beispiel.
Also habe ich das Linux 2.6.27.19 kernel sources heruntergeladen.
Ich habe eine 'grep' für Zeilen mit diesem syscall, und ich habe 91 Ergebnisse. Nicht vielversprechend.
Letztlich, ich versuche zu verstehen, wie der Kernel in der Lage ist, den Befehlszeiger für einen bestimmten Kern einzustellen (oder Prozessor.)
Ich bin vertraut mit, wie Single-Core-Single-Thread-Programme Arbeit. Man könnte eine 'jmp foo'-Anweisung ausgeben, und dies setzt die IP im Grunde auf die Speicheradresse der' foo'-Marke. Aber wenn man mehrere Kerne hat, muss man sagen "hole den nächsten Befehl an die Speicheradresse foo und setze den Befehlszeiger für Kernnummer 2, um die Ausführung dort zu beginnen."
Wo geben wir im Assembly-Code an, welcher Kern diese Operation ausführt?
Zurück zum Kernel-Code: Was ist hier wichtig? Die Datei 'kernel/sched.c' hat eine Funktion namens sched_setaffinity(), gibt aber den Typ "long" zurück - was mit manual page nicht übereinstimmt. Was ist hier wichtig? Welches dieser Module zeigt die ausgegebenen Montageanweisungen? Welches Modul liest das 'task_struct', schaut sich das Mitglied 'cpus_allowed' an und übersetzt es dann in eine Anweisung? (Ich habe auch die glibc-Quelle durchsucht - aber ich denke, sie ruft einfach den Kernel-Code an, um diese Aufgabe zu erledigen.)
Ignorieren diesen Kommentar – kumar
<< Bei jedem Timer-Interrupt (~ 1000 pro Sekunde), läuft der Scheduler auf jeder CPU und wählt einen Prozess auszuführen. Ich habe eine Frage hier: Scheduler ist ein Stück Code, der im Kernel ausgeführt wird, Ein Stück Code wird immer bei Single CPU zu jedem Zeitpunkt ausgeführt. Also, das ist der Mean Scheduler (aufgerufen von Timer Interrupt Handler) schaltet zwischen den CPUs ... Dann ist das meine, wenn ich mehr CPUs habe, ist es mehr Overhead-Scheduler auf allen CPUs .... etwas verwirrt hier. –
kumar
Die verschiedenen CPUs laufen verschiedene Kopien des Schedulers. Der Timer-Interrupt wird bei jeder CPU einzeln ausgelöst. Also, wenn Sie 4 CPUs haben, haben Sie 4 Scheduler. Eigentlich ist der Code des Schedulers der gleiche, aber die Daten sind anders. – osgx