背景
操作系统s3休眠后回来发现无法唤醒,但是发现风扇一直再转和电源长亮,键鼠无效。
多次验证结果
发现没有正常进入睡眠,睡眠后风扇应该停止转动,但是还在长传,这时就已经出现问题了。
日志分析
根据第一次发现问题提供的4台卡死机器系统syslog日志以及kernel日志。发现在s3进入休眠时出现软中断IRQ39 以及 MWV206 驱动无法正常挂起call trace异常输出:
Call trace 解释
warn_alloc+0xec/0x158 表示在内存分配过程中发生了警告。warn_alloc 函数处理内存分配失败或其他警告信息。FUNC206HAL420+0x1dc/0x310 [mwv206] 表示设备驱动信息pci_pm_suspend+0x7c/0x190
dpm_run_callback+0x4c/0xf8
__device_suspend+0xfc/0x4a8等表示设备正在挂起操作信息
sysfs_kf_write+0x40/0x50
kernfs_fop_write+0xf4/0x1f0__vfs_write+0x18/0x40等表示这个错误系统调用时写入sysfs或内核文件时发生的Mem_info解释:
报告了当时内存使用信息以及空闲信息
内存每页大小通常为4KB,根据free提示的空闲内存14368页,计算:
KB=14368 * 4 = 57472MB=14368 * 4 /1024 ~= 56M
GB=14368 * 4 / 1024 /1024 ~= 0.056GB
报告 0000:0a:00.0挂起失败,因该设备无法正常挂起导致无法正常进入休眠
设备查询 0000:0a:00.0展示:
设备查询是JJW JM7200显卡重启前段日志发现有自动唤醒操作:
由于显卡驱动未正常挂起,导致系统尝试唤醒
根据以上现象判断是空闲内存不够。导致显卡驱动无法正常获取可用内存来进行挂起操作,然而系统检测到后尝试唤醒也唤醒失败。就形成了睡眠卡死发现电源等是长亮,风扇一直转动状态。
验证方案
通过调整内核vm.min_free_kbytes 参数解决,可以查看我历史文章有篇详细的kbytes解释。