我过去做过很多不起眼的系统优化,但在powertop
告诉我应该将 USB 端口设置为自动挂起,这迫使他们永远沉睡,也是在我意识到更高层次的好处之后交换性。
但今天,在查看时,我注意到我已经设置了/etc/fstab
选项commit=60
/和/家。我记得这是对笔记本电脑的优化,以减少对磁盘的写入量,从而节省电池。但后来我开始担心这可能会导致数据丢失(有时我的电池会断开连接,然后在启动时fsck
告诉我一些孤立的索引节点)。
在寻找此选项的解释时,我得到了以下解释(第二个似乎与我之前的理解相矛盾):
$ man mount | awk '/commit=/,/^$/'
commit=nrsec
Sync all data and metadata every nrsec seconds. The default value is 5 seconds.
Zero means default.
https://forums.gentoo.org/viewtopic-p-4088752.html
commit=60 停止“立即”(默认为 5 秒)写入优先于读取,并在几秒钟后缓存写入。这在大量读写混合在一起的情况下很有用,用户希望读取优先,这样处理器就可以保持忙碌,而不是在等待写入完成之前暂停,然后才能继续读取。
我见过的一个现实世界的例子是等待几秒钟 Gnome 下拉菜单出现,似乎没有任何原因。原因是磁盘正在忙于写入,因此CPU必须等待写入完成才能从磁盘获取所有数据才能显示菜单。
什么是犯罪真的吗?增加它真的有好处吗(例如响应能力和节能)?它真的会导致数据丢失吗?
答案1
什么是犯罪真的吗?
我认为给出了最好的解释之一这里经过一切堂吉诃德式的。
增加它真的有好处吗(例如响应能力和节能)?它真的会导致数据丢失吗?
根据ext4官方文档:
Ext4 可以被告知每隔“nrsec”秒同步其所有数据和元数据。默认值为 5 秒。这意味着如果你输了 你的力量,你将失去多达最近5秒的工作 (不过,由于日志功能,您的文件系统不会被损坏)。这默认值(或任何低值)会受到伤害 性能,但有利于数据安全。将其设置为 0 与保留默认值(5 秒)具有相同的效果。设置它 非常大的值会提高性能。
增加commit
值意味着您可能会丢失最近 N 秒的工作(其中 N = 提交间隔),尽管大多数情况下这不会发生因为软件仍然可以调用 fsync() 并将其数据写入磁盘,从而覆盖提交设置。您可以将其视为“至少经常将所有内容写入磁盘”。1
另一方面,这意味着更少的写入(这使得它在 SSD 用户中非常受欢迎)和更好的性能(多个写入被组合成一个更大的写入,在提交时间范围内对先前写入的更新被取消)。
至于节省电力,根据这一页事实证明,现在增加commit
价值并不能节省电力。