在linux kernel里,有一个debug选项LOCKUP_DETECTOR。 使能它可以打开kernel中的soft lockup和hard lockup探测。 这两个东西到底有什么用处那? 首先,soft/hard lockup的实现在kernel/watchdog.c中, 主体涉及到了3个东西:kernel线程,时钟中断,NMI中断(不可屏蔽中断)。 而正是用到了他们之间优先级的区别,所以才可以调试系统运行中的两种问题: 抢占被长时间关闭而导致进程无法调度(soft lockup) 中断被长时间关闭而导致更严重的问题(hard lockup) 有了soft lockup的机制,我们就能尽早的发现这样的问题了。 分析完soft lockup,我们继续分析hard lockup static int watchdog_nmi_enable(unsigned int cpu) { struct perf_event_attr
如果实时进程是CPU消耗型的,会不会导致其它进程得不到运行机会,造成系统lockup呢? 这实际上是两个问题,不能混为一谈,第一个问题是会不会造成系统lockup,第二个问题是会不会导致其它进程得不到运行机会。我们一个一个分别来谈。 实时进程会不会造成系统lockup? Lockup分为soft lockup和hard lockup,我在《内核如何检测soft lockup与hard lockup》一文中解释了Linux kernel检测lockup的原理,参见http Hard lockup发生在CPU中断被屏蔽的情况下,因为实时进程本身并不会屏蔽CPU中断,hrtimer时钟中断是可以得到响应的,所以不会导致hard lockup。 Soft lockup发生在内核线程[watchdog/x]得不到运行的情况下,理论上如果实时进程占着CPU不放,确实有可能导致[watchdog/x]得不到运行而发生soft lockup,然而这个可能性并不大
但是只开启一个组件压测,则并没有相关soft lockup报错。看现象似乎不符合逻辑?本文记录该问题的分析过程。 结论先行流量起来时,抓包把90%以上的处理资源都耗光了,且无论是否有soft lockup,业务也已经无法正常提供服务。 >软中断->内核栈之间不停的pin pon导致该进程在系统调用里面因为被软中断抢走而退不出来,导致watchdog进程得不到调度,从而在到达内核soft lockup检查时限时,就会报soft lockup 检查时限时,检查到了watchdog在时限内没有被调度,就会报soft lockup。 所以这里可以确认的是,抓包导致的软中断高,进而导致打满cpu,但无法解释soft lockup出现的原因。
对于mixed edge scan chain, 且下降沿触发寄存器在前上沿触发的寄存器在后,无lockup latch, 则第一个上沿触发寄存器的SI pin 被定义成 falling edge-triggered 对于mixed clock scan chain, 在跨clock domain 处,会插入lockup latch, 那lockup latch 的D pin 会被定义为前一个clock segment 的internal STOP 点;lockup latch 的Q pin 会被定义为后一个clock segment 的internal START 点。
multiple clock domain with data lockup: 有clock mix, 为了hold 在插chain 时会在跨clock domain 处插入一个lockup latch , 在Innovus 中trace scan chain 的时候需要加option -lockup. ? 工具会尽量将所有负沿触发的寄存器放在chain 的前半段,把正沿触发的寄存器放在chain 的后半段;如果要将正沿触发的寄存器放在负沿触发的寄存器前面,则需要在rise edge->fall edge 过度的两个寄存器之间插一个lockup
public abstract void takePhotos(); } public interface Lock { //锁 public abstract void lockup } //防盗门 public class TheftproofDoor extends Door implements Lock, DoorBell { public void lockup ; myDoor.close(); myDoor.open(); myDoor.lockopenI(); myDoor.lockup
kernel:BUG: soft lockup - CPU#0 stuck for 23s! [khugepaged:152] 解决办法 在虚拟机输入账号密码,进入账户即可,这时就不会报错
在Linux系统中,当我们看到类似消息:"watchdog: BUG: soft lockup - CPU#1 stuck for 34s! Soft lockup"是指某个CPU核心在一定时间内(通常为几十秒)未能执行其他任务,这通常表明该核心在执行某个过程或任务时进入了无限循环。 2.
数据库性能问题 4 典型故障场景与深度排查案例4.1 案例一:操作系统"soft lockup 00:43:32左右日志关联分析:发现主库sys_log缺失00:45-00:51期间的日志记录系统日志检查:在/var/log/messages中发现大量"watchdog: BUG: soft lockup - CPU#X stuck"错误服务状态验证:确认主库集群管理服务(kingbasecluster)和数据库服务(kingbase)均无法正常运行根因分析:所谓"soft lockup"是指内核进程或线程被锁死在某个状态 从系统message日志发现,从"Dec 8 00:43:43"开始,node 12操作系统持续出现soft lockup错误,导致系统假死,数据库服务无法正常运行。 排查过程:软中断分析:系统日志显示虚拟机B和C出现"soft lockup"错误,Call trace集中在smp_call_function_many函数性能分析:使用sar工具分析系统性能,发现:CPU
某客户反映他们的实例有一段时间内慢查询突增,监控页面上也显示那段时间内监控数据也没有上报,经查看系统日志,以下内容引起了我们的注意: Mar 15 23:06:30 TENCENT64 kernel: BUG: soft lockup insert_kthread_work+0x40/0x40 soft lockup(软死锁)通常被定义一种内核bug,也即让kernel在内核态循环超过20s,不给其他进程任何运行机会。 所以,根据结合系统日志给出的信息,我们可以判断出,jbd2这一日志进程的callstack上的ext4_es_lru_add函数中使用的自旋锁持有时间过长导致了soft lockup这一问题。 2. 至此,文章开头出现的soft lockup问题就不难理解了,如果内存压力小,shrinker不会被频繁触发,锁竞争不会很激烈;相反,如果内存压力很大,shrinker就会被频繁触发,这样自旋锁会被shrinker 如果自旋等待的时间超过20s,那么soft lockup这种软死锁问题就可能会发生了。 3. 社区解决方法 既然遍历整个LRU链表会导致锁占用时间过长,那么就得想办法加快遍历过程。
锁定复位 LOCKUP Reset。锁定复位用来指示内核软件的严重错误。当系统内置的硬件保护装置被激活,从而产生了一个不可恢复的异常时,内核将被锁定,并引发锁定复位。 锁定复位会导致RCM_SRS1寄存器的LOCKUP位置位。 MDM-AP系统复位 将MDM-AP控制器的复位请求位(System Reset Request)置位,将导致MDM-AP系统复位。 LOCKUP:置1表示系统发生了锁定复位。 复位检测软件设计 实际系统中,我们经常需要对系统工作中的复位的类型和次数信息进行记录和保存。这时就需要用到存储模块。
服务器自动重启 kernel: BUG: soft lockup - CPU#4 stuck for 22s! [handler20:1542] 此类也是3.10内核BUG ?
crash>log .... [23680089.192513] NMI watchdog: BUG: soft lockup - CPU#11 stuck for 22s!
后面又继续分析内核中出现的另一个错误,“BUG: soft lockup – CPU#N stuck for 4278190091s! 首先解释一下这个值代表的意义,通常情况下如果一个cpu超过10s没有喂狗(执行watchdog程序)就会抛出soft lockup(软死锁)错误并且挂起内核。 •A process showing BUG: soft lockup – CPU#N stuck for 4278190091s! For example, a user running a non-Red Hat kernel had the kernel panic with a soft lockup in __ticket_spin_lock
private static String matching = "
6,soft lockup 在Linux上,每个cpu都会启动一个优先级139的内核线程watchdog: ? 这个线程会周期性的刷新percpu的一个变量----watchdog_touch_ts,默认情况下,这个变量22S没有刷新,就会触发kernel的一个BUG(dmesg中会看到大概内容是BUG: soft lockup
参考: Nested virtualization BUG: soft lockup - CPU#4 stuck for 22s!
10、查阅向导型(Lockup Wizard):使用查询向导可以构建一个组合框来输入字段值,这个字段值可以是表、查询中的引用,也可以手动输入的值。
对于高频调用的热点函数,kretprobe 里的这个lock 相当于自设的路障hash 到同一个 bucket 的 task 同时调用一个函数时会被串行化,严重影响性能,甚至使系统 soft/hard lockup
示例4:包含时间的格式化条件选择SELECT id, `fund_type`, `fund_name`, `fund_code`, `lockup_period`, `revenue_performance