我想知道为什么在将大量数据写入磁盘时系统变慢。
我认为,要使系统变慢,CPU应该有一些问题。但是写入仅受I / O约束。
写入数据时是否发生硬件中断?如果是这样,则可能是由于中断导致CPU始终进行上下文切换。
free
。
$PATH
如果您使用命令完成或犯了很多拼写错误,也请查看您的设置。浏览许多目录(尤其是具有许多目录条目的目录)可能会花费一些时间,这在资源匮乏时非常明显。
我想知道为什么在将大量数据写入磁盘时系统变慢。
我认为,要使系统变慢,CPU应该有一些问题。但是写入仅受I / O约束。
写入数据时是否发生硬件中断?如果是这样,则可能是由于中断导致CPU始终进行上下文切换。
free
。
$PATH
如果您使用命令完成或犯了很多拼写错误,也请查看您的设置。浏览许多目录(尤其是具有许多目录条目的目录)可能会花费一些时间,这在资源匮乏时非常明显。
Answers:
背后的核心原因是通常的: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 应该表现得比以前更好,并且应该报告问题(通常是当有人希望通过错误报告和测试来提供帮助时,内核人员会很高兴)。
awesome
,似乎比kwin
这种意义上的要好一些)。
xsession-errors
/ Xorg.ₙ.log
吗?日志不只是在不中断WM工作的情况下被缓冲了吗?还要别的吗?UPD:我只是查看了/proc/AwesomePID/fd
— WM打开的唯一文件是xsession-errors
。其他的一切不是一个真正的文件-插座,/dev/null
,/proc/stat
...
我的经验是,仅I / O活动不会降低系统速度。当其他任务也需要I / O时,就会发生这种情况。如果系统进行交换(强制执行),然后导致大量的I / O负载,则情况将变得非常糟糕。
您可以通过来影响I / O繁重任务的影响ionice
。如果将它们放在idle
优先位置,则其他任务的延迟可能仍会增加,但不会超过最小值。如果另一个(非空闲)任务需要执行I / O,则I / O任务会立即中断。如果使用的调度程序支持这些设置。