Kernel thread stack usage

Kostik Belousov kostikbel at gmail.com
Sun Nov 11 08:38:32 PST 2007


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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20071111/e000c74a/attachment.pgp


More information about the freebsd-arch mailing list