linux的bh文件停止运行,linux 系统 rcu_bh self-detected stall 问题处理

问题说明

近期几台 linux 机器都报了以下 kernel 提示:

Apr 24 21:02:09 cztest kernel: INFO: rcu_bh self-detected stall on CPU { 0} (t=0 jiffies)

Apr 24 21:02:09 cztest kernel: Pid: 0, comm: swapper/0 Not tainted 3.4.95.R620.CentOS6.5-x86_64.OpenBeta.KVM #1

Apr 24 21:02:09 cztest kernel: Call Trace:

Apr 24 21:02:09 cztest kernel: [] __rcu_pending+0x192/0x4e0

Apr 24 21:02:09 cztest kernel: [] ? tick_nohz_handler+0xf0/0xf0

Apr 24 21:02:09 cztest kernel: [] rcu_check_callbacks+0xcb/0xe0

Apr 24 21:02:09 cztest kernel: [] update_process_times+0x43/0x80

Apr 24 21:02:09 cztest kernel: [] tick_sched_timer+0x61/0xb0

Apr 24 21:02:09 cztest kernel: [] __run_hrtimer+0x5d/0x120

Apr 24 21:02:09 cztest kernel: [] hrtimer_interrupt+0xee/0x250

Apr 24 21:02:09 cztest kernel: [] smp_apic_timer_interrupt+0x64/0xa0

Apr 24 21:02:09 cztest kernel: [] apic_timer_interrupt+0x6a/0x70

Apr 24 21:02:09 cztest kernel: [] ? sched_clock_cpu+0xb8/0x110

Apr 24 21:02:09 cztest kernel: [] ? native_safe_halt+0x6/0x10

Apr 24 21:02:09 cztest kernel: [] ? cpuidle_idle_call+0x1f/0xf0

Apr 24 21:02:09 cztest kernel: [] default_idle+0x27/0x50

Apr 24 21:02:09 cztest kernel: [] cpu_idle+0x89/0xd0

Apr 24 21:02:09 cztest kernel: [] rest_init+0x6d/0x80

Apr 24 21:02:09 cztest kernel: [] start_kernel+0x34d/0x35a

Apr 24 21:02:09 cztest kernel: [] ? kernel_init+0x1d5/0x1d5

Apr 24 21:02:09 cztest kernel: [] x86_64_start_reservations+0x131/0x136

Apr 24 21:02:09 cztest kernel: [] x86_64_start_kernel+0x101/0x110

该主机的环境如下:

System | Dell Inc.; PowerEdge R620; vNot Specified (Rack Mount Chassis)

Platform | Linux

Kernel | 3.4.95

Total Memory | 64G

处理说明

linux 提供了 RCU(read, copy and update)

机制来解决多核处理器之间的数据同步问题, 上述提示中的 rcu_bh

意为 rcu bottom halves

, 即 rcu

机制相关的下半部中断处理, rcu bh

在 2.6.9

内核中引入的主要目的是为了防 DDos

攻击, 在较新的系统中主要在软中断中运行. 系统中一些需要快速处理的中断程序通常会在上半部处理, 对时间要求比较宽松的中断程序会在下半部处理. 中断程序一般都在软硬件驱动, 内核等层面出现, 用户空间的应用程序不会做中断的处理. 按照内核文档的描述, 以下情况会出现 rcu_bh stall

相关的警告信息:

详见: kernel-source/Documentation/RCU/stallwarn.txt

So your kernel printed an RCU CPU stall warning. The next question is

"What caused it?" The following problems can result in RCU CPU stall

warnings:

o A CPU looping with interrupts disabled. This condition can

result in RCU-sched and RCU-bh stalls.

o A CPU looping with preemption disabled. This condition can

result in RCU-sched stalls and, if ksoftirqd is in use, RCU-bh

stalls.

o A CPU looping with bottom halves disabled. This condition can

result in RCU-sched and RCU-bh stalls.

一共三种情况会出现 rcu_bh

相关的提示, 分别为:

1. CPU 循环处理中禁止了中断;

2. CPU 循环处理中禁止了抢占, 并且启用了 ksoftirqd;

3. CPU 循环处理中禁止了下半部;

这几个条件都是和中断或内核抢占相关的, 由此看来应用程序不是引起该警告的原因, 更像是系统层面的.

再来看上面的报错:

INFO: rcu_bh self-detected stall on CPU { 0} (t=0 jiffies)

可以译为检测到 cpu 0

上存在 rcu_bh

处理延迟或超时. 不过从 linux-3.4/kernel/rcutree.c

源文件来看:

static void print_cpu_stall(struct rcu_state *rsp)

{

...

printk(KERN_ERR "INFO: %s self-detected stall on CPU", rsp->name);

print_cpu_stall_info_begin();

print_cpu_stall_info(rsp, smp_processor_id());

print_cpu_stall_info_end();

printk(KERN_CONT " (t=%lu jiffies)\n", jiffies - rsp->gp_start);

if (!trigger_all_cpu_backtrace())

dump_stack();

...

t=0 jiffies

这里的 0

就很奇怪, 因为从代码里看这里的值应该是当前 jiffies

(当前系统自启动以来的节拍总数, jiffies / HZ

即为机器启动的秒数, 系统的时钟频率 HZ 默认为 100, 相当于10ms 一次) 减去中断程序启动的 jiffies

. 这里的 0

意味着经历了 0

个节拍, 在 10ms

之内. 下半部的中断在 10ms

内就被认为是处理延迟或超时. 不过 10ms 还远没超过默认的 timeout(60s)

值, 可以从 /sys/module/rcutree/parameters/rcu_cpu_stall_timeout

查看该值. 这个问题先保留, 或许可以通过升级内核版本解决.

另外堆栈中的信息, update_process_times

函数主要通过计时器中断程序来给当前的进程计时, 不过在计时前对 rcu

的调用进行了检查, 上述的堆栈信息即从 rcu_check_callbacks

中输出. 可以看到执行 rcu_check_callbacks

函数后, 无论是否打印堆栈信息都会执行后续的计时操作. 所以从这方面来看上面的信息只是警告信息, 不会影响用户空间程序的使用.

Apr 24 21:02:09 cztest kernel: [] update_process_times+0x43/0x80

source/kernel/timer.c

void update_process_times(int user_tick)

{

struct task_struct *p = current;

int cpu = smp_processor_id();

/* Note: this timer irq context must be accounted for as well. */

account_process_tick(p, user_tick);

run_local_timers();

rcu_check_callbacks(cpu, user_tick); // ---> rcu_pending -> __rcu_pending -> print_cpu_stall

printk_tick();

#ifdef CONFIG_IRQ_WORK

if (in_irq())

irq_work_run();

#endif

scheduler_tick();

run_posix_cpu_timers(p);

总结说明

从上述的简单分析来看, 该消息只是提示信息, 不会是用户空间的程序来引起, 不过也需要多观察该 kernel 提示是否频繁出现. 可以尝试通过升级内核来解决该问题.

参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

睡眠音频分割及识别问题(十一)--基于Android的YAMNet音频识别(总结)

WAV文件格式介绍 WAV文件遵守资源交换文件格式之规则,在文件的前44(或46)字节放置标头(header),使播放器或编辑器能够简单掌握文件的基本信息,其内容以区块(chunk)为最小单位,每一区块长度为4字节,而区块之上则由子区…

安卓第一行代码第3版pdf_SPECFEM2D用户手册——第3章 网格生成——3.1 如何使用SPECFEM2D...

参考资料manual_SPECFEM2D.pdf数值实现Julia 1.4.2/MATLAB 2019a备用系统Ubuntu 64地球物理局 地震波动力学实验室 谱元组 译# 声明 # 欢迎批评指正,禁止转载!目 录石中居士:地震波场正演模拟中的谱元法:基本原理与程序实现——目…

黑白棋游戏水平(2)--pytorch剪裁

系统需求 Linux系统,并已安装git、gcc、g、cmake⼯具 下载源码 从github克隆Pytorch仓库 git clone --recursive https://github.com/pytorch/pytorch如果已经克隆过,则使⽤以下命令更新 git submodule sync git submodule update --init --recurs…

linux htb 源代码,LINUX TC:HTB相关源码

LINUX TC:HTB相关源码 收藏HTB(hierarchy token buffer)是linux tc(traffic control)模块中的排队队列的一种。它的配置比CBQ要简单.同时实现功能也很强大。下面,就来看看,HTB在linux中的源码。1、 Qdisc_ops的注册先从module_init函数看起(…

二维码图像去噪文献调研(1)--Real Image Denoising with Feature Attention

简介 (1) 论文(包括期刊和发表时间): Real Image Denoising with Feature Attention(ICCV 2019) (2) 论文链接: https://arxiv.org/pdf/1904.07396.pdf &…

idea gui插件_给 IDEA 换了酷炫的主题,研发小姐姐看到:feel so high。。。

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]IntelliJ IDEA介绍IDEA,全称 IntelliJ IDEA ,是 Java 语言的集成开发环境, IDEA 在业界被公认为是最好的 java 开发工具之一,尤其在智能 代码助手、代码自动提示、重构、 J2E…

华为荣耀电脑第三方linux,【第三方Linux版】荣耀MagicBook Pro 16.1英寸全面屏如何?某东入手评测...

这款【第三方Linux版】荣耀MagicBook Pro 16.1英寸全面屏轻薄笔记本电脑(酷睿i5 8G 512G MX250 IPS)冰河银,看网上评测推荐的,后面网上种草了这款笔记本,用过一段日子了,分享使用感受如下:一、【第三方Linux版】荣耀Ma…

二维码提升对比度文献调研(1)--Fast Image Processing with Fully-Convolutional Networks

简介 (1) 论文 (期刊和发表时间) Fast Image Processing with Fully-Convolutional Networks (ICCV 会议 2017) (2) 论文链接 https://openaccess.thecvf.com/content_iccv_2017/html/Chen_Fast_Image_Processing_ICCV_2017_paper.html (3) 源代码链接 …

python的变量如何理解_Python程序中变量作用范围应该如何理解?

初学Python,自己尝试着写了一个爬虫,主要代码如下import jsonimport scrapyfrom bs4 import BeautifulSoupfrom docx import Documentfrom docx.shared import Ptclass BidsSpider(scrapy.Spider):name bids_spiderallowed_domains [deal.ggzy.gov.cn,…

linux下 c语言 用write open二进制写文件,Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作-Go语言中文社区...

一、前言在做一个镜头的初始化操作,需要加载一个648*522像素大小的文件,厂商提供的是一个excel表,如果要加载数据,可用加载txt文本的方式,我选用二进制方式加载文件;大家都知道电脑真正执行的不是高级语言&…

二维码提升对比度文献调研(2)--Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement

简介 论文 (期刊和发表时间) Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement (CVPR 会议 2020)论文链接 https://openaccess.thecvf.com/content_CVPR_2020/html/Guo_Zero-Reference_Deep_Curve_Estimation_for_Low-Light_Imag…

python打开是什么样子的图片_黑洞6问:黑洞内部是什么样子?黑洞图片发布,理论和实测的碰撞...

在科学领域,没有什么比你在第一次观察或实验结果中验证一个长期的理论预测时更令人兴奋的了。2012年,大型强子对撞机揭示了希格斯玻色子——标准模型中最后未发现的基本粒子的存在。 几年前,LIGO合作直接探测到了引力波,证实了对爱…

linux初学文档,51CTO博客-专业IT技术博客创作平台-技术成就梦想

linux 里 一切皆文件7种文件类型:普通文件 fd 目录b 块设备 /dev/sda /dev/sda1 /dev/sr0c 字符设备 /dev/pts/0 /dev/ tty0#tty 查看字符设备名称l symbolic link 符号链接 软链接(快捷方式)s socket 套接字 网络进程通信的一种方式p pipe 管道 本地进程间的一种通…

二维码提升对比度文献调研(3)--A Low-Complexity Algorithm for Contrast Enhancement of Digital Images

简介 (1)论文(包括期刊和发表时间):A Low-Complexity Algorithm for Contrast Enhancement of Digital Images (2)论文链接: http://www.mecs-press.net/ijigsp/ijigsp-v10-n2/IJIG…

安卓checkbox无响应_【安卓手机】无法连接电脑的解决方法

转自:广西南宁平衡信息技术有限公司,作者:平衡LivY一般在对手机的数据采集过程中,尤其是安卓手机,最令人头疼的就是手机接入电脑后无法识别。相信以下窗口是大家在做手机取证的时候最不想看到的。那么这里大伙就会有疑…

linux s删除第一行,Linux文本处理三驾马车之一sed

sed对"行"操作动作含义a :新增, a 接字串,而这些字串会在新的一行出现(目前的下一行)~sed 1a\llll llllllll \n lllllll t.txtnl /etc/passwd | sed 2a drink teased -i $a# This is a test regular_express.txt ####文…

二维码提升对比度文献调研(4)--Attention Guided Low-light Image Enhancement

简介 (1)论文2: Attention Guided Low-light Image Enhancement with a Large Scale Low-light Simulation Dataset (2)论文链接: https://arxiv.org/pdf/1908.00682v3.pdf (3)源代…

函数传参string_C/C++的三种函数传值方式及其区别

C/C函数传参方式我想很多朋友应该都知道,但是不同传参方式的背后他们的区别是什么我想很多人并不那么清楚。本文就给大家揭露一下各传参方式的区别。传参方式有这三种:值传递、引用传递、指针传递大家可以去看三种传递方式的写法的区别,关于写…

二维码提升对比度文献调研(5)--DeepLPF: Deep Local Parametric Filters for Image Enhancement

简介 (1)论文名称: DeepLPF: Deep Local Parametric Filters for Image Enhancement CVPR 2020 (2)论文链接: https://arxiv.org/abs/2003.13985 (3)源代码: https://gi…

c语言单选题大全,C语言单选题(五)

1.C语言结构体类型变量在程序执行期间(C)。A.部分成员驻留在内存中B.只有一个成员驻留在内存中C.所有成员一直驻留在内存中D.没有成员驻留在内存中2.当定义一个结构体变量时,系统分配给它的内存是(D)。A.结构中最后一个成员所需内存量B.结构中第一个成员所需内存量C…