sched_clock_init()

 

sched_clock_init()

kernel/time/sched_clock.c

void sched_clock_init(void)
{
        u64 ktime_now = ktime_to_ns(ktime_get());
        int cpu;

        for_each_possible_cpu(cpu) {
                struct sched_clock_data *scd = cpu_sdc(cpu);

                scd->tick_raw = 0;
                scd->tick_gtod = ktime_now;
                scd->clock = ktime_now;
        }

        sched_clock_running = 1;

        /*
         * Ensure that it is impossible to not do a static_key update.
         *
         * Either {set,clear}_sched_clock_stable() must see sched_clock_running
         * and do the update, or we must see their __sched_clock_stable_early
         * and do the update, or both.
         */
        smp_mb(); /* matches {set,clear}_sched_clock_stable() */

        if (__sched_clock_stable_early)
                __set_sched_clock_stable();
        else
                __clear_sched_clock_stable(NULL);
}

sched_clock을 초기화한다.

  • 코드 라인 6~12에서 모든 possible cpu를 대상으로 sched_clock_data를 현재 시각으로 초기화한다.
  • 코드 라인 14에서 sched_clock이 구동되었음을 알린다. 이 때부터 클럭 소스의 stable 상태 체크를 할 수 있게 한다.
  • 코드 라인 25~28에서 sched_clock이 안정화 여부를 기록한다.
    • 현재 x86 아키텍처에 구현되어 사용된다.

 

참고

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.