RCU's CPU Stall Detector

				版权声明:本文为博主原创文章,未经博主允许不得转载。					https://blog.csdn.net/tiantao2012/article/details/56840605				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">

有时候可以会打印INFO: rcu_bh_state detected stalls on CPUs/tasks: { } (detected by 4, 2502 jiffies) 类似的log。这不是bug,而是提醒你可能某些code执行太久了,超过CONFIG_RCU_CPU_STALL_TIMEOUT 定义的时间了。具体的call flow如下:在每个时间中断函数中都会走这个flow,也就说这个flow是每次time中断都会检查的

在update_process_times->rcu_check_callbacks->rcu_pending->__rcu_pending->check_cpu_stall->print_other_cpu_stall/print_cpu_stall

详细的情况可以查询Documentation/RCU/stallwarn.txt

从下面的code中可以看出,如果没有定义CONFIG_RCU_CPU_STALL_TIMEOUT的话till_stall_check=3.

static int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT;

module_param(rcu_cpu_stall_timeout, int, 0644);


int rcu_jiffies_till_stall_check(void)

{

    int till_stall_check = READ_ONCE(rcu_cpu_stall_timeout);


    /*

     * Limit check must be consistent with the Kconfig limits

     * for CONFIG_RCU_CPU_STALL_TIMEOUT.

     */

    if (till_stall_check < 3) {

        WRITE_ONCE(rcu_cpu_stall_timeout, 3);

        till_stall_check = 3;

    } else if (till_stall_check > 300) {

        WRITE_ONCE(rcu_cpu_stall_timeout, 300);

        till_stall_check = 300;

    }

    return till_stall_check * HZ + RCU_STALL_DELAY_DELTA;

}


				版权声明:本文为博主原创文章,未经博主允许不得转载。					https://blog.csdn.net/tiantao2012/article/details/56840605				</div>
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">

猜你喜欢

转载自blog.csdn.net/Qinus/article/details/87893051
RCU