"nice"가 유효한지 어떻게 확인하나요?

"nice"가 유효한지 어떻게 확인하나요?

리소스를 공유하는 시스템에서 실행되는 다양한 작업을 보면 좋은 값이 무시되는 것처럼 보입니다. Nice를 19로 설정한 많은 작업은 100% CPU 로드에서 실행되는 반면 Nice를 0으로 설정한 다른 많은 작업은 10%만큼 낮은 CPU 로드에서 실행됩니다.
이러한 모든 프로세스는 매우 까다로우며 유휴 시스템에서 실행되면 할당된 모든 CPU가 최대화됩니다(예:남부 독일).

나는 읽었다여기저것

"...[좋은] 값은 조정 가능하지만 Linux 구현의 커널 스케줄러에서는 무시될 수 있습니다."

이게 진짜야? 커널이 nice 값을 무시하는 것이 가능합니까? 이런 일이 일어나고 있는 것 같은데, 어떻게 확실히 알 수 있나요? 나는 이것이 확실하지 않은 상태에서 시스템 관리자에게 문제가 되는 것을 원하지 않습니다. 관련 스레드 토론을 읽었습니다.일은 어때요?그리고niceLinux에는 별로 도움이 되지 않습니다.그러나 CPU 부하가 사용되지 않는 상황에 대해서는 논의하지 않습니다.

작업이 리소스를 획득하면 우선 순위가 더 높은 작업에 다시 할당하기 전에 일정 기간 동안 해당 리소스를 보유할 수 있습니까? 우선 순위가 낮은 작업은 며칠 동안 실행된 반면, 우선 순위가 높은 작업은 실행하는 데 10분도 채 걸리지 않는 짧지만 까다로운 계산을 반복적으로 실행했습니다. 짧은 작업 사이에 시스템이 우선 순위가 낮은 작업에 리소스를 할당하고 우선 순위가 낮은 작업이 해당 리소스를 예약하는 것이 가능합니까?

나는 내가 경험하고 있는 시스템이스택 IQCentOS 6.5 패키지 설치(일부 세부 사항에서는 쉽게 오해할 수 있음).

답변1

Nice 값은 프로세스에서 생성된 실제 CPU 로드에 대해 아무 것도 알려주지 않습니다.

좋은 점은 여러분이 생각하는 것과 정확히 같습니다. 즉, 특정 작업 부하에서 프로세스가 작동하는 방식입니다.

더 정확하게:

  • nice 값이 높은(== 낮은 스케줄링 확률) 프로세스가 예약된 경우 nice 값이 낮거나 우선순위가 높은 프로세스가 CPU를 요청할 때까지 CPU를 예약하고 잠재적으로 100% 로드를 생성합니다.

  • 낮은 nice 값(==더 높은 스케줄링 확률)을 가진 프로세스가 CPU를 포기하면 피크 타임에 CPU를 사용하지 않을 수 있습니다.

이것이 바로 높은 수준의 프로세스보다 적은 CPU를 사용하는 낮은 수준의 프로세스를 보는 이유입니다. 더 나은 프로세스는 더 쉽게 포기하지만 현재로서는 분명히 해야 할 일이 더 많을 것입니다...

답변2

시스템의 많은 프로세스는 무언가가 일어나기를 기다리고 있습니다. 이는 대부분의 서버 프로세서 또는 데몬(예: ssh, 메일, X)이 수행하는 작업입니다.

워드 프로세싱 프로그램을 사용하고 있다면, 그저 사용자가 아무 곳이나 클릭하거나 무언가를 입력하기를 기다리고 있을 뿐입니다. 대부분의 경우 프로세스는 예약되지 않으며 CPU 시간을 거의 사용하지 않습니다. 눈에 띄는 효과 없이 이 프로세스의 nice 값을 0으로 설정할 수 있습니다.

그러나 프로그램을 사용하여 3D 고해상도 이미지를 렌더링하거나 애니메이션 또는 비디오를 처리하는 경우 Nice 값이 영향을 미칩니다.

공유 리소스를 사용하는 프로세스는 공유 리소스라는 또 다른 문제에 직면합니다. 다른 프로세스가 리소스를 사용하는 경우 일반적으로 해당 리소스를 기다려야 합니다.

하드 드라이브가 그 예입니다. 프로세스가 하드 디스크 작업(예: 파일 읽기 또는 쓰기)을 시작하면 작업이 완료될 때까지 시스템에 의해 일시 중지됩니다. 의견이 전혀 없어도 도움이 되지 않습니다. 프로세스가 일시 중단되면 CPU 시간을 사용하지 않습니다.

효과는 nice매우 미묘할 수 있습니다 ;-)

답변3

Linux의 스케줄러에 관한 한 10분은 매우 긴 시간입니다. 시간 분할은 약 10밀리초입니다.

CPU 사용량 백분율을 볼 때 이는 top다중 스레드 프로세스의 각 스레드 사용량을 합산한다는 점을 명심하십시오. 따라서 10개 스레드 프로세스는 각 스레드가 10% 활성 시간을 얻는 경우 CPU를 100% 사용하는 것으로 나타납니다.

Linux의 스케줄러는 작업을 중단시키지 않으므로 nice 19(프로세스의 일정을 영원히 취소할 수 있는 경우 교착 상태 오류를 피하기 어렵기 때문에) nice 19작업이 일부 CPU 시간을 얻는 것을 방지하지도 않습니다. 스레드가 많으면 여전히 많은 CPU 리소스를 사용할 수 있습니다.

I/O, 특히 가상 메모리 페이징에서 일부 프로세스가 차단되면 해당 프로세스의 CPU 사용량이 크게 떨어집니다. dstatCPU 사용량, 디스크, 네트워크, 페이징, 컨텍스트 전환 등에 대한 분석 보기와 같은 작업을 실행합니다 . 비슷비슷한데 vmstat색이 더 예뻐요.

NI상단 열을 살펴보고 프로세스가 실제로 상상한 대로 작동하는지 확인하세요. (동일한 프로세스의 서로 다른 스레드가 서로 다른 좋은 수준을 가질 가능성은 없지만 가능하다고 생각합니다.)

this 을 사용해 왔다면 renice재귀적이지 않다는 점을 기억하세요. 상위 프로세스를 조정하면 기존 하위 프로세스에는 영향을 주지 않으며 향후 하위 프로세스에만 영향을 미칩니다.

관련 정보