关于SSD nukes系统性能的大量写入活动


13

我注意到当我做大量的写应用程序时,整个系统会变慢。为了进一步测试,我运行了这个(相对)低CPU高磁盘活动:

john -incremental > file_on_SSD

这每秒将数万个字符串抽出到我的系统磁盘上的文件中。

执行此操作时,鼠标会滞后,TTY变得无响应,应用程序“消失”,并且通常整个计算机都无法使用。当我最终可以使用Control + C时john,系统将在几秒钟后恢复到完整的状态。

这是一个极端的例子,但是我遇到了类似的问题,即写入强度较低的活动(例如从快速的源中复制大文件或转码)的活动较少。

我的主操作系统磁盘是带有EXT4 的相当快的SSD(OCZ Agility 60GB)。如果将johnEXT4的输出写入机械磁盘,尽管速度慢得多(SSD每秒约42,000个字,机械速度8,000 w / s),但我不会遇到同样的速度下降。吞吐量可能是相关的。机械磁盘也与系统无关。只是数据而已。

而且我正在使用内核2.6.35-2,但是我注意到了这个问题,因为当我大概在使用.31或类似的东西时,我得到了这个SSD。

那么,是什么原因导致经济放缓?EXT4问题?内核问题?SSD问题?上述所有的?还有吗

如果您认为我需要进行其他测试,只需在注释中告诉我该怎么做,然后将结果添加到问题中即可。


也许您还应该提及您正在使用的SSD。并非所有SSD都相等。
克里斯蒂安·丘皮图

@Cristian:已添加。这是OCZ敏捷性。
奥利

Answers:


12

一段时间以来,这一直是一个已知问题。使用像Btrfs这样的经过SSD调整的FS可能会有所帮助,但可能没有帮助。

最终,这是IO调度程序/内存管理系统中的错误。最近,有一些补丁旨在解决此问题。请参阅固定:Linux桌面响应性问题?

这些修补程序最终可能会进入主线内核,但现在,如果要解决此问题,您可能必须编译自己的内核。


2
如果我理解正确的话,为此补丁应该进入linux 2.6.37
2010年

1

您可以检查几件事,以尝试在Linux下提高SSD性能。

  1. 将挂载点设置为“ noatime”。在大多数用例中,额外的活动更新访问时间通常被浪费。尤其是在将单行连续泵入文件的情况下,您将为每次访问强制对文件系统进行多次更新。

  2. 检查电梯。大多数发行版的默认升降机均设置为随机访问旋转盘片。SSD不需要额外的逻辑,因此将升降机设置为noop可以通过让硬件管理写入来提高性能。

  3. 直写式写回缓存。这有点深奥,但是您可以检查hdparm设备使用的缓存方法。与直写相比,回写缓存可以对SSD性能产生积极影响。


您可以@nzwulfin写更多有关设置电梯的信息吗?
Grzegorz Wierzowiecki 2012年

看来SSD性能不错。剩下的就是一切。
托尔比约恩Ravn的安徒生

0

您的文件缓存可能未正确调整以适应您的工作负载。不幸的是,Linux内核足够愚蠢,无法自动处理此问题,如果您有大量RAM和足够慢的块设备,则默认设置非常糟糕。有关详细信息,请参见https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/

我建议试图修改/etc/sysctl.conf或者

vm.dirty_background_ratio = 3
vm.dirty_ratio = 6

大大减少了由写缓存引起的RAM压力,从而使内核可以更好地处理其他任务。这将以改进的等待时间换取较低的吞吐量。

另一种可能性是增加缓存,但是如果您的进程一直在不断写入新数据,那么如果缓存已满,您将遇到非常糟糕的延迟。如果您想尝试一下,可以做类似的事情

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

请注意,*_ratio设置是指可用RAM的百分比。如果要更好地控制,请使用*_bytes设置。我个人在工作站上使用以下配置:

vm.dirty_background_bytes = 50000000
vm.dirty_bytes = 200000000

这样会将后台写入缓存限制为50 MB,如果缓存中有200 MB,则将强制进行同步写入。

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.