From owner-freebsd-arch@FreeBSD.ORG Sun Nov 11 11:26:24 2007 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CFA8316A417 for ; Sun, 11 Nov 2007 11:26:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from cmail.optima.ua (cmail.optima.ua [195.248.191.121]) by mx1.freebsd.org (Postfix) with ESMTP id 53C7713C4A3 for ; Sun, 11 Nov 2007 11:26:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) X-Spam-Flag: SKIP X-Spam-Yversion: Spamooborona 1.7.0 Received: from [212.86.226.226] (account mav@alkar.net HELO [192.168.3.2]) by cmail.optima.ua (CommuniGate Pro SMTP 5.1.10) with ESMTPA id 44422167 for freebsd-arch@freebsd.org; Sun, 11 Nov 2007 12:26:00 +0200 Message-ID: <4736D8AF.7010209@FreeBSD.org> Date: Sun, 11 Nov 2007 12:25:51 +0200 From: Alexander Motin User-Agent: Thunderbird 2.0.0.6 (Windows/20070728) MIME-Version: 1.0 CC: freebsd-arch@freebsd.org References: <1191187393.00807485.1191175801@10.7.7.3> <1191189248.00807488.1191177603@10.7.7.3> In-Reply-To: <1191189248.00807488.1191177603@10.7.7.3> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: Kernel thread stack usage X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Nov 2007 11:26:24 -0000 > 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