由于某种原因,常见的浏览器(Chromium 特别糟糕,但 Firefox 也好不了多少)会在我的 Debian 系统上产生持续的 IO 负载,尤其是写入负载。即使浏览器没有任何工作要做(例如,我只是阅读静态网页,或者它在后台最小化),情况也是如此。对于 chromium,“chromium [BrowserBlocking]”子进程仅在几秒钟内生成近 300kb 的磁盘写入,但没有执行任何操作。我运行日志文件系统,因此这些写入的效果被放大。
这非常烦人,尤其是在我的笔记本电脑上;我的三星 960 Pro 支持 APST(睡眠)状态,但它永远无法真正进入深度睡眠,因为它不断被浏览器进程唤醒。同样,CPU 也无法有效地使用其空闲状态。运行浏览器时我的电池寿命明显比不运行浏览器时要差。另外,即使现代 SSD 不存在问题,我也宁愿避免这些不必要的操作导致闪存基板持续且无用的退化。
浏览器不处理具有任何价值的数据,因此这里不关心数据完整性。理想情况下,我想告诉内核忽略来自 chromium 的任何同步 IO 请求,并将所有写入请求缓存在内存中,直到文件系统被卸载或系统开始出现内存压力。
空闲时“pidstat -d 1 -C chromium”的示例:
05:05:09 PM 1000 30539 0.00 300.00 0.00 0 铬 05:05:13 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay 命令 05:05:14 PM 1000 30539 0.00 28.00 0.00 0 铬
05:05:14 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay 命令 05:05:15 PM 1000 30539 0.00 4.00 0.00 0 铬
05:05:22 PM 1000 30539 0.00 212.00 0.00 0 铬
由于这是多个浏览器共有的问题,因此我希望避免在任何特定浏览器的代码中进行修改。我怎样才能做到这一点?
答案1
这里不关心数据完整性
伟大的!试用吃我的数据其中“禁用 fsync 和朋友”。它可以帮助最大限度地减少磁盘写入。
toolkit.storage.synchronous
对于 Firefox,还请查看减少 SQLite 磁盘流量。