실시간, SCHED_FIFO, CPU_SET()

실시간, SCHED_FIFO, CPU_SET()

두 개의 CPU(각 CPU)에 두 개의 실시간 프로세스를 할당하려고 합니다. SCHED_FIFO 스케줄링 정책을 사용하고 있습니다. 나는 다음을 수행하고 있습니다 :

  • CPU를 격리하려면 /etc/default/grub의 GRUB_CMDLINE_LINUX_DEFAULT에 "quiet Splash isolcpus = 6,7"을 추가하세요. 시스템을 재부팅했는데 6 및 7 CPU에서 실행되는 일부 커널 스레드를 제외하고 작동하는 것 같습니다(이 작업을 수행하려면 top 명령을 사용합니다).
  • 그런 다음 이:

    retval = sched_getattr(0, &attr, sizeof(struct sched_attr), 0);

    if(retval < 0){perror("Error in get attr:");return0;}
    

    attr.sched_policy = SCHED_FIFO;

    attr.sched_priority = 1;

    retval = sched_setattr(0,&attr,0);

    if(retval<0) { perror("일정 매개변수 설정 중 오류 발생:") return 0;

    CPU_ZERO(&set);
    
    CPU_SET(7,&set);
    
    retval = sched_setaffinity(0,sizeof(cpu_set_t),&set);
        if(retval<0){perror("Affinity Error ");return 0;}
    

    나는 이 프로세스를 CPU7에서 실행할 계획입니다. 하지만 나는 이것을 할 수 없습니다. 왜 실패했나요? 이 접근 방식이 작동하지 않으면 다른 접근 방식을 제안해 주실 수 있나요?

편집: 추가 CPU 그룹을 만들지 않았습니다. /sys/fs/cgroup에는 cpuset 디렉토리가 하나만 있습니다.

답변1

어떤 오류가 반환되었는지 알아보세요. 바라보다

man 2 sched_setaffinity 

그 외에도 선호도를 변경하려면 "CAP_SYS_NICE" 기능이 필요합니다. 그래서 당신은해야합니다

  • 프로그램을 루트로 실행하거나
  • 이 기능을 바이너리 파일에 설정합니다(참고: NFS 마운트 파일 시스템에는 적용되지 않음).

바이너리에 필요한 기능 설정은 다음 명령으로 수행됩니다.

sudo setcap CAP_SYS_NICE+e <file>

관련 정보