Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Feb 2007 12:21:14 -0800
From:      Julian Elischer <julian@elischer.org>
To:        "Kunze, Aaron" <aaron.kunze@intel.com>
Cc:        Daniel Eischen <deischen@freebsd.org>, freebsd-smp@freebsd.org, atmblr@gmail.com, Robert Watson <rwatson@freebsd.org>
Subject:   Re: Setting CPU affinity to process( Freebsd smp kernel)
Message-ID:  <45DF4CBA.1010906@elischer.org>
In-Reply-To: <07DDDFCFB8BE0A43BCA52E743373DBDC03102190@orsmsx416.amr.corp.intel.com>
References:  <07DDDFCFB8BE0A43BCA52E743373DBDC030C5D5A@orsmsx416.amr.corp.intel.com>	<20070223151158.Q88189@fledge.watson.org>	<Pine.GSO.4.64.0702231107580.29991@sea.ntplx.net> <07DDDFCFB8BE0A43BCA52E743373DBDC03102190@orsmsx416.amr.corp.intel.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Kunze, Aaron wrote:
> Thanks for the info.  The Linux equivalent would be sched_setaffinity
> which takes a bitmask as input, allowing the user to define which
> processors will run a particular thread.  Here's a link:
> 
> http://ibm5.ma.utexas.edu/cgi-bin/man-cgi?sched_setaffinity+2
> 
>>> There's a potential for 
>>> conflict between the kernel's use of pinning and binding for kernel 
>>> synchronization and the user space affinity model, which will be 
> 
> Can you elaborate on this?  Some of my colleagues and I are considering
> tackling this and would like to avoid such pitfalls, if possible.

[...]

>>
>> I know Solaris has processor_bind(2) and pset_bind(2):
>>
>>    http://docs.sun.com/app/docs/doc/816-5167/6mbb2jaeu?a=expand#P

I prefer the linux model but it does limit you to some set number of procesors.
it looks however that the solaris interface doesn't allow 'sets' of processors but
just allows you to specify a single processor.

I would postulate the following syscall copied from Linux.
As in Linux, the  'pid_t' can specify a TID in which case
the give thread is changed 
I would suggest that it would have to be a thread in the current process however.
(you don't allow threads to be manipulated from outside the process)
It's not obvious from the man page if a pid of 0 afects the current process or thread.
I read it as being process, with no way of specifying the current thread.
I would add a PID/TID of (-1) to indicate 'current (kernel) thread'.

In addition it is possible that a UTS mailbox might specify a set I guess for 
kse type threads.


int  
sched_getaffinity(pid_t  pid,  unsigned  int cpusetsize, cpu_set_t *mask);

       void CPU_CLR(int cpu, cpu_set_t *set);
       int CPU_ISSET(int cpu, cpu_set_t *set);
       void CPU_SET(int cpu, cpu_set_t *set);
       void CPU_ZERO(cpu_set_t *set);


>>
>> --
>> DE
>>
> _______________________________________________
> freebsd-smp@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-smp
> To unsubscribe, send any mail to "freebsd-smp-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45DF4CBA.1010906>