Wie den nice Level eines Kernemodul vorab festlegen ?

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
wildzero
Beiträge: 6
Registriert: 16.04.2005 01:12:05

Wie den nice Level eines Kernemodul vorab festlegen ?

Beitrag von wildzero » 25.02.2008 00:49:28

Hi, ich hab hier ein Modul welche ich per modprobe starte. Dessen Prozesspriorität setze ich nach dem Laden händisch per nice hoch. Frage: Wie kann ich vorab den nice level von Kernelmodulen festlegen? Um dies nicht nachträglich nach dem laden tun zu müssen.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 25.02.2008 13:09:52

Gar nicht. Kernel-Module haben kein Nice-Level.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 25.02.2008 15:18:55

Kernel Threads werden immer "hardcoded" mit nice -5 angelegt, sofern das nicht vom Modul überschrieben wird. Wenn du also den nice Wert von einem Kernel Thread beim Start ändern möchtest, und das Modul verfügt nicht über einen entprechenden Parameter, dann müßtest du das Modul patchen ( z.B einen set_user_nice Aufruf an entsprechender Stelle einfügen)

Gruß
gms

Benutzeravatar
wildzero
Beiträge: 6
Registriert: 16.04.2005 01:12:05

Beitrag von wildzero » 26.02.2008 14:11:00

Ok, bei mir geht es konkret um die [mISDNStackd] Prozesse von mISDN. Diese würde ich gerne fest auf auf -15 setzen um die ISDN/Fax Verarbeitung zu bevorzugen, da die Maschine ein reiner Faxserver sein soll.

Ich hab daher einfach mal das genannte set_user_nice(current, -15); blind in die Funktion mISDNStackd in stacks.c (1) rein gesetzt, leider ohne Erfolg. Es compiliert zwar durch, aber ps x -lf zeigt die mISDNStackd Prozesse weiter auf nice level 0.

(1) http://git.misdn.org/?p=mISDN.git;a=blo ... b7;hb=HEAD

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 26.02.2008 20:44:52

wildzero hat geschrieben:Ich hab daher einfach mal das genannte set_user_nice(current, -15); blind in die Funktion mISDNStackd in stacks.c (1) rein gesetzt, leider ohne Erfolg. Es compiliert zwar durch, aber ps x -lf zeigt die mISDNStackd Prozesse weiter auf nice level 0.
In dieser Funktion wird MAKEDAEMON("mISDNStackd"), hinter dem sich die Funktion "daemonize" in kernel/exit.c ( aus den Kernelsourcen ) verbirgt, aufgerufen, von dort gehts dann weiter in "reparent_to_kthreadd" und dort wird die nice-Value auf 0 gesetzt.
Hast du das "set_user_nice" vor dem MAKEDAEMON oder nachher aufgerufen ?

Gruß
gms

Antworten