Manual: pthread_setaffinity_np, pthread_getaffinity_np

zz

http://linux.frank4dd.com/en/man3/pthread_setaffinity_np.htm

http://www.daemon-systems.org/man/pthread_getaffinity_np.3.html

NAME


pthread_setaffinity_np, pthread_getaffinity_np - set/getCPU affinity of a thread

SYNOPSIS



#define _GNU_SOURCE
#include <pthread.h>


int pthread_setaffinity_np(pthread_t thread, size_tcpusetsize,
const cpu_set_t *
cpuset);
int pthread_getaffinity_np(pthread_t
thread, size_t cpusetsize,
cpu_set_t *
cpuset);


Compile and link with -pthread.

DESCRIPTION


Thepthread_setaffinity_np() functionsets the CPU affinity mask of the threadthread to the CPU set pointed to bycpuset. If the call is successful,and the thread is not currently running on one of the CPUs incpuset, then it is migrated to one of those CPUs.

Thepthread_getaffinity_np() function returns the CPU affinity mask of the threadthread in the buffer pointed to bycpuset.

For more details on CPU affinity masks, seesched_setaffinity(2).For a description of a set of macrosthat can be used to manipulate and inspect CPU sets, seeCPU_SET(3).

The argumentcpusetsize is the length (in bytes) of the buffer pointed to bycpuset. Typically, this argument would be specified assizeof(cpu_set_t). (It may be some other value, if using the macros described inCPU_SET(3)for dynamically allocating a CPU set.)

RETURN VALUE


On success, these functions return 0;on error, they return a non-zero error number.

ERRORS


EFAULTA supplied memory address was invalid.
EINVAL(pthread_setaffinity_np()) The affinity bit maskmask contains no processors that are currently physically on the systemand permitted to the thread according to any restrictions thatmay be imposed by the "cpuset" mechanism described incpuset(7).
EINVAL(pthread_setaffinity_np()) cpuset specified a CPU that was outside the set supported by the kernel.(The kernel configuration optionCONFIG_NR_CPUS defines the range of the set supported by the kernel data typeused to represent CPU sets.)
EINVAL(pthread_getaffinity_np()) cpusetsize is smaller than the size of the affinity mask used by the kernel.
ESRCHNo thread with the IDthread could be found.

VERSIONS


These functions are provided by glibc since version 2.3.4.

CONFORMING TO


These functions are non-standard GNU extensions;hence the suffix "_np" (non-portable) in the names.

NOTES


After a call topthread_setaffinity_np(), the set of CPUs on which the thread will actually run isthe intersection of the set specified in thecpuset argument and the set of CPUs actually present on the system.The system may further restrict the set of CPUs on which the threadruns if the "cpuset" mechanism described incpuset(7)is being used.These restrictions on the actual set of CPUs on which the threadwill run are silently imposed by the kernel.

These functions are implemented on top of thesched_setaffinity(2)andsched_getaffinity(2)system calls.

In glibc 2.3.3 only,versions of these functions were provided that did not have acpusetsize argument.Instead the CPU set size given to the underlying system calls was alwayssizeof(cpu_set_t).

A new thread created bypthread_create() inherits a copy of its creator’s CPU affinity mask.

EXAMPLE


In the following program, the main thread usespthread_setaffinity_np() to set its CPU affinity mask to include CPUs 0 to 7(which may not all be available on the system),and then callspthread_getaffinity_np() to check the resulting CPU affinity mask of the thread.

#define _GNU_SOURCE
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#define handle_error_en(en, msg)\
do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

int main(int argc, char *argv[])
{
    int s, j;
    cpu_set_t cpuset;
    pthread_t thread;

    thread = pthread_self();

    /* Set affinity mask to include CPUs 0 to 7 */

    CPU_ZERO(&cpuset);
    for (j = 0; j < 8; j++)
        CPU_SET(j, &cpuset);

    s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
    if (s != 0)
        handle_error_en(s, "pthread_setaffinity_np");

    /* Check the actual affinity mask assigned to the thread */

    s = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
    if (s != 0)
        handle_error_en(s, "pthread_getaffinity_np");

    printf("Set returned by pthread_getaffinity_np() contained:\n");
    for (j = 0; j < CPU_SETSIZE; j++)
        if (CPU_ISSET(j, &cpuset))
            printf(" CPU %d\n", j);

    exit(EXIT_SUCCESS);
}

SEE ALSO


sched_getcpu(3),sched_setaffinity(2),sched_setscheduler(2),pthread_attr_setaffinity_np(3),pthread_self(3),cpuset(7),pthreads(7)

COLOPHON


This page is part of release 3.23 of the Linuxman-pages project.A description of the project,and information about reporting bugs,can be found athttp://www.kernel.org/doc/man-pages/.


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值