cpuset이 바뀌지 않습니다
289
작성한 질문수 158
#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;
}
답변 4
0
아아 외장하드에 리눅스를 설치한 형태라서요 저는 cpuinfo에서 4개의 cpu정보를 알 수 있었습니다. 그리고 제가 실수한게 ISSET으로 검사를 했네요. SET으로 바꾸니 잘됩니다 ㅎㅎㅎ
0
먼저, 가상머신 환경이시라면 가상머신 설정에 CPU를 몇개 할당하셨는지 확인해보셔야 할 것 같아요. 실제 CPU가 쿼드코어인 경우에도 가상머신 설정 시 가상머신에 CPU를 1개만 할당하는 것이 기본일 것 같습니다. 가상머신 설정에서도 확인해보시고, 가상머신 내의 리눅스에서도 확인해보시면 좋을 것 같습니다. 리눅스 쉘에서 cat /proc/cpuinfo 명령을 수행하시면 시스템 상의 CPU 정보를 확인하실 수 있습니다.
그리고 코드 상에..
main()의 sched_setaffinity() 호출하기 직전에 CPU_ISSET()이 아니라 CPU_SET()을 호출해야 원하시는 대로 코드가 동작할 것 같네요 :)
확인해보시고, 다른 문의사항 있으시면 다시 댓글 달아주세요~
inotify 객체에 등록된 watch descriptor 해제 관련 질문
0
37
2
select API 실습 코드 질문
0
41
2
wsl에서 fcntl사용
0
73
2
inotify_event 구조체 질문 [파일 이벤트 - 라이브 프로그래밍]에서...
0
180
2
./stat 파일이름
0
273
2
fopen r, r+모드 차이
0
460
2
강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?
0
326
1
pthread 질문
0
419
2
I/O Multiplexing(select) 질문
0
325
1
inotify.c. ret 질문
0
302
1
inotify.c 질의합니다.
1
317
1
child process
0
715
1
read/blocking
0
565
1
flock
0
565
1
system call
0
598
1
pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?
0
487
1
fork() 함수 사용시 결과 관련 질문
0
371
1
exec 관련 궁금한 사항
0
450
2
파일 디스크립터와 FILE 구조체에 대한 질문
0
552
1
buf 선언에 따른 read() fail 문제
0
251
2
파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문
0
254
1
2번 multi thread 방법 질문
0
242
1
segmentation fault 발생 관련 문의
1
842
1
라이브 코딩 실습 코드
0
235
1





