需求描述
这么迭代下去,笔记本的合盖睡眠,永远搞不利索,我来重新设计一个,取代现有的nix设置里参与睡眠处理的机制:
- onetime机制注销掉,改由power-battery-sleep.nix来管理
- nix:向系统注册一个服务名 sleep,它不关心系统是否处于睡眠,只要cpu还唤醒,它就会每10分钟被执行一次,但它不会主动去唤醒睡眠的cpu
- sleep服务:它每10分钟检查一次系统状态,并写入同目录的的power-battery-sleep.log,log 滚动 1MB大小,这个监控调度行为的能耗尽可能的低,不要成为一个埋雷隐患
- sleep服务:每10分钟记录的日志行格式,年月日时分秒 monitor: [mode=AC or DC] [cover=open or close] CPU xx% | memory xxx GiB | 活跃进程数 xx | 当前电量 xx% => 强制睡眠触发=满足 or 不满足
- sleep服务:当前后两次相隔10分钟的monitor日志记录, 状态都是dc+close时,触发强制睡眠处理,让系统进入睡眠,并将强制睡眠处理程记录写入日志行 年月日时分秒 forcesleep: [mode=AC or DC] [cover=open or close] xxxxxxxxxxx处理信息和过程遇到情况xxxxxxxxxxxx,这个强制睡眠的处理权限尽可能的高
- 运行情况推演:如果一直不满足 dc+close,它会一天24小时 记录 24*6共144行日志,开销可接受,并且自身做到极值的低耗绿色,完全不会冲击系统的节能管理。用户拔电合盖正常睡眠成功,这时候cpu不运行,sleep服务不会被执行,日志不新增。如果用户拔电合盖或合盖拔掉且睡眠失败或睡眠成功但cpu还在运行,则cpu会执行sleep服务记录两次dc+close,则会判断满足强制睡眠条件,sleep服务触发执行强制睡眠,并记录执行记录。如果强制睡眠失败,它下一个10分钟会再次被cpu执行,发现 仍满足条件,再次触发强制睡眠。ac或open状态,永远不会触发强制睡眠,不满足两次monitor状态都是 dc+close
hermes分析
方向成立: 独立发起者补缺口, 不唤醒Timer、两次去抖、AC/open永不触发都对。动手三铁律: ①单飞, 上次未结束不起新的, 跳过记一行并列出堵住的pid/时长/卡点, 防堆积; ②无残留, 发信号→5分钟验尸→写日志结束, 失败不留半截状态; ③验尸停手, 连续3次无效停手告警, 不造新循环。只替onetime, attendee不动。docked不用veto, 30秒快线另议。