多核时钟中断和定时器关系问题
本帖最后由 wzw200 于 2015-02-03 09:36 编辑/*触发按每CPU变量跟到最后就是 每CPU 一个 softirq_pending了 ,timer_tick这个地方是怎么按每CPU变量的?,没看明白*/
timer_tick->update_process_times->run_local_timers->raise_softirq(TIMER_SOFTIRQ);
#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
#define or_softirq_pending(x)(local_softirq_pending() |= (x))
#define local_softirq_pending() __IRQ_STAT(smp_processor_id(), __softirq_pending)
//--------------------------------------------------
/*执行按每CPU变量*/
static void run_timer_softirq(struct softirq_action *h)
{
struct tvec_base *base = __get_cpu_var(tvec_bases);
perf_event_do_pending();
hrtimer_run_pending();
if (time_after_eq(jiffies, base->timer_jiffies))
__run_timers(base);
}
触发按每CPU变量 ,执行按每CPU变量
那时钟中断,在多核上是怎么做的的,轮着中断每个CPU吗,
谢谢! 每个cpu都有一个时钟中断源 每个cpu都有一个时钟中断源 回复 3# super皮波
他们都会更新那个 jiffs变量吗,我在跟跟代码,谢谢了
回复 4# wzw200
只有一个会更新全局的jiffies
回复 4# wzw200
你搜索一下这个变量tick_do_timer_cpu,我记得是用于记录哪个cpu更新jiffies的
好的,谢谢高人指点
页:
[1]