From owner-freebsd-hackers@FreeBSD.ORG Wed Feb 9 14:49:26 2005 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from green.homeunix.org (freefall.freebsd.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id B16E816A4CE; Wed, 9 Feb 2005 14:49:25 +0000 (GMT) Received: from green.homeunix.org (green@localhost [127.0.0.1]) by green.homeunix.org (8.13.1/8.13.1) with ESMTP id j19EnPI4096050; Wed, 9 Feb 2005 09:49:25 -0500 (EST) (envelope-from green@green.homeunix.org) Received: (from green@localhost) by green.homeunix.org (8.13.1/8.13.1/Submit) id j19EnOHU096049; Wed, 9 Feb 2005 09:49:24 -0500 (EST) (envelope-from green) Date: Wed, 9 Feb 2005 09:49:24 -0500 From: Brian Fundakowski Feldman To: Dmitry Agaphonov Message-ID: <20050209144924.GB65523@green.homeunix.org> References: <20050209173625.29d50ffd.rzhe@agava.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050209173625.29d50ffd.rzhe@agava.com> User-Agent: Mutt/1.5.6i cc: freebsd-hackers@freebsd.org Subject: Re: kqueue & pthread X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Feb 2005 14:49:26 -0000 On Wed, Feb 09, 2005 at 05:36:25PM +0300, Dmitry Agaphonov wrote: > Hello all, > > There's a server application that use non-bloking sockets with kqueue in > its main thread and blocking I/O in two auxiliary threads. While watching > the server in top(1), I've noticed that it is in the 'poll' state instead > of 'kqread'. And breaking the server process execution in the debugger > drops to __sys_poll() instead of kevent(). > > So, the question is: does it really mean that linking to libc_r forces me > to use poll (somehow internally?) and lose the benefit from using kqueue > system? > > I'm using gcc-3.4.4 with -pthread option. FreeBSD version is 4.10-STABLE. > > Thanks. Since you're using user threads, not kernel threads, the kernel can only have one "object" (poll or select list, or kqueue file descriptor) to wait upon at any given time. Since kqueues are pollable, what happens is that the kqueue along with every other fd being polled/selected are all polled by a single poll(2) system call. Yes, your kqueue is being used, but it has an indirection of another poll(2) system call determining when your kevent(2) thread should be woken up. -- Brian Fundakowski Feldman \'[ FreeBSD ]''''''''''\ <> green@FreeBSD.org \ The Power to Serve! \ Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\