우선순위가 낮은 백그라운드 작업으로 인해 게임의 FPS가 거의 영향을 받지 않게 하려면 어떻게 해야 합니까?

우선순위가 낮은 백그라운드 작업으로 인해 게임의 FPS가 거의 영향을 받지 않게 하려면 어떻게 해야 합니까?

저는 백그라운드에서 장기 실행 컴파일 작업을 자주 수행하는 데스크탑 시스템을 실행하고 있습니다. FPS를 크게 낮추지 않고 런타임에 CPU 기반 게임을 플레이하고 싶습니다(게임은 8개 코어 중 <4개만 사용함).

stress -c $(nproc)두 가지 프로세스로 간단한 테스트 시나리오를 설정했습니다 .

Nice는 더 이상 최신 Linux 배포판에서 작동하지 않으므로(특히 실제 사용 사례에서) 작업 우선 순위를 지정하는 가장 좋은 방법은 SCHED_IDLE 예약 정책을 사용하는 것입니다.

그래서 하나는 SCHED_IDLE(구별을 위해 중요하지 않은 1)로 설정하고 다른 하나는 SCHED_OTHER를 사용하여 주기적으로 실행하도록 설정했습니다.
예상한 대로 0.1 us, 0.1 sy, 99.8 ni, 0.0 id백그라운드 작업이 실행 중일 때와 99.5 us, 0.2 sy, 0.3 ni, 0.0 id둘 다 실행 중일 때 CPU 사용량이 시뮬레이션됩니다.

그러나 이 차이는 게임에 잘 적용되지 않습니다. 백그라운드 프로세스 없이 게임을 정상적으로 실행하면 83FPS가 되고, SCHED_OTHER 백그라운드 작업으로 게임을 실행하면 매우 가변적인 35FPS가 되며, SCHED_IDLE에서는 상당히 안정적인 60FPS가 생성됩니다. .

필요할 때 사용 가능한 CPU 리소스를 거의 100% 사용할 수 있음에도 불구하고 게임 성능이 이렇게 떨어지는 이유는 무엇입니까?
이전 유휴 코어의 활동으로 인한 낮은 부스트 ​​빈도 및 L3 캐시 정체로 인해 예상되는 10% 미만의 성능 저하에 가까워지려면 어떻게 해야 합니까?

(물론 일반적으로 컴파일 성능 저하가 없습니다. 다른 작업을 하지 않을 때 가능한 한 빨리 작업을 수행하고 싶습니다. make -j1기술적으로는 그렇게 할 수 있다는 것을 알고 있습니다.)

관련 정보