CPU_SET(3) - wariua/manpages-ko GitHub Wiki
CPU_SET, CPU_CLR, CPU_ISSET, CPU_ZERO, CPU_COUNT, CPU_AND, CPU_OR, CPU_XOR, CPU_EQUAL, CPU_ALLOC, CPU_ALLOC_SIZE, CPU_FREE, CPU_SET_S, CPU_CLR_S, CPU_ISSET_S, CPU_ZERO_S, CPU_COUNT_S, CPU_AND_S, CPU_OR_S, CPU_XOR_S, CPU_EQUAL_S - CPU μΈνΈ μ‘°μμ μν λ§€ν¬λ‘
#define _GNU_SOURCE /* feature_test_macros(7) μ°Έκ³ */
#include <sched.h>
void CPU_ZERO(cpu_set_t *set);
void CPU_SET(int cpu, cpu_set_t *set);
void CPU_CLR(int cpu, cpu_set_t *set);
int CPU_ISSET(int cpu, cpu_set_t *set);
int CPU_COUNT(cpu_set_t *set);
void CPU_AND(cpu_set_t *destset,
cpu_set_t *srcset1, cpu_set_t *srcset2);
void CPU_OR(cpu_set_t *destset,
cpu_set_t *srcset1, cpu_set_t *srcset2);
void CPU_XOR(cpu_set_t *destset,
cpu_set_t *srcset1, cpu_set_t *srcset2);
int CPU_EQUAL(cpu_set_t *set1, cpu_set_t *set2);
cpu_set_t *CPU_ALLOC(int num_cpus);
void CPU_FREE(cpu_set_t *set);
size_t CPU_ALLOC_SIZE(int num_cpus);
void CPU_ZERO_S(size_t setsize, cpu_set_t *set);
void CPU_SET_S(int cpu, size_t setsize, cpu_set_t *set);
void CPU_CLR_S(int cpu, size_t setsize, cpu_set_t *set);
int CPU_ISSET_S(int cpu, size_t setsize, cpu_set_t *set);
int CPU_COUNT_S(size_t setsize, cpu_set_t *set);
void CPU_AND_S(size_t setsize, cpu_set_t *destset,
cpu_set_t *srcset1, cpu_set_t *srcset2);
void CPU_OR_S(size_t setsize, cpu_set_t *destset,
cpu_set_t *srcset1, cpu_set_t *srcset2);
void CPU_XOR_S(size_t setsize, cpu_set_t *destset,
cpu_set_t *srcset1, cpu_set_t *srcset2);
int CPU_EQUAL_S(size_t setsize, cpu_set_t *set1, cpu_set_t *set2);
cpu_set_t
λ°μ΄ν° ꡬ쑰λ CPUλ€μ μ§ν©μ νννλ€. sched_setaffinity(2) λ° μ μ¬ μΈν°νμ΄μ€λ€μμ CPU μΈνΈλ₯Ό μ¬μ©νλ€.
cpu_set_t
λ°μ΄ν° νμ
μ λΉνΈ λ§μ€ν¬λ‘ ꡬνλμ΄ μλ€. νμ§λ§ μ΄ μλ£ κ΅¬μ‘°λ₯Ό λΆν¬λͺ
ν κ²μΌλ‘ λ€λ£¨μ΄μΌ νλ€. μ¦, λͺ¨λ CPU μΈνΈ μ‘°μμ΄ μ΄ νμ΄μ§μμ κΈ°μ νλ λ§€ν¬λ‘λ€μ ν΅ν΄ μ΄λ€μ ΈμΌ νλ€.
CPU μΈνΈ cpu
μ λμνλ λ€μ λ§€ν¬λ‘λ€μ΄ μλ€.
CPU_ZERO()
-
set
μ λΉμμ μ΄λ€ CPUλ λ΄μ§ μκ² λ§λ¦. CPU_SET()
- CPU
cpu
λ₯Όset
μ μΆκ°. CPU_CLR()
- CPU
cpu
λ₯Όset
μμ μ κ±°. CPU_ISSET()
- CPU
cpu
κ°set
μ μνλμ§ κ²μ¬. CPU_COUNT()
-
set
λ΄μ CPU κ°μ λ°ν.
cpu
μΈμλ₯Ό μ§μ νλ κ²½μ° κ·Έ μΈμμ λΆλ ν¨κ³Όκ° μμ΄μΌ νλ€. μ λ§€ν¬λ‘λ€μμ κ·Έ μΈμλ₯Ό μ¬λ¬ λ² νκ°ν μλ μκΈ° λλ¬Έμ΄λ€.
μμ€ν
μ 첫 λ²μ§Έ CPUκ° cpu
κ° 0μ ν΄λΉνκ³ λ€μ CPUκ° cpu
κ° 1μ ν΄λΉνλ μμ΄λ€. νΉμ CPUκ° μ¬μ© κ°λ₯νμ§μ λν΄, λλ CPU μΈνΈκ° μ°μμΈμ§μ λν΄ μ΄λ€ κ°μ λ ν΄μλ μ λλ€. CPUκ° λμ μΌλ‘ μ€νλΌμΈμ΄ λκ±°λ λ€λ₯Έ μ΄μ λ‘ λΉ μ Έ μμ μ μκΈ° λλ¬Έμ΄λ€. μμ CPU_SETSIZE
(νμ¬ 1024)λ cpu_set_t
μ μ μ₯ν μ μλ κ°μ₯ ν° CPU λ²νΈλ³΄λ€ 1λ§νΌ ν° κ°μ λνλΈλ€.
λ€μ λ§€ν¬λ‘λ€μ CPU μΈνΈμ λ Όλ¦¬ μ°μ°μ μννλ€.
CPU_AND()
- μΈνΈ
srcset1
κ³Όsrcset2
μ κ΅μ§ν©μ (μΆλ° μΈνΈ μ€ νλμΌ μλ μλ)destset
μ μ μ₯. CPU_OR()
- μΈνΈ
srcset1
κ³Όsrcset2
μ ν©μ§ν©μ (μΆλ° μΈνΈ μ€ νλμΌ μλ μλ)destset
μ μ μ₯. CPU_XOR()
- μΈνΈ
srcset1
κ³Όsrcset2
μ XORμ (μΆλ° μΈνΈ μ€ νλμΌ μλ μλ)destset
μ μ μ₯. XORμsrcset1
κ³Όsrcset2
μ€ ν μͺ½μλ§ μλ CPUλ€μ μ§ν©μ λ»νλ€. CPU_EQUAL()
- λ CPU μΈνΈκ° μ νν κ°μ CPUλ€μ λ΄κ³ μλμ§ κ²μ¬.
CPU μΈνΈ ν¬κΈ°λ₯Ό λμ μΌλ‘ μ ν μ μμ΄μΌ νλ (κ°λ Ή νμ€ cpu_set_t
λ°μ΄ν° νμ
μ΄ κ·μ νλ κ²λ³΄λ€ ν° μΈνΈλ₯Ό ν λΉν΄μΌ νλ) μμ©μ΄ μμ μ μκΈ° λλ¬Έμ μμ¦ glibcμμλ μ΄λ₯Ό μ§μνκΈ° μν λ§€ν¬λ‘λ€μ μ 곡νλ€.
λ€μ λ§€ν¬λ‘λ€μ μ¬μ©ν΄ CPU μΈνΈλ₯Ό ν λΉνκ³ ν΄μ νλ€.
CPU_ALLOC()
- 0μμ
num_cpus-1
κΉμ§ λ²μμ CPUλ€μ λ΄μ λ§νΌ ν° CPU μΈνΈλ₯Ό ν λΉ. CPU_ALLOC_SIZE()
- 0μμ
num_cpus-1
κΉμ§ λ²μμ CPUλ€μ λ΄λ λ° νμν CPU μΈνΈμ λ°μ΄νΈ λ¨μ ν¬κΈ°λ₯Ό λ°ν. μλμμ μ€λͺ νλCPU_*_S()
λ§€ν¬λ‘λ€μsetsize
μΈμλ‘ μ¬μ©ν μ μλ κ°μ μ΄ λ§€ν¬λ‘κ° μ 곡νλ€. CPU_FREE()
- μμ
CPU_ALLOC()
μΌλ‘ ν λΉν CPU μΈνΈ ν΄μ .
μ΄λ¦μ΄ "_S"λ‘ λλλ λ§€ν¬λ‘λ€μ μ΄λ¦μ μ λμ¬ μλ λ§€ν¬λ‘λ€μ μμ¬νμ΄λ€. μ΄ λ§€ν¬λ‘λ€μ κ·Έ μμ¬νκ³Ό κ°μ μΌμ μννλ ν¬κΈ°κ° setsize
λ°μ΄νΈμΈ λμ ν λΉ CPU μΈνΈμ λν΄ λμνλ€.
CPU_ISSET()
λ° CPU_ISSET_S()
λ set
μ cpu
κ° μ€μ λμ΄ μμΌλ©΄ 0 μλ κ°μ λ°ννλ€. μλλ©΄ 0μ λ°ννλ€.
CPU_COUNT()
λ° CPU_COUNT_S()
λ set
λ΄μ CPU κ°μλ₯Ό λ°ννλ€.
CPU_EQUAL()
λ° CPU_EQUAL_S()
λ λ CPU μΈνΈκ° κ°μΌλ©΄ 0 μλ κ°μ λ°ννλ€. μλλ©΄ 0μ λ°ννλ€.
CPU_ALLOC()
μ μ±κ³΅ μ ν¬μΈν°λ₯Ό, μ€ν¨ μ NULLμ λ°ννλ€. (μ€λ₯λ malloc(3)μμμ κ°λ€.)
CPU_ALLOC_SIZE()
λ μ§μ ν ν¬κΈ°μ CPU μΈνΈλ₯Ό μ μ₯νλ λ° νμν λ°μ΄νΈ μλ₯Ό λ°ννλ€.
λ€λ₯Έ ν¨μλ€μ κ°μ λ°ννμ§ μλλ€.
glibc 2.3.3μμ CPU_ZERO()
, CPU_SET()
, CPU_CLR()
, CPU_ISSET()
λ§€ν¬λ‘κ° μΆκ°λμλ€.
glibc 2.6μμ CPU_COUNT()
κ° μ²μ λ±μ₯νλ€.
glibc 2.7μμ CPU_AND()
, CPU_OR()
, CPU_XOR()
, CPU_EQUAL()
, CPU_ALLOC()
, CPU_ALLOC_SIZE()
, CPU_FREE()
, CPU_ZERO_S()
, CPU_SET_S()
, CPU_CLR_S()
, CPU_ISSET_S()
, CPU_AND_S()
, CPU_OR_S()
, CPU_XOR_S()
, CPU_EQUAL_S()
κ° μ²μ λ±μ₯νλ€.
μ΄ μΈν°νμ΄μ€λ€μ 리λ μ€ μ μ©μ΄λ€.
CPU μΈνΈλ₯Ό 볡μ νλ €λ©΄ memcpy(3)
λ₯Ό μ°λ©΄ λλ€.
CPU μΈνΈλ κΈ΄ μλ λ¨μλ‘ ν λΉλ λΉνΈ λ§μ€ν¬μ΄λ€. κ·Έλμ λμ ν λΉ CPU μΈνΈμ μ€μ CPU μλ κ°μ₯ κ°κΉμ΄ sizeof(unsigned long)
μ λ°°μλ‘ μ¬λ¦Όν κ²μ΄ λλ€. μμ©μμλ μ΄ μΆκ° λΉνΈλ€μ λ΄μ©λ¬Όμ μ μλμ΄ μμ§ μμ κ²μΌλ‘ 보μμΌ νλ€.
μ΄λ¦μ μ μ¬μ±μλ λΆκ΅¬νκ³ μμ CPU_SETSIZE
λ cpu_set_t
λ°μ΄ν° νμ
λ΄μ CPU μλ₯Ό λνλ΄λ κ²μ΄κ³ (κ·Έλμ μ€μ§μ μΌλ‘ λΉνΈ λ§μ€ν¬μ λΉνΈ κ°μμ΄κ³ ) CPU_*_S()
λ§€ν¬λ‘μ setsize
μΈμλ λ°μ΄νΈ λ¨μ ν¬κΈ°μ΄λ€.
SYNOPSISμ λμ μλ μΈμμ λ°ν κ°μ λ°μ΄ν° νμ μ κ° κ²½μ°μ 무μμ μμνλμ§μ λν ννΈμ΄λ€. νμ§λ§ μ΄ μΈν°νμ΄μ€λ€μ λ§€ν¬λ‘λ‘ κ΅¬νλμ΄ μκΈ° λλ¬Έμ κ·Έ μ μμ μ΄κΈ΄ κ²½μ° μ»΄νμΌλ¬κ° νμ μ€λ₯λ€μ κΌ λ€ μ‘μ μ£Όμ§λ μμ κ²μ΄λ€.
glibcκ° 2.8 μ΄μ μΈ 32λΉνΈ νλ«νΌμμ CPU_ALLOC()
μ΄ νμν ν¬κΈ° λ λ°°λ‘ κ³΅κ°μ ν λΉνλ©° CPU_ALLOC_SIZE()
κ° λ λ°°λ‘ κ°μ λ°ννλ€. μ΄ λ²κ·Έκ° νλ‘κ·Έλ¨μ λμ κ²°κ³Όμ μν₯μ μ£Όμ§λ μκ² μ§λ§ λ©λͺ¨λ¦¬κ° λλΉλλ©° λμ ν λΉ CPU μΈνΈμ λμνλ λ§€ν¬λ‘λ€μ΄ λ ν¨μ¨μ μΌλ‘ λμνκ² λλ€. glibc 2.9μμ μ΄ λ²κ·Έλ€μ΄ μμ λμλ€.
λ€μ νλ‘κ·Έλ¨μ λμ ν λΉ CPU μΈνΈμ μ°λ λ§€ν¬λ‘ λͺ κ°μ§μ μ¬μ© λ°©μμ λ³΄μ¬ μ€λ€.
#define _GNU_SOURCE
#include <sched.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <assert.h>
int
main(int argc, char *argv[])
{
cpu_set_t *cpusetp;
size_t size;
int num_cpus, cpu;
if (argc < 2) {
fprintf(stderr, "Usage: %s <num-cpus>\n", argv[0]);
exit(EXIT_FAILURE);
}
num_cpus = atoi(argv[1]);
cpusetp = CPU_ALLOC(num_cpus);
if (cpusetp == NULL) {
perror("CPU_ALLOC");
exit(EXIT_FAILURE);
}
size = CPU_ALLOC_SIZE(num_cpus);
CPU_ZERO_S(size, cpusetp);
for (cpu = 0; cpu < num_cpus; cpu += 2)
CPU_SET_S(cpu, size, cpusetp);
printf("CPU_COUNT() of set: %d\n", CPU_COUNT_S(size, cpusetp));
CPU_FREE(cpusetp);
exit(EXIT_SUCCESS);
}
sched_setaffinity(2), pthread_attr_setaffinity_np(3), pthread_setaffinity_np(3), cpuset(7)
2019-03-06