wzw200 发表于 2015-02-03 09:29

多核时钟中断和定时器关系问题

本帖最后由 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吗,

谢谢!

super皮波 发表于 2015-02-03 11:48

每个cpu都有一个时钟中断源

super皮波 发表于 2015-02-03 11:48

每个cpu都有一个时钟中断源

wzw200 发表于 2015-02-03 12:03

回复 3# super皮波

他们都会更新那个 jiffs变量吗,我在跟跟代码,谢谢了
   

super皮波 发表于 2015-02-03 13:02

回复 4# wzw200
只有一个会更新全局的jiffies

   

super皮波 发表于 2015-02-03 13:06

回复 4# wzw200

你搜索一下这个变量tick_do_timer_cpu,我记得是用于记录哪个cpu更新jiffies的
   

wzw200 发表于 2015-02-03 13:20

好的,谢谢高人指点
页: [1]
查看完整版本: 多核时钟中断和定时器关系问题