pthread_setaffinity_np(3) - wariua/manpages-ko GitHub Wiki

NAME

pthread_setaffinity_np, pthread_getaffinity_np - ์Šค๋ ˆ๋“œ์˜ CPU ์นœํ™”์„ฑ ์„ค์ •ํ•˜๊ธฐ/์–ป๊ธฐ

SYNOPSIS

#define _GNU_SOURCE             /* feature_test_macros(7) ์ฐธ๊ณ  */
#include <pthread.h>

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

-pthread๋กœ ์ปดํŒŒ์ผ ๋ฐ ๋งํฌ.

DESCRIPTION

pthread_setaffinity_np() ํ•จ์ˆ˜๋Š” ์Šค๋ ˆ๋“œ thread์˜ CPU ์นœํ™”์„ฑ ๋งˆ์Šคํฌ๋ฅผ cpuset์ด ๊ฐ€๋ฆฌํ‚ค๋Š” CPU ์„ธํŠธ๋กœ ์„ค์ •ํ•œ๋‹ค. ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ•˜๊ณ  ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ cpuset์˜ ํ•œ CPU์—์„œ ๋Œ๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด ๊ทธ CPU๋“ค ์ค‘ ํ•˜๋‚˜๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์˜ฎ๊ธด๋‹ค.

pthread_getaffinity_np() ํ•จ์ˆ˜๋Š” ์Šค๋ ˆ๋“œ thread์˜ CPU ์นœํ™”์„ฑ ๋งˆ์Šคํฌ๋ฅผ cpuset์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฒ„ํผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

CPU ์นœํ™”์„ฑ ๋งˆ์Šคํฌ์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ sched_setaffinity(2)๋ฅผ ๋ณด๋ผ. CPU ์„ธํŠธ ์กฐ์ž‘๊ณผ ๊ฒ€์‚ฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งคํฌ๋กœ๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ CPU_SET(3)์„ ๋ณด๋ผ.

cpusetsize ์ธ์ž๋Š” cpuset์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฒ„ํผ์˜ (๋ฐ”์ดํŠธ ๋‹จ์œ„) ๊ธธ์ด์ด๋‹ค. ๋ณดํ†ต์€ ์ด ์ธ์ž๋ฅผ sizeof(cpu_set_t)๋กœ ์ง€์ •ํ•  ๊ฒƒ์ด๋‹ค. (CPU_SET(3)์—์„œ ๊ธฐ์ˆ ํ•˜๋Š” CPU ์„ธํŠธ ๋™์  ํ• ๋‹น์„ ์œ„ํ•œ ๋งคํฌ๋กœ๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์–ด๋–ค ๋‹ค๋ฅธ ๊ฐ’์ผ ์ˆ˜๋„ ์žˆ๋‹ค.)

RETURN VALUE

์„ฑ๊ณต ์‹œ ์ด ํ•จ์ˆ˜๋“ค์€ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜ ์‹œ 0 ์•„๋‹Œ ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ERRORS

EFAULT
์ œ๊ณตํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค.
EINVAL
(pthread_setaffinity_np()) ์นœํ™”์„ฑ ๋น„ํŠธ ๋งˆ์Šคํฌ mask๊ฐ€ ํ˜„์žฌ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์ƒ์— ์žˆ์œผ๋ฉด์„œ cpuset(7)์—์„œ ๊ธฐ์ˆ ํ•˜๋Š” "cpuset" ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๋ถ€๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์•ฝ์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ์—๊ฒŒ ํ—ˆ์šฉ๋œ ํ”„๋กœ์„ธ์„œ๋ฅผ ํ•˜๋‚˜๋„ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
EINVAL
(pthread_setaffinity_np()) cpuset์œผ๋กœ ์ปค๋„์—์„œ ์ง€์›ํ•˜๋Š” ์ง‘ํ•ฉ์„ ๋ฒ—์–ด๋‚˜๋Š” CPU๋ฅผ ์ง€์ •ํ–ˆ๋‹ค. (์ปค๋„ ๊ตฌ์„ฑ ์˜ต์…˜ CONFIG_NR_CPUS๊ฐ€ CPU ์ง‘ํ•ฉ ํ‘œํ˜„์— ์“ฐ๋Š” ์ปค๋„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ง€์›ํ•˜๋Š” ์ง‘ํ•ฉ์˜ ๋ฒ”์œ„๋ฅผ ๊ทœ์ •ํ•œ๋‹ค.)
EINVAL
(pthread_getaffinity_np()) cpusetsize๊ฐ€ ์ปค๋„์—์„œ ์“ฐ๋Š” ์นœํ™”์„ฑ ๋งˆ์Šคํฌ์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๋‹ค.
ESRCH
ID๊ฐ€ thread์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.

VERSIONS

glibc ๋ฒ„์ „ 2.3.4๋ถ€ํ„ฐ ์ด ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

ATTRIBUTES

์ด ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ attributes(7)๋ฅผ ๋ณด๋ผ.

์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๊ฐ’
pthread_setaffinity_np(),
pthread_getaffinity_np()
์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Safe

CONFORMING TO

์ด ํ•จ์ˆ˜๋“ค์€ ๋น„ํ‘œ์ค€ GNU ํ™•์žฅ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฆ„ ๋’ค์— "_np"(nonportable: ์ด์‹์„ฑ ์—†์Œ)๊ฐ€ ๋ถ™์–ด ์žˆ๋‹ค.

NOTES

pthread_setaffinity_np() ํ˜ธ์ถœ ํ›„์— ์Šค๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ๋กœ ๋Œ๊ฒŒ ๋  CPU๋“ค์˜ ์ง‘ํ•ฉ์€ cpuset ์ธ์ž์— ์ง€์ •ํ•œ ์ง‘ํ•ฉ๊ณผ ์‹œ์Šคํ…œ์— ์‹ค์ œ ์กด์žฌํ•˜๋Š” CPU๋“ค์˜ ์ง‘ํ•ฉ์˜ ๊ต์ง‘ํ•ฉ์ด๋‹ค. cpuset(7)์—์„œ ๊ธฐ์ˆ ํ•˜๋Š” "cpuset" ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ ๋„๋Š” CPU ์ง‘ํ•ฉ์„ ์‹œ์Šคํ…œ์—์„œ ์ถ”๊ฐ€๋กœ ์ œ์•ฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ๊ฒŒ ๋  ์‹ค์ œ CPU๋“ค์˜ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์ด ์ œ์•ฝ๋“ค์€ ์ปค๋„์ด ์กฐ์šฉํžˆ ์ ์šฉํ•œ๋‹ค.

์ด ํ•จ์ˆ˜๋“ค์€ sched_setaffinity(2) ๋ฐ sched_getaffinity(2) ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์œ„์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

glibc 2.3.3์— ํ•œํ•ด ์ œ๊ณต๋๋˜ ๋ฒ„์ „์— cpusetsize ์ธ์ž๊ฐ€ ์—†์—ˆ๋‹ค. ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์—๊ฒŒ ์ฃผ๋Š” CPU ์„ธํŠธ ํฌ๊ธฐ๊ฐ€ ํ•ญ์ƒ sizeof(cpu_set_t)์˜€๋‹ค.

pthread_create(3)๋กœ ์ƒ์„ฑํ•œ ์‹ ๊ทœ ์Šค๋ ˆ๋“œ๋Š” ์ž๊ธฐ๋ฅผ ์ƒ์„ฑํ•œ ์Šค๋ ˆ๋“œ์˜ CPU ์นœํ™”์„ฑ ๋งˆ์Šคํฌ ์‚ฌ๋ณธ์„ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค.

EXAMPLE

๋‹ค์Œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ฃผ ์Šค๋ ˆ๋“œ๋Š” pthread_setaffinity_np()๋ฅผ ์ด์šฉํ•ด CPU 0์—์„œ 7๊นŒ์ง€๋ฅผ (์‹œ์Šคํ…œ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ) ํฌํ•จํ•˜๋„๋ก ์ž๊ธฐ CPU ์นœํ™”์„ฑ ๋งˆ์Šคํฌ๋ฅผ ์„ค์ •ํ•˜๊ณ ์„œ pthread_getaffinity_np()๋ฅผ ํ˜ธ์ถœํ•ด ๊ทธ๋ ‡๊ฒŒ ๋ฐ”๊พผ ์Šค๋ ˆ๋“œ์˜ CPU ์นœํ™”์„ฑ ๋งˆ์Šคํฌ๋ฅผ ํ™•์ธํ•œ๋‹ค.

#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();

    /* CPU 0์—์„œ 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");

    /* ์Šค๋ ˆ๋“œ์— ์นœํ™”์„ฑ ๋งˆ์Šคํฌ๊ฐ€ ์‹ค์ œ ๋ถ€์—ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ */

    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_setaffinity(2), CPU_SET(3), pthread_attr_setaffinity_np(3), pthread_self(3), sched_getcpu(3), cpuset(7), pthreads(7), sched(7)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ