System scheduling, signals, etc.
dpc at ucore.info
dpc at ucore.info
Wed Oct 12 11:22:48 EDT 2011
Hi,
I'm working on some particularly complex kernel hacking thing and I
thought that I could use some input from more experienced guys and
thought that LKML might not be a best place to ask this, while
Kernelnewbies seems more appropriate, even thought I'm not entirely
newbie.
I'm dealing with a problem that my heavily modified system "hangs"
while the vanilla does not. My version works fine, but at some point
of booting process it stops.
When I'm debugging the issue I can clearly see that scheduler is
switching between swapper and kworker processes only, while other
processes are sleeping:
(gdb) ps
0xC09BFF10 0 Running - - (none) swapper
0xC786F280 1 Sleep(In.) - - (none) init
0xC786E960 2 Sleep(In.) - - (none) kthreadd
0xC786E040 3 Sleep(In.) - - (none) ksoftirqd/0
0xC78792A0 4 Running - - (none) kworker/0:0
0xC7878980 5 Sleep(In.) - - (none) kworker/u:0
0xC7878060 6 Sleep(In.) - - (none) cpuset
0xC78892C0 7 Sleep(In.) - - (none) khelper
0xC78889A0 8 Sleep(In.) - - (none) kworker/u:1
0xC7888080 277 Sleep(In.) - - (none) sync_supers
0xC789B2E0 279 Sleep(In.) - - (none) bdi-default
0xC78C1320 281 Sleep(In.) - - (none) kblockd
0xC78B1300 292 Sleep(In.) - - (none) ata_sff
0xC78C00E0 304 Sleep(Un.) - - (none) khubd
0xC78F1340 327 Sleep(In.) - - (none) kworker/0:1
0xC78F0A20 328 Sleep(In.) - - (none) cfg80211
0xC78F0100 411 Sleep(In.) - - (none) rpciod
0xC789A9C0 419 Sleep(In.) - - (none) khungtaskd
0xC78C0A00 420 Sleep(Un.) - - (none) kswapd0
0xC7927360 421 Sleep(In.) - - (none) fsnotify_mark
0xC78B00C0 422 Sleep(In.) - - (none) nfsiod
0xC7926A40 424 Sleep(In.) - - (none) crypto
0xC7A6CA80 523 Sleep(In.) - - (none) zd1211rw
0xC7926120 532 Sleep(In.) - - (none) libertastf
0xC7A64140 566 Sleep(In.) - - (none) kworker/0:2
0xC7A65380 573 Sleep(In.) - - (none) kpsmoused
0xC7A6D3A0 592 Sleep(In.) - - (none) kworker/u:2
0xC7A6C160 606 Sleep(In.) - - (none) mmcqd/0
0xC78B09E0 644 Sleep(In.) - - (none) jbd2/mmcblk0p2-
0xC7A9C1A0 645 Sleep(In.) - - (none) ext4-dio-unwrit
0xC7A64A60 647 Sleep(In.) - - (none) plymouthd
0xC789A0A0 649 Sleep(Un.) - - (none) plymouthd
0xC7A9D3E0 651 Sleep(Un.) - - (none) sh
This is the output of macro that I'm using.
(In.) == Interruptable; (Un.) == Uninterraptable
The problem is: I don't entirely understand all the details about
scheduling/task primitives and the problem can sit just anywhere: my
changes touch the bare bones of exception handling etc.
I wish to know:
- what data structures and fields should I check to see if there are
any pending signals
- what all the stuff in scheduling data?
- how would you approach such problem while being able to run two
versions (modified and vanilla) side by side
- what are critical functions in kernel code that are dealing with
waking and putting processes into sleep; I wish to break debbugger on
them or put some printk's here and there and look for some pattern
Can you throw some ideas or links/books to read?
Much appreciated.
Best Regards,
--
Dawid Ciężarkiewicz
More information about the Kernelnewbies
mailing list