定位分析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

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1