Re: Kernel thread stack usage
- From: Kostik Belousov <kostikbel@xxxxxxxxx>
- Date: Sun, 11 Nov 2007 18:38:15 +0200
On Sun, Nov 11, 2007 at 12:25:51PM +0200, Alexander Motin wrote:
As known in netgraph susbystem information passing from one node to
another by direct function calls without queueing. It gives performance
bonuses, but it also gives permanent stack overflow risk on complicated
graphs. Netgraph is still have a queues and able to use them when asked,
but now queueing is a flag which should be controlled by sending node. I
think it would be good to implement some algorithm which could monitor
stack usage on each call and enforce queueing when stack usage become
critical.
The question is: is there correct way to somehow get current kernel
thread stack usage or just a stack base address?
Digging kernel with a dirty hands I have found the way which looks like
working. I have briefly tested it on i386.
printf("%p, %p. Used %d of %d.\n", &var,
(char *)td->td_kstack + td->td_kstack_pages * PAGE_SIZE,
(char *)td->td_kstack + td->td_kstack_pages * PAGE_SIZE -
(char *)&var,
td->td_kstack_pages * PAGE_SIZE);
'var' here is a name of some local variable.
Can anybody comment correctness of this way or propose another one?
Most of the time, you will get the correct value. But, see the
vm_thread_new_altstack() in vm/vm_glue.c.
Attachment:
pgpavmYNLTOqt.pgp
Description: PGP signature
- Follow-Ups:
- Re: Kernel thread stack usage
- From: Julian Elischer
- Re: Kernel thread stack usage
- References:
- Re: Kernel thread stack usage
- From: Alexander Motin
- Re: Kernel thread stack usage
- Prev by Date: Re: sensors framework continued (architecture)
- Next by Date: Re: Kernel thread stack usage
- Previous by thread: Re: Kernel thread stack usage
- Next by thread: Re: Kernel thread stack usage
- Index(es):
Relevant Pages
|
|