Hi all:<br><br>I add a tick_test to struct rq in kernel/sched.c, like<br><br>struct rq{<br>  unsigned long long tick_test ;<br>  ...<br>  ...<br>}<br><br>and initialize it for each rq  in sched_init in kernel/sched.c, like<br>
<br>for_each_possible_cpu(i) {  <br>  rq->tick_test = 0 ;<br>  ...<br>  ...<br>}<br><br>Inside scheduler_tick function, which is called by timer code , I increase tick_test by one print it for each rq , like <br><br>void scheduler_tick(void){<br>
...<br>...<br> raw_spin_lock(&rq->lock);<br> update_rq_clock(rq);<br> update_cpu_load(rq);<br> <b>/*edited by Hang*/<br>   rq->tick_test++ ;<br>   printk(KERN_DEBUG "THIS_CPU:%d TICK:%llu\n",cpu, rq->tick_test);</b><br>
 curr->sched_class->task_tick(rq, curr, 0);<br> raw_spin_unlock(&rq->lock);<br>...<br>...<br>}<br><br>And I set Timer Frequency 1000 Hz, the result is like:<br><br>[  361.174006] THIS_CPU:0 TICK:361175<br>[  361.174129] THIS_CPU:1 TICK:360959<br>
[  361.175004] THIS_CPU:0 TICK:361176<br>[  361.175130] THIS_CPU:1 TICK:360960<br>[  361.176006] THIS_CPU:0 TICK:361177<br>[  361.176129] THIS_CPU:1 TICK:360961<br>[  361.177005] THIS_CPU:0 TICK:361178<br>[  361.177130] THIS_CPU:1 TICK:360962<br>
[  361.178006] THIS_CPU:0 TICK:361179<br>[  361.178129] THIS_CPU:1 TICK:360963<br>[  361.179004] THIS_CPU:0 TICK:361180<br>[  361.179130] THIS_CPU:1 TICK:360964<br>[  361.180006] THIS_CPU:0 TICK:361181<br>[  361.180129] THIS_CPU:1 TICK:360965<br>
[  361.181004] THIS_CPU:0 TICK:361182<br>[  361.181130] THIS_CPU:1 TICK:360966<br>[  361.182006] THIS_CPU:0 TICK:361183<br>[  361.182129] THIS_CPU:1 TICK:360967<br>[  361.183004] THIS_CPU:0 TICK:361184<br>[  361.183130] THIS_CPU:1 TICK:360968<br>
[  361.184007] THIS_CPU:0 TICK:361185<br>[  361.184129] THIS_CPU:1 TICK:360969<br>[  361.185004] THIS_CPU:0 TICK:361186<br>[  361.185129] THIS_CPU:1 TICK:360970<br>[  361.186005] THIS_CPU:0 TICK:361187<br>[  361.186133] THIS_CPU:1 TICK:360971<br>
<br>The tick of CPU0 seems be to reasonable, but the tick of CPU1 does not. The gap of ticks between CPU0 and CPU1 is always 216. The timer represents how many seconds have elapsed since boot. It is a local timer for each CPU or global timer shared by all CPUs ? What is the reason for this gap ? In LITMUS pfair implementation, we have two ticksin pfair_state, curr_tick and local_tick. From comments, cur_tick is updated by the CPU and local_tick is the  local cpu currently executing. So, cur_tick is advanced by the same way as mine ? How does local_tick advance ?<br>
<br>Thanks.  <br><br>