Chinaunix首页 | 论坛 | 博客
  • 博客访问: 425090
  • 博文数量: 49
  • 博客积分: 1346
  • 博客等级: 中尉
  • 技术积分: 936
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-21 01:49
文章分类

全部博文(49)

文章存档

2013年(7)

2012年(12)

2011年(30)

我的朋友
rcu

分类: LINUX

2011-07-14 12:24:06

1)rcu在设计上,rcu函数被安全执行的三个条件(满足其中任意一个就称此CPU处于quiescent state)

The CPU performs a process switch.

The CPU starts executing in User Mode.

The CPU executes the idle loop.

 

2)实现如下:

时钟中断中:

void rcu_check_callbacks(int cpu, int user)

{

      if (user /* 第二个条件 */  ||

          (idle_cpu(cpu) && !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) 

/* 第三个条件 */

      { 

        rcu_qsctr_inc(cpu); /* 设置本CPUrdp->passed_quiesc */

rcu_bh_qsctr_inc(cpu);

       } else if (!in_softirq())

              rcu_bh_qsctr_inc(cpu);

       tasklet_schedule(&per_cpu(rcu_tasklet, cpu));

}

schedule()中:

         rcu_qsctr_inc(cpu); /* 第三个条件 */

 

当所有onlinecpu都经过了这样一个quiescent state后,call_rcu()加入的函数才会被执行。

 

3) 这样就存在一些可能,使得内核长时间不能进入quiescent state状态:当某个cpu忙于在内核态或软中断之中奔命的时候,就可能长时间不能进入quiescent state

解决办法:软中断线程化

阅读(1435) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:.screenrc

给主人留下些什么吧!~~