실제로 프로세스의 우선순위를 정하거나 Linux가 프로세스의 우선순위를 존중하도록 하는 방법이 있습니까?

실제로 프로세스의 우선순위를 정하거나 Linux가 프로세스의 우선순위를 존중하도록 하는 방법이 있습니까?

다른 운영 체제와 마찬가지로 -20(가장 우선 순위)에서 19(덜 우선 순위)까지 프로세스 우선 순위가 있다는 것을 알고 있지만 Linux는 이를 무시하는 것 같습니다.

지금 나는 백그라운드에서 커널을 구축하고 있었고( make프로세스의 우선순위는 0이지만) 꽤 시간이 걸렸기 때문에 뭔가를 살펴보기로 결정했습니다. 그래서 VLC에서 매우 까다로운 H264 비디오(Core2 2.6GHz의 CPU 시간의 ~30%)를 열었는데 찢어짐, 프레임 손실, 시각적 아티팩트(이전의 결과로 인한 것임)가 있다는 것을 알게 되었습니다. 괜찮은.

renice그래서 나는 PulseAudio가 -11그것을 동등한 수준으로 두기로 결정했다는 것을 구체적으로 보고 를 사용하여 VLC의 우선 순위를 변경하기로 결정했습니다 sudo renice -11 -p VLC_PROC_#.

같은 일이 계속 발생하여 계속해서 -20으로 설정했지만 여전히 시각적 인공물이 계속 표시되었습니다.

그렇다면 Linux가 실제로 일부 0 프로세스보다 -20 프로세스의 우선 순위를 지정하고 필요한 모든 것을 제공하지 않은 이유가 궁금합니다. Linux에서 프로세스의 우선순위를 정할 수 있는 방법이 있나요?

중요한 경우를 대비해 여기서는 64비트 Arch, XFCE를 데스크톱 환경으로 실행하고 있습니다.

편집하다:소스가 /tmp있고 모두 이미 RAM에 있는 커널 컴파일이 수행되었습니다 . tmpfsRAM 사용량은 60%에도 미치지 못했고 페이징 작업도 실행되지 않았습니다.

위에 자세히 설명된 시나리오는테스트 케이스, 나는 Linux가 왜 그렇게 수행했는지, 그리고 실제 우선순위를 얻을 수 있는 방법이 있는지에 더 관심이 있습니다.

답변1

renice프로세스의 우선순위에 영향을 미칩니다. 그러나 경험한 것처럼 프로세스의 우선순위가 더 높다고 해서 프로세스에 필요한 모든 리소스가 있다는 의미는 아닙니다. 우선순위가 높을수록 프로세스가 리소스를 확보할 수 있는 기회가 더 커집니다.

reniceCPU 시간에만 영향을 미칩니다. 따라서 두 개 이상의 프로세스가 CPU 시간을 놓고 경쟁하는 경우에만 효과가 있습니다. 제한 요소가 CPU 시간이 아니라 I/O 대역폭인 경우 nice 값은 아무런 영향을 미치지 않습니다. 귀하의 경우에는 컴파일이 많은 디스크 대역폭을 사용하고 있고 vlc가 디스크에서 데이터를 충분히 빠르게 읽을 수 없는 경우가 있습니다. 노력하다ionice대신 또는 추가로 nice.

이 작업을 자주 수행하는 경우 비디오와 편집물이 별도의 디스크에 있으면 더 나은 결과를 얻을 수 있습니다. 또한 비디오를 디스크 캐시에 미리 로드하거나( cat /path/to/video.file >/dev/null또는 tail -c +456m | head -c 123m /path/to/video.file >/dev/null오프셋 456MB에서 시작하여 123MB를 읽는 경우) 더 나은 결과를 얻을 수 있습니다. 그러나 RAM이 많지 않으면 편집 시 캐시 공간을 다시 차지할 가능성이 높습니다. 비디오를 메모리에 저장하려면 램디스크를 만들고 여기에 비디오를 복사하세요.

답변2

프로세스 우선순위는 조정하려고 할 때 작용하는 유일한 것이 아닙니다.사용자 경험. 커널을 컴파일하는 것은 I/O가 많이 드는 작업입니다. 작은 파일에서 읽고 쓰는 일이 많아 파일 시스템이 상당히 늘어날 수 있습니다(때때로 그렇게 하는 데는 이유가 있습니다).그 자체로 벤치마크로 사용됨), 특히 다중 프로세서 시스템에서 그렇습니다. RAM이 충분하다면 tmpfs에서 커널을 컴파일해 보시기 바랍니다. 적어도 부분적으로는 소스 트리를 거기에 두거나(캐시로 미리 가져오는 역할을 효과적으로 수행함) 다음을 사용하여 거기에 출력을 보내십시오.

make O=/dev/shm ...

또는 커널 개체 파일을 보관할 수 있을 만큼 큰 인스턴스를 마운트하기로 결정한 경우 tmpfs(쉽게 기가바이트 범위에 속할 수 있음)

-cache그 외에도 VLC에 내부적으로 데이터 캐싱을 요청할 수 있는 캐싱 기능(예를 들어 MPlayer에는 옵션이 있는 것 같습니다)이 있는지 확인할 수도 있습니다 . 그러면 필요할 때 데이터를 얻을 필요가 없지만 데이터가 사용 가능해지면 얻을 수 있습니다.

또 다른 점은 표시가 X 서버를 통해 수행된다는 것입니다. 우선 순위도 높아져야 합니다(질문 아래 Wumpus Q. Wumbley의 의견 참조).

두 가지 추가 옵션은 cgroup 및/또는 RT 스케줄러를 사용하는 것입니다(첫 번째 옵션은 다음을 참조하세요).cgroup을 사용하여 애플리케이션 우선 순위 제어, 후자에 대해서는 예를 들어젠투 지침).

마지막으로 불필요한 서비스를 전환하여 시스템을 약간 최적화할 수도 있습니다. 개인적으로 나는 PulseAudio가 시작하는 것이라고 생각합니다.

그러나 당신이 설명하는 내용은 우선순위가 높은 I/O가 발생하는 것처럼 들립니다. 내 생각에는 당신이 과도한 스왑을 경험한 것 같습니다. tmpfs가 강제로 스왑 아웃되지 않았습니까? 그런 경우에는 적어도 iorenice가 별로 도움이 되지 않을 것 같습니다.

답변3

다른 사람들이 말했듯이 메모리 대역폭을 포함하여 영향을 받을 수 있는 시스템 부분이 많으며 시스템의 다른 부분에도 고유한 일정과 우선 순위가 있습니다.

을 사용하면 언제든지 chrt -i 0컴파일에 실제 유휴 우선순위를 부여할 수 있습니다. http://linux.die.net/man/1/chrt

또는 cgroup을 사용하여 컴파일을 조절하십시오. http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups.html

아니면 모든 것을 던져보세요:

eatmydata cgexec -g cpu:throttled chrt -i 0 ionice -c3 nice -n19 /path/to/compile-script >/dev/null

참고: 사용해 nice -n19도 아무런 차이가 없어야 chrt -i 0하지만, 아무 것도 해치지 않습니다.

내 고대 P4는 VLC가 당황하지 않고 동일한 작업을 수행할 수 있습니다.

관련 정보