Kernel thread stack usage
Alexander Motin
mav at FreeBSD.org
Sun Nov 11 03:26:24 PST 2007
> 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?
--
Alexander Motin
More information about the freebsd-arch
mailing list