• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

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;
}

답변 4

·

답변을 작성해보세요.

0

:)

0

유영재님의 프로필

유영재

질문자

2019.05.10

아아 외장하드에 리눅스를 설치한 형태라서요 저는 cpuinfo에서 4개의 cpu정보를 알 수 있었습니다. 그리고 제가 실수한게 ISSET으로 검사를 했네요. SET으로 바꾸니 잘됩니다 ㅎㅎㅎ

0

먼저, 가상머신 환경이시라면 가상머신 설정에 CPU를 몇개 할당하셨는지 확인해보셔야 할 것 같아요. 실제 CPU가 쿼드코어인 경우에도 가상머신 설정 시 가상머신에 CPU를 1개만 할당하는 것이 기본일 것 같습니다. 가상머신 설정에서도 확인해보시고, 가상머신 내의 리눅스에서도 확인해보시면 좋을 것 같습니다. 리눅스 쉘에서 cat /proc/cpuinfo 명령을 수행하시면 시스템 상의 CPU 정보를 확인하실 수 있습니다.

그리고 코드 상에..

main()의 sched_setaffinity() 호출하기 직전에 CPU_ISSET()이 아니라 CPU_SET()을 호출해야 원하시는 대로 코드가 동작할 것 같네요 :)

확인해보시고, 다른 문의사항 있으시면 다시 댓글 달아주세요~

0

유영재님의 프로필

유영재

질문자

2019.05.09

저는 쿼드코어라서 코어가 4개인데 코어 번호가 바뀌지 않습니다 혹시 놓친 부분이 있을까요?