cvs commit: src/sys/conf files src/sys/kern init_main.c
kern_cpuset.c kern_thread.c syscalls.master src/sys/sys _types.h
cpuset.h proc.h types.h src/lib/libc/sys Symbol.map
Jeff Roberson
jroberson at chesapeake.net
Mon Mar 3 12:26:38 UTC 2008
On Mon, 3 Mar 2008, David Xu wrote:
> Jeff Roberson wrote:
>> jeff 2008-03-02 07:39:22 UTC
>>
>> FreeBSD src repository
>>
>> Modified files:
>> sys/conf files sys/kern init_main.c
>> kern_thread.c syscalls.master sys/sys _types.h types.h
>> proc.h lib/libc/sys Symbol.map Added files:
>> sys/kern kern_cpuset.c sys/sys cpuset.h
>> Log:
>> Add cpuset, an api for thread to cpu binding and cpu resource grouping
>> and assignment.
>> - Add a reference to a struct cpuset in each thread that is inherited
>> from
>> the thread that created it.
>> - Release the reference when the thread is destroyed.
>> - Add prototypes for syscalls and macros for manipulating cpusets in
>> sys/cpuset.h
>> - Add syscalls to create, get, and set new numbered cpusets:
>> cpuset(), cpuset_{get,set}id()
>> - Add syscalls for getting and setting affinity masks for cpusets or
>> individual threads: cpuid_{get,set}affinity()
>> - Add types for the 'level' and 'which' parameters for the cpuset. This
>> will permit expansion of the api to cover cpu masks for other objects
>> identifiable with an id_t integer. For example, IRQs and Jails may be
>> coming soon.
>> - The root set 0 contains all valid cpus. All thread initially belong
>> to
>> cpuset 1. This permits migrating all threads off of certain cpus to
>> reserve them for special applications.
>> Sponsored by: Nokia
>> Discussed with: arch, rwatson, brooks, davidxu, deischen
>> Reviewed by: antoine
>>
>
> The cpuset_setaffinity with command CPU_WHICH_TID may hurt another
> process if a weird process is out of the control.
> The current code intents to lookup globally a thread has exact thread
> id, because thread may be created and exited quickly, and thread ID is reused
> quickly too, it is possible the weird process gives an outdated thread ID to
> the API, and an irrelvant thread within another process
> belongs to same user gets bind to cpus, such problem is very difficult
> to be diagnosed when it happens, and it is an administrator is
> nightmare. I think there should be a CPU_WHICH_TID_LOCAL command
> to limit the searching scope in current process, and in most case,
> the CPU_WHICH_TID_LOCAL will be used instead.
Does the tid allocator quickly recycle numbers? This would be different
from the pid allocator if it does. Basically every syscall that takes a
numeric id would be subject to this problem.
I expect application programers will more often specify binding from
within the running thread using -1.
However, there is a seperate problem that is endemic with our current
threading support. thread_find() requires the proc lock and returns a
pointer to the found thread. However, the proc lock is not sufficient to
ensure that the thread is not exiting and recycled after thread_find()
returns. I believe virtually every user of this interface may be subject
to races.
And while were on the subject. Why is it lwpid_t anyway? We don't have
lwps, we have threads.
Thanks,
Jeff
>
> Regards,
> David Xu
>
More information about the cvs-src
mailing list