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에 갱신됨.

results matching ""

    No results matching ""