1. 问题所示
跑深度学习的时候遇到卡顿卡机
hostname kernel:watchdog BUG:soft lockup - CPU#16 stuck for 130s![P2PMain-72:4030570]
界面如下所示:
大概意思是:
watchdog_thresh参数是硬件监视器的超时阈值,即硬件监视器在未接收到系统响应的时间后会触发软锁定检测
2. 基本知识
软锁定(soft lockup)和硬件监视器(watchdog)是两个与Linux系统稳定性和可靠性密切相关的概念
一、 软锁定(Soft Lockup):
软锁定是指CPU长时间运行在内核模式下执行一个任务,而没有释放控制权给其他任务,导致系统无法响应用户输入或其他请求
软锁定通常是由于以下原因之一引起的:
-
内核空间代码执行时间过长:某个内核线程或驱动程序执行时间过长,导致其他任务无法获得CPU时间片
-
内核死循环(Kernel Spinlock):在多线程环境中,如果一个线程持有锁而没有释放,其他线程就无法获得该锁,导致系统停滞
软锁定的检测通常由硬件监视器(watchdog)负责,一旦检测到软锁定,就会发出警告信息并尝试恢复系统
软锁定问题的解决方法通常包括优化内核代码、修复驱动程序漏洞以及调整系统配置
二、硬件监视器(Watchdog):
硬件监视器是一种系统机制,用于监视系统的状态,并在检测到故障或异常情况时采取措施以确保系统的稳定性和可靠性。硬件监视器通常包括一个计时器和一个独立的处理器或电路,它可以监视系统的活动并在预定的时间间隔内接收或产生定时器中断。
在Linux系统中,硬件监视器通常用于监视系统的软锁定情况。当硬件监视器检测到系统停滞或软锁定时,它会向系统发送中断信号,引发相应的处理机制来识别和解决软锁定问题。这通常涉及记录相关信息、尝试恢复系统状态,并在必要时重新启动系统
三、在Linux中的应用:
在Linux中,软锁定和硬件监视器功能通常通过内核模块实现,例如softlockup和watchdog模块,这些模块负责监视系统的活动并在必要时采取措施以确保系统的稳定性和可靠性
可以通过配置内核参数或加载相应的内核模块来调整软锁定和硬件监视器的行为,包括设置监视器的超时时间、启用或禁用监视器功能、以及配置系统对软锁定的响应策略等
3. 进阶知识
调整硬件监视器的超时阈值,以便增加硬件监视器对软锁定的检测时间
一、临时生效的方式:
临时将硬件监视器的超时阈值设置为30秒:echo 30 > /proc/sys/kernel/watchdog_thresh
,(系统重新启动后会失效)
二、永久生效的方式:
通过编辑配置文件/etc/sysctl.conf或/etc/sysctl.d/*.conf
,并添加以下行:
kernel.watchdog_thresh = 30
使其生效:sysctl -p
sysctl
是一个用于查看、设置和管理内核参数的工具,通过使用sysctl命令,可以方便地修改内核参数,例如在运行时临时生效或永久生效
常见的用法包括sysctl -w
用于临时修改参数,以及sysctl -p
用于重新加载配置文件中的参数