-
카테고리
-
세부 분야
시스템
-
해결 여부
미해결
cpuset이 바뀌지 않습니다
19.05.09 21:51 작성 조회수 105
0
#define _GNU_SOURCE
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static void print_cpuset(cpu_set_t *mask) {
for(int i=0; i<4; i++) {
if(CPU_ISSET(i, mask)) {
printf("CPU%d ", i);
}
}
printf("\n");
}
int main(void) {
cpu_set_t mask;
int cur_cpu;
if(sched_getaffinity(getpid(), sizeof(cpu_set_t), &mask) == -1) {
perror("sched_getaffinity error\n");
return -1;
}
print_cpuset(&mask);
printf("run on CPU%d\n", sched_getcpu());
cur_cpu = sched_getcpu();
if(++cur_cpu == 4) {
cur_cpu = 0;
}
CPU_ZERO(&mask);
CPU_ISSET(cur_cpu, &mask);
sched_setaffinity(getpid(), sizeof(cpu_set_t), &mask);
sleep(1);
cur_cpu = sched_getcpu();
printf("run on CPU%d\n", cur_cpu);
return 0;
}
답변을 작성해보세요.
0
0
유영재
질문자2019.05.10
아아 외장하드에 리눅스를 설치한 형태라서요 저는 cpuinfo에서 4개의 cpu정보를 알 수 있었습니다. 그리고 제가 실수한게 ISSET으로 검사를 했네요. SET으로 바꾸니 잘됩니다 ㅎㅎㅎ
0
ProgCoach4U
지식공유자2019.05.10
먼저, 가상머신 환경이시라면 가상머신 설정에 CPU를 몇개 할당하셨는지 확인해보셔야 할 것 같아요. 실제 CPU가 쿼드코어인 경우에도 가상머신 설정 시 가상머신에 CPU를 1개만 할당하는 것이 기본일 것 같습니다. 가상머신 설정에서도 확인해보시고, 가상머신 내의 리눅스에서도 확인해보시면 좋을 것 같습니다. 리눅스 쉘에서 cat /proc/cpuinfo 명령을 수행하시면 시스템 상의 CPU 정보를 확인하실 수 있습니다.
그리고 코드 상에..
main()의 sched_setaffinity() 호출하기 직전에 CPU_ISSET()이 아니라 CPU_SET()을 호출해야 원하시는 대로 코드가 동작할 것 같네요 :)
확인해보시고, 다른 문의사항 있으시면 다시 댓글 달아주세요~
0
답변 4