[geschlossen] CPU fuer einen Prozess isolieren

  • Hallo Zusammen,


    kennt jemand eine Loesung bzw. elegante Moeglichkeit mit Kernel > 2.6.18 eine CPU fuer einen bestimmten Prozess zu isolieren?


    Ich habe eine Moeglichkeit gefunden, bin aber nicht zufrieden da immer ein Neustart noetig ist. Es waere klasse eine CPU komplett von allen vorhandenen Prozessen zu isolieren. Nur leider habe ich noch keine Idee hierfuer ohne das Bootscript zu veraendern.


    Fuer Tips bin ich dankbar.


    Eine nervige(Neustart) aber zweckdienliche Loesung (Beispiel mit 2 CPUs):


    In '/etc/init.d/boot' folgendes unter den Header einfuegen

    Code
    taskset -p 0x1 1
    taskset -p 0x1 2


    Die Datei '/etc/init.d/boot' wird als erstes nach dem Erzeugen des Vaters aller Prozess (init mit PID 1) ausgefuehrt.
    Mit der 1. Anweisung im Quellcode veranlasse ich dem System den Prozess mit der PID 1 (init) nur der ersten CPU zuzuweisen. Da 'init' der Urvater ist erhalten alle Kindprozesse die gleiche Maske auf welcher CPU diese erzeugt und laufen duerfen.


    Die 2. Anweisung im Quellcode kuemmert sich um den Prozess kthreadd (PID 2). Dieser wird anscheinend von Prozess init initialisiert, erhaelt aber auch wie init den 'Parent Process Pid' = 0.


    1. Kann es sein, das ich hier falsch liege?
    2. Wo genau wird der Init Prozess erzeugt (Evt. muss das frueher geschehen)?


    Jendenfalls, wenn man das ganze ausprobiert wird man feststellen das Prozesse die von kthreadd 'erben' noch auf einer anderen CPU laufen. Hier nutze ich einen 'dirty' Trick um mir dieses Problem vom Hals zu schaffen.


    mit cpu-hotplug unter '/sys/devices/system/cpu' kann man einzelne cpu's 'rauskicken'.


    Code
    echo 0 > /sys/devices/system/cpu/cpu1/online


    :sollte die 1.CPU (bei einem 2 Kern System) 'deaktivieren'.


    ein

    Code
    cat /proc/cpuinfo
    cat /proc/interrupts


    sollte das bestaetigen.


    Wenn ihr nun die CPU wieder aktiviert bleiben die 'child' Prozesse von kthreadd da wo sie waren.


    Code
    echo 1 > /sys/devices/system/cpu/cpu1/online


    Somit solltet ihr eine CPU frei von allen Prozessen haben.


    Jemand eine bessere Idee? Hat jemand ein Script das alle PID mit taskset auf eine CPU verschiebt?


    Gruss LeCrow

    Einmal editiert, zuletzt von LeCrow ()

    Für den Inhalt des Beitrages 21668 haftet ausdrücklich der jeweilige Autor: LeCrow