kthreads->kproc and back to kthread.. next patch
Julian Elischer
julian at elischer.org
Mon Oct 22 16:55:09 PDT 2007
Ivan Voras wrote:
> Julian Elischer wrote:
>> Here is the link to the next patch.
>>
>> this introduces (back) the kthread_create (etc) calls but now they
>> make threads..
>
>> it may also be worth adding some help for people to make a new kproc,
>> and populate it with a number of kthreads.
>
> For example, why would we do that? :)
>
> A practical example: GEOM modules often spawn separate execution
> contexts to handle non-trivial IO requests. These threads are usually
> created at most once per GEOM device and live until that device goes
> away. GEOM framework itself has several execution contexts (g_up,
> g_down, g_event) which call "methods" from GEOM classes. Should we spawn
> one "dummy" kproc per GEOM class and then kthreads in it for devices? If
> "raw" kthreads can be spawned, to which kproc will they belong (if any)?
> Is the difference between kthread and kproc here purely aesthetic?
>
> In other words: when should one create a kproc and when a kthread?
If you wanted to limit CPU usage for a particular group of threads it
may be worth grouping them into a process and then you could have
some control over them with 'nice'.
Another case,
The AIO threads need to be processes because each of them needs
a different address space that can be hacked to cover the address space of the
process they are working for.
The Idle threads couldbe in their own process so you can easily see how much cpu idle..
here's what that looks like in top -SH
last pid: 34941; load averages: 1.02, 1.01, 1.00 up 0+18:26:04 16:30:40
80 processes: 5 running, 57 sleeping, 18 waiting
CPU states: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle
Mem: 27M Active, 462M Inact, 160M Wired, 404K Cache, 112M Buf, 2358M Free
Swap: 6144M Total, 6144M Free
PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND
2 root 171 i-64 0K 32K CPU3 3 742:14 99.02% idle: cpu3
2 root 171 i-64 0K 32K RUN 2 742:14 99.02% idle: cpu2
2 root 171 i-64 0K 32K RUN 0 742:14 98.73% idle: cpu1
2 root 171 i-64 0K 32K RUN 1 742:14 98.44% idle: cpi0
40 root 20 - 0K 8K syncer 1 1:07 0.49% syncer
10 root -32 - 0K 8K WAIT 0 3:10 0.20% swi4: clock sio
0 root 96 0 0K 32K WAIT 2 742:14 0.00% swapper
or top -S
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
0 root 4 171 i-64 0K 32K CPU0 0 743:43 395.80% idle
40 root 1 20 - 0K 8K syncer 1 1:07 0.10% syncer
10 root 1 -32 - 0K 8K WAIT 0 3:10 0.00% swi4: clock sio
0 root 1 171 i-64 0K 32K CPU0 0 743:43 395.80% swapper
There are many other reasons you may want to group kernel threads.
for example a single process with all teh interrupt threads in it might
be useful for accounting for interupts in some ways.
>
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
More information about the freebsd-current
mailing list