rt bandwidth
def_rt_bandwidth VS root_task_group.rt_bandwidth
def_rt_bandwidth
시스템에 기본적으로 존재하는 기본 rt_bandwidth이다. 특정 태스크나 태스크그룹을 위해 존재하는건 아니고 시스템 전역적인 설정을 갖고 있다. CONFIG_RT_GROUP_SCHED가 비활성화되어 있을 경우엔 유일하게 존재하는 rt_bandwidth 자료구조가 된다.
sched_init()에서 처음으로 초기화되고 사용됨.
void __init sched_init(void)
{
...
init_rt_bandwidth(&def_rt_bandwidth,
global_rt_period(), global_rt_runtime());
...
for_each_possible_cpu(i){
...
rq->rt.rt_runtime = def_rt_bandwidth.rt_runtime;
...
}
}
언제 사용될까??
- CONFIG_RT_GROUP_SCHED를 사용할 때
- 태스크 그룹이 생성될 때 그룹의 rt_bandwidth의 period가 def_rt_bandwidth.rt_period로 초기화됨
- !CONFIG_RT_GROUP_SCHED를 사용할 때
- rt_rq의 period를 리턴하는 함수 sched_rt_period()는 config에 따라 구현이 달라짐. 이 경우는 def_rt_bandwidth.rt_period를 리턴함
- RT태스크그룹이 enqueue될 때마다 def_rt_bandwidth의 동작을 시작시킴. timer를 시작시킴. 이 타이머는
- all possible cpu의 rt rq의 rt_runtime을 갱신할때 def_rt_bandwidth의 rt_runtime_lock을 사용함.
- 특정 rt_rq의 rt_bandwidth를 리턴하는 함수 sched_rt_bandwidth()가 def_rt_bandwidth를 리턴함.
언제 설정될까??
- kernel knob인 sched_rt_period_us, sched_rt_runtime_us에 값을 쓰면 쓰여진 값으로 def_rt_bandwidth에 갱신됨.