我可以在 Linux 中使用更强大的笔记本电脑模式吗?
我希望硬盘减速,即使有东西想要读取缓存中没有的内容,也阻止它加速。一般来说,我希望有以下模式:
- 普通的
- 当前笔记本电脑模式
- 更强大的笔记本电脑模式:仅在需要读取未缓存的内容(并缓存)时启动。除非真的存在内存压力,否则不会启动写入内容(例外:控制台中的显式“同步”命令)。为此,内核允许将进程保持在 D 睡眠状态 10 秒。
- 强制笔记本电脑模式:不启动,就这样。除非我关闭此模式,否则让有问题的进程处于 D 睡眠状态。就像有炸弹而不是硬盘一样。
我还想跟踪访问时间(mount -o atime),但我不希望仅仅为了更新它们而启动硬盘。
是否有一些设置或内核补丁可以更接近这一点?
也许我应该为“强制笔记本电脑模式”编写特殊的 io 调度程序?例如echo suspend > /sys/block/sda/queue/scheduler
锁定驱动器并echo cfq > /sys/block/sda/queue/scheduler
再次解锁?
答案1
快速将“强制笔记本电脑模式”编码为 io 调度程序。首先在 UML 中测试,然后在我的笔记本电脑上测试,甚至无需重启。
http://vi-server.org/vi/0001-block-Introduce-hung-iosched.patch
当我发出 时echo hung > /sys/block/sda/queue/scheduler
,hdparm -y /dev/sda
硬盘就会停止并且无法恢复。
当我需要读一些东西的时候我就会读” echo cfq > /sys/block/sda/queue/scheduler
。
我还可以看到哪些进程想要启动(它们处于 D 休眠状态)。reiserfs 和 pdflush 挂起。然后是 syslogd。
为了防止同步尝试,我暂时禁用同步echo 0 > /proc/sys/fs/sync-enable
。考虑到硬盘已被锁定,这应该或多或少是安全的。这是由http://vi-server.org/vi/0001-fs-Introduce-sync-enable-flag.patch。