<kernel v4.0>
sched_clock_postinit()
kernel/time/sched_clock.c
void __init sched_clock_postinit(void) { /* * If no sched_clock function has been provided at that point, * make it the final one one. */ if (read_sched_clock == jiffy_sched_clock_read) sched_clock_register(jiffy_sched_clock_read, BITS_PER_LONG, HZ); update_sched_clock(); /* * Start the timer to keep sched_clock() properly updated and * sets the initial epoch. */ hrtimer_init(&sched_clock_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); sched_clock_timer.function = sched_clock_poll; hrtimer_start(&sched_clock_timer, cd.wrap_kt, HRTIMER_MODE_REL); }
sched_clock 용 클럭소스로 최종 업데이트 하고 약 1시간 단위로 epoch 값을 갱신하게 한다.
- 코드 라인 7~8에서 최종 클럭소스가 지정되지 않은 경우 jiffies 를 사용하여 sched_clock으로 사용한다.
- 코드 라인 10에서 sched_clock용 클럭소스를 사용하여 갱신한다.
- 코드 라인 16에서 hrtimer를 사용하여 약 1시간 단위로 epoch 값을 갱신하게 한다.
참고
- Timer -1- (Lowres Timer) | 문c
- Timer -2- (HRTimer) | 문c
- Timer -3- (Clock Sources Subsystem) | 문c
- Timer -4- (Clock Sources Watchdog) | 문c
- Timer -5- (Clock Events Subsystem) | 문c
- Timer -6- (Sched Clock & Delay Timers) | 문c
- Timer -7- (Timecounter) | 문c
- Timer -8- (Tick Device) | 문c
- Timer -9- (Timekeeping) | 문c
- Timer -10- (Posix Clock & Timers) | 문c
- time_init() | 문c
- sched_clock_postinit() | 문c – 현재 글
- tick_init() | 문c
- timekeeping_init() | 문c
- calibrate_delay() | 문c