내 애플리케이션이 상단에 라이브 애플리케이션으로 나열되지 않는 이유는 무엇입니까?

내 애플리케이션이 상단에 라이브 애플리케이션으로 나열되지 않는 이유는 무엇입니까?

저는 작은 애플리케이션을 사용하여 Linux에서 스케줄링 전략을 배우려고 합니다 C++. 이는 에서도 똑같이 잘 작동합니다 C. 다음 코드를 사용하여 애플리케이션의 우선순위를 변경하고 있습니다.

sched_param tParam;
sched_getparam(0, &tParam);                                             
tParam.sched_priority   = 20;
sched_setscheduler(0, SCHED_RR, &tParam);

rt내 앱이 실행되는 동안 실시간으로 표시되기를 원 top하지만 그렇지 않습니다. 이것이 내가 얻는 것입니다:

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
2652 root      -21   0  145452  63460  11444 R  1.3  1.6   0:02.08 myRealTimeApp

음수 값 PR. 하지만 실행하면 다음과 같은 chrt -p 2652결과를 얻습니다.

pid 2652's current scheduling policy: SCHED_RR
pid 2652's current scheduling priority: 20

이것은 의미가 있습니다.

toprt우선순위를 로 높이지 않으면 99내 신청서가 나열되지 않습니다 .

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
2770 root      rt   0  145452  63460  11444 S  1.0  1.6   0:01.93 myRealTimeApp

내 질문은 다음과 같습니다

  • 우선순위가 로 설정되어 있지 않으면 top내 애플리케이션이 라이브 애플리케이션으로 간주되지 않는 이유는 무엇입니까 99?

  • top우선순위가 음수가 아닌데 왜 음수로 표시됩니까 ?

  • 우선순위를 정하면 어떤 위험이 따르나요 99?

답변1

프로세스가 리소스를 거의 차지하지 않는다면 걱정할 필요가 없습니다. 실시간으로 실행할 수 있지만 큰 차이는 없습니다. 관련 프로세스가 CPU에 과부하를 주어 필수 작업이 작업을 완료하지 못하게 할 때 위험과 문제가 발생합니다.

일반적으로 (우선순위 0) 이상의 작업을 수행할 필요는 없습니다. renice -20이는 사용자가 직접 재정의하는 프로세스를 제외하고 중요하지 않은 프로세스보다 우선 적용되기 때문입니다.

RT에서 우선순위를 정의하여 설정 하면 -21창 관리자, 로그인 프로세스, 심지어 네트워크 관리까지 포함하되 이에 국한되지 않는 중요한 프로세스가 실제로 재정의됩니다. 다행스럽게도 결함으로 인해 프로세스가 CPU 리소스를 모두 소모하더라도 시스템은 중요한 작업을 계속 처리합니다(효율성은 떨어지더라도).

프로세스가 진정한 실시간으로 간주될 만큼 중요하고 모든 CPU 리소스가 필요하다고 결정하면 다른 모든 비실시간 프로세스가 중지됩니다. 시스템이 이미 실행 중인 것 외에는 아무것도 실행되지 않으며 많은 작업이 실패하거나 신뢰할 수 없게 되기 때문에 이는 재난에 대한 확실한 방법입니다(주로 디스크 및 네트워크 액세스). 스왑 제어도 영향을 받아 시스템의 사용 가능한 메모리 관리 기능에 부작용이 발생할 수 있습니다.

위의 문제를 방지하려면 프로세스가 제대로 작동할 수 있도록 프로세스에 낮은 우선순위를 부여하는 것이 더 합리적인 경우가 많습니다.

일부 시스템은 실시간으로 실행되도록 설계되었지만 이는 바람직하지 않은 결과를 방지하기 위해 모든 우선 순위와 운영 프로세스를 대대적으로 재설계해야 함을 의미합니다.

관련 정보