inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리눅스 시스템 프로그래밍 - 이론과 실습

프로세서 친화 - 라이브 프로그래밍

cpuset이 바뀌지 않습니다

289

젓인

작성한 질문수 158

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

linux

답변 4

0

런잇(ProgCoach4U)

:)

0

젓인

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

0

런잇(ProgCoach4U)

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

그리고 코드 상에..

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

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

0

젓인

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

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