can the scheduler decide to schedule an interrupted but runnable thread on another CPU core? What are the implications for code?
Andrey Chernov
ache at freebsd.org
Sat Feb 15 02:30:42 UTC 2014
On 15.02.2014 4:11, John-Mark Gurney wrote:
>>> This is code example from cpuminer port, in case you are interested, it is very simple:
>>>
>>> static inline void affine_to_cpu(int id, int cpu)
>>> {
>>> cpuset_t set;
>>> CPU_ZERO(&set);
>>> CPU_SET(cpu, &set);
>>> cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_CPUSET, -1, sizeof(cpuset_t), &set);
>>
>> I think that CPU_WHICH_TID should have been used here.
>
> I agree... cpuset(2):
> The which argument determines how the value of id is interpreted and is
> of type cpuwhich_t. The which argument may have the following values:
>
> CPU_WHICH_TID id is lwpid_t (thread id)
> CPU_WHICH_PID id is pid_t (process id)
> CPU_WHICH_CPUSET id is a cpusetid_t (cpuset id)
> CPU_WHICH_IRQ id is an irq number
>
> An id of '-1' may be used with a which of CPU_WHICH_TID, CPU_WHICH_PID,
> or CPU_WHICH_CPUSET to mean the current thread, process, or current
> thread's cpuset. All cpuset syscalls allow this usage.
The question still remains: why SCHED_ULE and SCHED_4BSD do different
things here on CPU_WHICH_CPUSET == -1 (current thread's cpuset)? It
looks like SCHED_ULE changes per/process mask while SCHED_4BSD change
per/thread mask in that case.
--
http://ache.vniz.net/
More information about the freebsd-arch
mailing list