« Return to Thread: Can I bind POSIX thread to cpu core?

Re: Can I bind POSIX thread to cpu core?

by Dan Nelson :: Rate this Message:

Reply to Author | View in Thread

In the last episode (Jun 28):
> I have system with 4 core cpu. How can I bind POSIX thread to the one
> core?  I mean that this thread can be executed on the fixed core.

See the cpuset(2) and cpuset_setaffinity(2) manpages.  Something like this
should work:

#include <err.h>
#include <stdio.h>
#include <sys/param.h>
#include <sys/cpuset.h>

int main(void)
{
        int i;
        cpuset_t myset;

        /* Get CPU mask for the current thread */
        if (cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(myset), &myset) == -1)
                err(1, "getaffinity failed");

        /* Find first available CPU - don't assume CPU0 is always available */
        for (i = 0; i < CPU_SETSIZE; i++)
                if (CPU_ISSET(i, &myset))
                        break;

        if (i == CPU_SETSIZE)
                err(1, "Not allowed to run on any CPUs?  How did I print this, then?");

        /* Set new CPU mask */
        printf ("Setting affinity to CPU %d\n", i);
        CPU_ZERO(&myset);
        CPU_SET(i, &myset);

        if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(myset), &myset) == -1)
                warn("setaffinity failed");

        /* Do CPU-intensive stuff here */
        return 0;
}


--
        Dan Nelson
        dnelson@...
_______________________________________________
freebsd-hackers@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@..."

 « Return to Thread: Can I bind POSIX thread to cpu core?