From owner-freebsd-arch@FreeBSD.ORG Wed Feb 20 13:06:57 2008 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A602816A404; Wed, 20 Feb 2008 13:06:57 +0000 (UTC) (envelope-from deischen@freebsd.org) Received: from mail.netplex.net (mail.netplex.net [204.213.176.10]) by mx1.freebsd.org (Postfix) with ESMTP id 43DA013C469; Wed, 20 Feb 2008 13:06:56 +0000 (UTC) (envelope-from deischen@freebsd.org) Received: from sea.ntplx.net (sea.ntplx.net [204.213.176.11]) by mail.netplex.net (8.14.2/8.14.2/NETPLEX) with ESMTP id m1KD6gIA021276; Wed, 20 Feb 2008 08:06:43 -0500 (EST) X-Virus-Scanned: by AMaViS and Clam AntiVirus (mail.netplex.net) X-Greylist: Message whitelisted by DRAC access database, not delayed by milter-greylist-4.0 (mail.netplex.net [204.213.176.10]); Wed, 20 Feb 2008 08:06:43 -0500 (EST) Date: Wed, 20 Feb 2008 08:06:43 -0500 (EST) From: Daniel Eischen X-X-Sender: eischen@sea.ntplx.net To: Jeff Roberson In-Reply-To: <20080219234101.D920@desktop> Message-ID: References: <20071219211025.T899@desktop> <18311.49715.457070.397815@grasshopper.cs.duke.edu> <20080112182948.F36731@fledge.watson.org> <20080112170831.A957@desktop> <20080112194521.I957@desktop> <20080219234101.D920@desktop> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: arch@freebsd.org, Robert Watson , Andrew Gallatin Subject: Re: Linux compatible setaffinity. X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Daniel Eischen List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Feb 2008 13:06:57 -0000 On Tue, 19 Feb 2008, Jeff Roberson wrote: > On Sat, 12 Jan 2008, Jeff Roberson wrote: > >> On Sat, 12 Jan 2008, Daniel Eischen wrote: >> >>> On Sat, 12 Jan 2008, Jeff Roberson wrote: >>> >>>> Now, there is one problem with the linux api that I want to discuss >>>> before I commit it. The current patch always works on curthread. >>>> However, the api allows for setting the binding of a pid. I believe, >>>> although I'm not certain, that pids and tids in linux are in the same >>>> number space. It's not clear to me whether you can set an affinity for >>>> an entire process and have it effect an individual thread or whether you >>>> set it on a thread by thread basis. When supplying a non-curproc pid do >>>> you bind all threads in the target process? >>>> >>>> Are our tids and pids in the same number space? And are they available >>>> to application programmers? I haven't followed that very carefully. >>> >>> I believe marcel made tids and pids disjoint so that any pid is >>> never equal to any tid. But regardless, I don't think we want >>> to rely on that. I would prefer the Solaris approach of specifying >>> what we want (pid, tid, jail id, etc) as an argument in the API >>> so there is no confusion. >> >> Yes, I would prefer that as well I believe. So I'll add an extra parameter >> and in the linux code we'll use whatever their default is. Of course the >> initial implementation will still only support curthread but I plan on >> finishing the rest before 8.0 is done. > > So what does everyone think of something like this: > > int cpuaffinity(int cmd, long which, int masksize, unsigned *mask); > > #define AFFINITY_GET 0x1 > #define AFFINITY_SET 0x2 > #define AFFINITY_PID 0x4 > #define AFFINITY_TID 0x8 > > I'm not married to any of these names. If you know of something that would > be more regular please comment. I take it 'cmd' is either AFFINITY_GET or AFFINITY_SET, and which is AFFINITY_PID or AFFINITY_TID. Is there a reason why, for 2 different arguments to cpuaffinity(), the flags are disjoint? It almost seems like you wanted: int cpuaffinity(int flags, int masksize, unsigned *mask) I prefer the API you specified, keeping 'cmd' and 'which' as separate arguments. Is masksize in bytes or in units of unsigned? Do we need helper functions/macros for the mask? Like sigemptyset, sigaddset, etc? -- DE