저는 비디오 인코딩 벤치마크 애플리케이션을 개발 중입니다. 나에게 이상한 점은 이 명령을 사용할 때 sudo chrt -r 99 VideoEncoding cfg
항상 VideoEncoding cfg
. 사람들은 프로세스의 실시간 속성을 변경하는 것이 더 빠를 것이라고 생각했지만 실제로는 더 느린 것으로 나타났습니다.
누군가 이것을 설명할 수 있나요?
추신: 저는 Ubuntu 20.04 LTS에서 벤치마크를 실행하고 있습니다.
답변1
프로세스의 실시간 속성을 변경하는 것이 더 빠르다고 가정
이것은 완전히 잘못된 것입니다.
실시간 정책에 따라 모든 일정을 예약하면 정확하고 결정적인 대기 시간, 작업 간 동기화를 달성하는 데 도움이 될 수 있습니다. 하지만 공짜 점심은 없기 때문에처리량을 희생하여.
CPU 집약적인 작업(비디오 인코딩 작업이란 무엇입니까?)의 특정 경우에 원하는 것은 다음과 같습니다.처리량!
따라서... SCHED_RR을 사용하여 이러한 작업을 예약하면 시스템의 모든 것(벤치마크 애플리케이션 포함)의 성능만 저하됩니다.
그리고 CPU 집약적인 작업이 다중 스레드일수록(최신 CPU 집약적 작업일 가능성이 높음) 성능 저하가 더 많이 발생합니다.
재최적화는 더 나은 성능을 달성하기에 충분해야 하며, 극단적인 경우 가능한 최고의 성능이 필요한 경우 일부 유휴 CPU에서 작업을 예약합니다.
그런데, 가능한 가장 높은 우선순위로 RT를 예약하지 마십시오. 문제가 발생하면 하드웨어 재설정 외에는 아무것도 할 수 없습니다.
BTW 2는 말할 것도 없고, 동일한 시스템에서 실행되는 벤치마킹 애플리케이션으로 RT 시스템을 벤치마킹하는 것은 말도 안됩니다.
답변2
프로세스의 실시간 속성을 변경하는 것이 더 빠르다고 가정하면,
아니요, 그건 사실이 아닙니다!
프로세스를 "실시간 예약"으로 설정하면 속도가 빨라지는 것이 아니라 프로세스 예약 간의 최대 시간이 보장될 뿐입니다. 이로 인해 더 많은 컨텍스트 전환이 발생하여 시스템 속도가 효과적으로 느려질 수 있습니다.