hrtimer
2015-10-29 17:24:13 0 举报
hrtimer
作者其他创作
大纲/内容
kernel_init_freeable
twd_timer_setup
smp_ops.smp_prepare_cpus(max_cpus);
rest_init
因为tick_device被高精度定时器接管,它将不会再提供原有的tick事件机制,所以需要由高精度定时器系统模拟一个tick事件设备,继续为系统提供tick事件能力,这个工作由tick_setup_sched_timer函数完成。因为刚刚完成切换,tick_device的到期时间并没有被正确地设置为下一个到期定时器的时间,这里使用retrigger_next_event函数,传入参数NULL,使得tick_device立刻产生到期中断,hrtimer_interrupt被调用一次,然后下一个到期的定时器的时间会编程到tick_device中,从而完成了到高精度模式的切换:
run_timer_softirq
platform_smp_prepare_cpus
1、每个cpu有一个hrtimer_cpu_base结构;2、hrtimer_cpu_base结构管理着3种不同的时间基准系统的hrtimer,分别是:实时时间,启动时间和单调时间;3、每种时间基准系统通过它的active字段(timerqueue_head结构指针),指向它们各自的红黑树;4、红黑树上,按到期时间进行排序,最先到期的hrtimer位于最左下的节点,并被记录在active.next字段中;5、3中时间基准的最先到期时间可能不同,所以,它们之中最先到期的时间被记录在hrtimer_cpu_base的expires_next字段中。
init_timers
tick_sched_handle
tick_periodic
secondary_start_kernel
Non Boot CPUclock_event_device注册过程
percpu_timer_setup
每个CPU有一个clock_event_device,并由percpu tick_device管理,然后如果tick_device-evtdev有设备时就会尝试切入高精度模式,同时设置event_handler为hrtimer_interrupt,该函数处理hrtimer队列,hrtimer由percpu hrtimer_cpu_base管理,其实percpu tick_sched只是一个hrtimer,用户定时产生tick,然后驱动本cpu上的软中断,处理定时器队列(timer_list),统计当前运行进程时间,触发rcu,以及驱动任务调度balance,
tick_setup_sched_timer
tick_setup_sched_timer//Emulate tick processing via per-CPU hrtimers
tick_handle_periodic
update_process_times
tick_init_highres
smp_prepare_cpus
hrtimer_switch_to_hres
timer_tick
clockevents_config_and_register
tick_init_highres将event_handler改为hrtimer_interrupthrtimer_switch_to_hres
tick_sched_timer
tick_broadcast_setup_oneshot
tick_switch_to_oneshot
0 条评论
下一页