定位分析RCU stall问题

2023-12-09 23:29
文章标签 分析 问题 定位 rcu stall

本文主要是介绍定位分析RCU stall问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用RCU_CPU_STALL_CPUTIME

=====================

在编译内核时打开CONFIG_RCU_CPU_STALL_CPUTIME=y或者在启动参数中增加
rcupdate.rcu_cpu_stall_cputime=1, 这样在发生RCU STALL告警时就会有下面附加信息:

  rcu:          hardirqs   softirqs   csw/systemrcu:  number:      624         45            0rcu: cputime:       69          1         2425   ==> 2500(ms)

这样统计信息是在采样周期中收集的。其中number行分别是发生stalled的cpu上的硬中断,软中断,和上下文的切换次数
cputime行的前三列分别是硬中断,软中断和任务消耗的cpu时间,单位为ms.最后一个数字是统计的周期时间(ms).
因为用户态的任务通常不会引起RCU CPU stalls,所以任务通常是内核任务,这也是为什么只统计system cpu的原因.

采样周期如下图所示::

  |<------------first timeout---------->|<-----second timeout----->||<--half timeout-->|<--half timeout-->|                          ||                  |<--first period-->|                          ||                  |<-----------second sampling period---------->||                  |                  |                          |snapshot time point    1st-stall                  2nd-stall

下面展示4种典型的场景:

  • 有关闭中断后的CPU循环
 rcu:          hardirqs   softirqs   csw/systemrcu:  number:        0          0            0rcu: cputime:        0          0            0   ==> 2500(ms)

因为中断被关闭,因此没有中断和上下文切换。同时cpu time是在中断处理中统计的,所以也是0.
这处场景通常还会有 "(0 ticks this GP)" 打印出来.

  • 有关闭下半部后的CPU循环.

    这种情况和第1种情况类似,但是硬中断和上下文切换是有统计的:

 rcu:          hardirqs   softirqs   csw/systemrcu:  number:      624          0            0rcu: cputime:       49          0         2446   ==> 2500(ms)

softirqs是0说明软中断被禁用,通常通过local_bh_disable().

  • 有关闭抢占情况下的CPU循环.

    这种情况下,只有上下文切换次数为0:

 rcu:          hardirqs   softirqs   csw/systemrcu:  number:      624         45            0rcu: cputime:       69          1         2425   ==> 2500(ms)
  • 没有循环操作,但是有大量的硬件和软中断.
 rcu:          hardirqs   softirqs   csw/systemrcu:  number:       xx         xx            0rcu: cputime:       xx         xx            0   ==> 2500(ms)

这种情况下,硬中断和软中断不为0,但是上下文切换次数和sys cpu时间为0
软中断也有可能为0,比如在硬中断处理里有cpu spinning.
如果遇到此种情况的CPU stall. 可以进一步查看/proc/interrupts或者通过代码trace每种中断,可以参考show_interrupts().

这篇关于定位分析RCU stall问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/475418

相关文章

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制