두 개의 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>