광범위한 계산을 수행하는 두 개의 프로세스 - 하나가 프로세서 시간의 ~100%를 얻으려면 어떻게 해야 합니까?

광범위한 계산을 수행하는 두 개의 프로세스 - 하나가 프로세서 시간의 ~100%를 얻으려면 어떻게 해야 합니까?

나는 두 가지 프로세스로 Ubuntu 기본 서버를 실행하고 있습니다. - 프로세스 1 - 100% 가동 시간 계산 수행, 컴퓨팅 성능을 커뮤니티에 공유하는 데 사용(prio 19에서 실행 중) - 프로세스 2 - 5~10분 동안 계산 수행, 때때로 나를 위해 계산하는 데 사용합니다(@prio -19를 실행 중입니다).

나는 프로세스 2에 100% 컴퓨팅 성능이 제공되기를 원합니다(프로세스 1은 그 순간 CPU의 0%에 가까워야 합니다).

나는 nice/renice를 사용하려고 시도했으며 프로세스 1에는 prio 19(가능한 가장 낮음)가 제공되고 프로세스 2에는 prio -19(가능한 가장 높음)가 제공됩니다. 하지만 내가 얻는 가장 좋은 것은 프로세스 1의 경우 CPU의 50%이고 프로세스 2의 경우 CPU의 50%입니다(htop으로 확인). 이는 나를 놀라게 했습니다...

두 프로세스 모두 다중 스레드이며 단독으로 실행될 때 CPU의 모든 코어를 100% 소비합니다. 다른 리소스(I/O, 메모리, 대역폭 등)는 이 사용량에 영향을 미칠 수 없습니다.

컴퓨팅 성능이 필요할 때 프로세스를 수동으로 중지/시작하고 싶지 않습니다(두 프로세스 모두 항상 실행되어야 함). 프로세스 2에 대한 CPU는 100% 자동으로 제공되어야 합니다.

목표를 달성하려면 어떻게 해야 합니까? 감사해요.

답변1

@ubfan1 덕분에 다양한 일정 계획 전략을 모색했으며 지금까지 달성한 ​​최고의 결과는 다음과 같습니다.

  • 프로세스 1이 SCHED_BATCH 정책으로 실행 중입니다.

  • 프로세스 2가 SCHED_RR 정책으로 실행 중입니다.

결과: 두 프로세스가 동시에 실행되는 경우: - 프로세스 1에는 ca가 제공됩니다. CPU의 5% - 프로세스 2에는 ca. CPU의 95%

프로세스 1만 계산을 수행하는 경우(프로세스 2는 내 입력이 계산을 시작하기를 기다리고 있음) - 프로세스 1은 CPU를 100% 사용하고 있습니다.

누군가 더 관심이 있다면 다음을 읽어보세요.

  1. http://manpages.ubuntu.com/manpages/xenial/man8/schedtool.8.html
  2. http://man7.org/linux/man-pages/man7/sched.7.html

관련 정보