Date: Sun, 11 Nov 2007 12:25:51 +0200 From: Alexander Motin <mav@FreeBSD.org> Cc: freebsd-arch@freebsd.org Subject: Re: Kernel thread stack usage Message-ID: <4736D8AF.7010209@FreeBSD.org> In-Reply-To: <1191189248.00807488.1191177603@10.7.7.3> References: <1191187393.00807485.1191175801@10.7.7.3> <1191189248.00807488.1191177603@10.7.7.3>
next in thread | previous in thread | raw e-mail | index | archive | help
> 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4736D8AF.7010209>