为什么Ubuntu 16.04将所有驱动器IO调度程序设置为“最后期限”?


17

我刚刚在笔记本电脑的第二个分区上安装了Xubuntu 16.04-64bit。我注意到有时它似乎有点慢,所以我检查了它用于该驱动器的IO调度程序,事实证明它deadline适用于所有驱动器。我确实有几个SSD和硬盘驱动器,所以我知道“最后期限”最适合SSD和cfq硬盘驱动器。

我在另一个分区上启动到14.04,它按需cfq用于旋转驱动器和deadlineSSD。我也调查了/etc/udev/rules.d14.04是否正在使用规则配置驱动器类型,但是该规则不存在,因此我假设内核正在执行此操作。

所以我想知道这是一个错误还是他们现在对所有内容都使用“最后期限”?

更新:我写的关于/etc/udev/rules.d的评论是一个错误。实际上,自几年前开始使用SSD以来,我一直在使用udev规则根据轮换类型更改调度程序(正如下面的答案所示)。我想我只是忘了...变老了。无论如何,我使用的参考之一是Debian SSD优化Wiki

如果包含它,不是一个好主意吗?只是一个建议!

Answers:


6

从14.04版本开始,将3.13内核的默认调度程序从CFQ更改为Deadline

不再有单独的服务器内核,CFQ sheduler不适合许多服务器使用情况,例如KVM写超时。带有USB设备的台式机甚至会降低性能。


1
感谢您的阅读,非常启发!SD卡以及TWRP中的Android平板电脑经常出现USB问题。在后者中,它会在最后悬挂几分钟。由于我的VB guest虚拟机使用的是截止日期在我的SSD上,因此KVM问题永远不会出现在我的VB guest虚拟机上。
curt54 2013年

32

Ubuntu内核团队定期对不同文件系统和I / O调度程序上的不同模拟工作负载进行大量分析,以了解最佳的通用I / O调度程序选择。普遍的答案是,对于所有不同类型的介质,所有不同类型的安装中的通用配置都没有完美的I / O调度程序选择。要记住的要点是:

  1. 系统正在向SSD迁移,因此noop或截止日期最适合这些。Noop的CPU开销少于截止日期。

  2. CFQ vs Deadline是一个艰难的决定。CFQ确实具有更大的灵活性。但是,我们发现,对于更大范围的模拟I / O操作,截止日期提供的延迟比CFQ低,吞吐量更高。

  3. 我定期对一系列文件系统和I / O调度程序进行内核基准测试(每个内核测试需要3天以上才能完成)。根据此数据以及其他各种数据,我们尝试就最佳选择做出明智的决定,请参阅:

http://kernel.ubuntu.com/~cking/fs-tests/

所有I / O调度程序都有其优点/缺点,因此任何默认设置都不是完美的,并且如果令人信服的数据和原因表明我们​​需要更改,Ubuntu内核团队始终愿意输入默认设置。


5
我们已将CFQ用作Ubuntu Zesty 4.10内核的默认设置,并且还启用了新的CONFIG_BLK_WBT_MQ(多队列写回限制),因为这解决了闪存设备等慢速设备的脏缓存写回问题。
科林·伊恩·金

1
既然现在在BFQ内核4.12中,我们是否会将BFQ视为默认设置?
JauntyDoe

我们将在4.12 / 4.13上对此进行评估,我也对kyber进行了一些早期测试,但是一旦本周4.12发布,我将再次对其进行重新研究。
科林·伊恩·金

原则上,此问题仅与16.04内核有关,但仍会在搜索中出现:-)。因此,这是最近的更新:Ubuntu在Ubuntu 17.04(zesty)18.10(cosmic)中已切换回CFQ,与上游默认值匹配。
sourcejedi

1
进一步更新:Linux在使用CFQ或BFQ时已禁用WBT(至少默认情况下),因为它们不能很好地协同工作。2)如果您想评估WBT解决的问题,我认为您需要知道该问题因设备(固件不同)而异。在您的基准测试结果中,我什至找不到所使用的设备类型。3)我很好奇您对WBT解决方案的描述。如果您查看WBT补丁集第2版的求职信,则WBT旨在处理快速闪存上的缓冲写入,这可能会有很长的队列,并避免使同一设备上的读取器不足。
sourcejedi

9

我不知道为什么开发人员决定选择deadline默认的调度程序,这可能是因为大多数新计算机都附带了SSD,通常会在上面安装系统。您可以手动设置的调度这样,如果你还没有安装它...安装gksu

打开一个终端并执行:

sudo apt install gksu  

然后执行以下命令:

gksudo gedit /etc/udev/rules.d/60-schedulers.rules  

将以下文本粘贴到空文件中,然后保存更改的文件。

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"  

重新启动操作系统,现在您正在使用针对HDD和SSD的最佳调度程序。


是的,根据我在问题中的更新,这就是我一直使用的。但是我认为,既然在今天同时拥有两种类型的驱动器,它们就会在所有Linux发行版中都包含此规则。
curt54'6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.