ionice 매뉴얼에는 다음과 같이 명시되어 있습니다.
커널 2.6.26 이전에는 io 우선 순위를 요청하지 않은 프로세스가 공식적으로 "none"을 예약 클래스로 사용했지만 io 스케줄러는 이러한 프로세스를 최선의 노력 클래스로 처리했습니다. 최선의 노력 카테고리의 우선순위는 프로세스의 CPU 좋은 수준(io_priority = (cpu_nice + 20) / 5)에서 동적으로 파생됩니다.
CFQ io 스케줄러가 있는 2.6.26 이후 커널의 경우 io 우선 순위를 요청하지 않는 프로세스는 CPU 스케줄링 클래스를 상속합니다. io 우선 순위는 프로세스의 CPU 수준에서 파생됩니다(커널 2.6.26 이전과 동일).
2.6.26을 출시했지만 여전히 몇 가지 미해결 질문이 남아 있습니다(CFQ라고 가정합니다).
예약된 수업에 대한 상속 매핑은 무엇입니까? TS SCHED_OTHER = 최선의 노력(io 클래스 2)?
값을 얻기 위해 ionice -p 명령을 사용할 때 반환됩니다
none: prio 0
. 그러나 ionice man에서 언급된 공식은 동일한 프로세스(CPU 성능이 0인 경우)가best-effort: prio 4
(0 + 20) / 5 = 4이기 때문임을 보여줍니다.
그래서 지금 내 가정은 none: prio 0
= best-effort: prio 4
이지만 누군가가 이것이 절대적으로 정확하다는 것을 증명하기 위해 일부 커널 소스 코드를 인용할 수 있기를 바랍니다.
답변1
1) 문서에서계획설계-CFS.txt:
CFS는 "Completely Fair Scheduler"의 약자이며 Ingo Molnar가 구현하고 Linux 2.6.23에 병합된 새로운 "데스크탑" 프로세스 스케줄러입니다. 이는 일반 스케줄러의 이전 SCHED_OTHER 상호작용 코드를 대체합니다.
O(1) 스케줄러와 CFQ io 스케줄러를 혼동하고 있는 것 같습니다.
그래서 SCHED_{NORMAL, BATCH, IDLE} 전략이 있습니다. IDLE에는 우선순위가 없습니다. 무료로 열심히 공부하는 실시간 수업을 예약하세요.
2) 아쉽게도 입력한 명령어가 보이지 않습니다. 예를 들어 init의 io-scheduling을 최선의 노력 클래스로 변경합니다.
# ionice -p 1
없음: prio 0
# ionice -c2 20 -p 1
# ionice -p 1
최선의 노력: prio 4