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

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

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

지금은 백그라운드에서 커널을 구축하고 있습니다( make프로세스의 우선순위는 0이지만). 시간이 꽤 걸리기 때문에 뭔가를 살펴보기로 결정했습니다. 그래서 VLC(Core2 2.6GHz CPU 시간의 약 30%)에서 상당히 까다로운 H264 비디오를 열었는데, 오디오는 괜찮은 것 같지만 찢어짐, 프레임 드롭, 시각적 아티팩트(이전 비디오로 인해 발생한 것으로 추정됩니다)만 볼 수 있었습니다. .

그래서 VLC 사용 우선순위를 바꾸기로 했고 renice, 특히 PulseAudio를 보고 -11동등한 위치에 놓기로 하여 그렇게 했습니다 sudo renice -11 -p VLC_PROC_#.

같은 일이 계속 일어나서 계속 -20으로 설정했지만 여전히 시각적인 인공물이 계속 보였습니다.

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

만일을 대비해 여기서는 XFCE를 데스크톱 환경으로 사용하여 64비트 Arch를 실행하고 있습니다.

편집하다:소스 코드가 /tmp있고 모든 것이 이미 RAM에 있는 동안 커널 컴파일이 수행되었습니다 . tmpfsRAM 사용량이 60%에도 이르지 않고 페이징도 발생하지 않습니다.

위에서 설명한 시나리오는 단지 하나일 뿐입니다.테스트 케이스, 나는 Linux가 왜 이런 방식으로 작동하는지, 그리고 진정한 우선순위를 얻을 수 있는 방법이 있는지에 더 관심이 있습니다.

답변1

renice이는 프로세스의 우선순위에 영향을 미칩니다. 그러나 경험한 것처럼 프로세스의 우선순위가 높다고 해서 필요한 모든 리소스를 갖게 되는 것은 아닙니다. 우선순위가 높을수록 프로세스가 리소스를 획득할 가능성이 높아집니다.

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

이 작업을 자주 수행하면 비디오와 편집 내용이 다른 디스크에 있으면 더 나은 결과를 얻을 수 있습니다. 또한 비디오를 디스크 캐시에 미리 로드하거나 cat /path/to/video.file >/dev/null오프셋 456MB에서 시작하여 123MB를 읽는 경우 tail -c +456m | head -c 123m /path/to/video.file >/dev/null더 나은 결과를 얻을 수 있습니다 . 그러나 RAM이 많지 않으면 컴파일 시 캐시 공간이 회수될 수 있습니다. 메모리에 비디오가 있는지 확인하려면 가상 디스크를 만들고 여기에 비디오를 복사하세요.

답변2

조정하려고 할 때 프로세스 우선순위가 작용하는 유일한 요소는 아닙니다.사용자 경험. 커널 컴파일은 I/O 부담이 큰 일입니다. 작은 파일에서 많은 읽기/쓰기가 이루어지기 때문에 파일 시스템이 크게 늘어날 수 있습니다(가끔 이런 일이 발생하는 이유가 있습니다).단독으로 기준선으로 사용됨), 특히 다중 프로세서 시스템에서 그렇습니다. RAM이 충분하다면 tmpfs에서 커널을 적어도 부분적으로 컴파일해 보시기 바랍니다. 거기에 소스 트리를 넣거나(효과적으로 캐시에 미리 가져옴) get there를 사용하여 출력을 보내십시오.

make O=/dev/shm ...

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

이 외에도 VLC에 -cache데이터가 내부적으로 캐시되도록 요청하는 데 사용할 수 있는 캐싱 기능이 있는지 확인할 수도 있습니다(예를 들어 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/throttle-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 소란 없이 동일한 작업을 수행할 수 있습니다.

관련 정보