为什么在对磁盘进行大量写入时系统变慢?


8

我想知道为什么在将大量数据写入磁盘时系统变慢。

我认为,要使系统变慢,CPU应该有一些问题。但是写入仅受I / O约束。

写入数据时是否发生硬件中断?如果是这样,则可能是由于中断导致CPU始终进行上下文切换。


1
我认为几乎所有应用程序都将从磁盘读取/写入数据,不是吗?
吉伦

1
否则,当磁盘被大量使用时,它正在交换到内存,因此速度变慢。一个systemload-plugin可以告诉您是否正在以图形方式使用交换。对于命令行,请使用free
用户未知

1
如果已配置/正在运行sysstat,则可以查看SAR报告中的时间很慢,它会显示该时间附近的情况(上下文切换,磁盘I / O,CPU负载,网络流量等)。
布拉奇利2013年

$PATH如果您使用命令完成或犯了很多拼写错误,也请查看您的设置。浏览许多目录(尤其是具有许多目录条目的目录)可能会花费一些时间,这在资源匮乏时非常明显。
MattBianco 2014年

Answers:


3

背后的核心原因是通常的:I / O是多少比CPU / RAM慢。即使进行I / O操作的进程使用DMA(这会减轻CPU的负担),在某些时候它们也可能需要等待请求完成。

在最常见的HDD情况下,只需添加几个应用程序以尝试访问分散在驱动器周围的文件,您就可以自己煮咖啡(茶)。使用SSD时,情况会变得更好,但即使是SSD-在SATA上以数百MB / s的吞吐量进行测量(与旋转板HDD的数十MB / s相比),寻道时间也可以忽略不计(相比之下,毫秒数)。旋转板)-可能会成为瓶颈。

据我了解,问题不仅在于数据传输本身,还在于必要的开销-I / O由内核控制,但是在没有用户空间的情况下很少发生。因此,可以有大量的上下文切换,仅从等待I / O的应用程序检查是否正在发生(当然,取决于实现)。在磁盘传输的情况下,很可能会有多个内核线程争用资源或忙于等待(有时是适当的策略)。请记住,例如,将数据从一个分区复制到另一个分区需要一个现代化的文件系统来:查找源数据在哪里,读取它,在目标文件系统上分配空间,写入元数据,写入数据,重复执行直到完成。

而且,如果您的系统在某个时候开始交换(通常具有比常规I / O更高的优先级),则灾难将最终确定。

编辑:在与一些Linux内核开发人员交谈之后,情况变得更加清晰了。主要问题是I / O调度程序,它对确定哪个I / O优先级没有太多的想法。因此,任何用户输入和随后的图形输出都会与磁盘/网络活动共享队列。结果,当它断定可以在其他I / O上更有效地使用页面缓存时,它可能会丢弃页面缓存(例如已加载的库)中缓存的过程数据。当然,这意味着一旦需要再次运行该代码,就必须再次将其提取-形成可能已经很重的磁盘。

就是说,就Linux内核而言,许多问题最近都已得到修复(已知问题),因此说4.4.x或4.5.x 应该表现得比以前更好,并且应该报告问题(通常是当有人希望通过错误报告和测试来提供帮助时,内核人员会很高兴)。


您能否详细说明一下,为什么在IO繁忙时整个系统会滞后?例如,我看不到Windows Manager和IO之间的任何连接-显然,WM不执行任何IO,那么为什么它会开始滞后(至少在不交换时)
Hi-Angel'3

WM实际上可以通过X服务器/ Wayland的合成(不是很多做了很多的I / O复制两个硬盘之间的四个数据流,但它并没有到完全可以忽略不计-这可能是原因之一awesome,似乎比kwin这种意义上的要好一些)。
彼得

但是,它执行哪种IO?仅仅是因为登录xsession-errors/ Xorg.ₙ.log吗?日志不只是在不中断WM工作的情况下被缓冲了吗?还要别的吗?UPD:我只是查看了/proc/AwesomePID/fd— WM打开的唯一文件是xsession-errors。其他的一切不是一个真正的文件-插座,/dev/null/proc/stat...
高新天使

1
但是,你说,WM其实是可以操作的方式从X服务器/ Wayland的合成大量的I / O。但是无论如何,为什么您认为它没有获得足够的CPU。发生这种情况时,CPU通常是非常免费的-我可以在面板上的CPU小部件中看到负载,而解压缩归档文件并不会花费很多。
Hi-Angel'3

1
@ Hi-Angel检查更新答案是否可以澄清一些问题。
彼得16-3-17

2

我的经验是,仅I / O活动不会降低系统速度。当其他任务也需要I / O时,就会发生这种情况。如果系统进行交换(强制执行),然后导致大量的I / O负载,则情况将变得非常糟糕。

您可以通过来影响I / O繁重任务的影响ionice。如果将它们放在idle优先位置,则其他任务的延迟可能仍会增加,但不会超过最小值。如果另一个(非空闲)任务需要执行I / O,则I / O任务会立即中断。如果使用的调度程序支持这些设置。

请参阅选择Linux I / O调度程序


1
我的经验正好相反:即我可能会开始解压缩一个大的存档文件-导致IO负载-并在此刻尝试切换到另一个“台式机”,我觉得切换很滞后。窗口管理器与IO有何关系?是的,我有一个可用的RAM,所以它没有被交换(即使我没有,WM在最后一轮也不会被交换吗?)。FWIW,我使用的是轻量级的Awesome WM,以前使用kwin的情况更糟。
Hi-Angel'3
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.