进行大量磁盘 I/O 时,Linux GUI 变得非常无响应 - 要调整什么?

Dav*_*fer 5 linux performance cache

我有一个/dev/mydisk基于一系列功能的设备:LUKS 加密的软件 RAID-1。

在此处输入图片说明

有时,我/dev/mydisk会将内容备份到外部 USB 磁盘,该磁盘本身使用 LUKS 加密。需要传输几个 100 GiB。这个操作不是简单的dd而是递归的cp(我还是需要改用rsync

备份开始一段时间后,整个系统的交互性急剧下降。KDE 接口显然在等待获得批准的内存请求而窒息而死。提示的等待时间为 2 分钟并不罕见。等待网络 I/O 同样需要很大的耐心。这与baloo启动并决定解压缩每个 zip 并为每个文件内容编制索引以用于未知目的时发生的行为类似:系统变成沼泽独木舟。

内核似乎将所有 RAM 提供给复制进程,并且不愿意将其交还给交互式进程一个机会。RAM 并不寒酸:23 GiB。还有 11 GiB 的交换空间,以防万一,但它随时都会被几个 MiB 占用。

是否可以确保交互式进程优先于复制进程获得它们的 RAM?如果是这样,如何?

版本信息:

  • 这是一个 Fedora 29 (4.19.15-300.fc29.x86_64) 系统,但我知道我在早期的 Fedora 系统中也有这个问题。
  • KDE 版本基于“KDE Frameworks: 5.53.0”。

更新

感谢大家到目前为止的答案!

一旦知道要搜索什么,就会发现一些东西。

我拖进来的东西:

为什么现在没有处理 I/O 调整的专家系统..?

sou*_*edi 1

nocache

我搜索了,虽然文档没有提到它,但nocache 应该可以正常工作 writes。虽然在复制小文件时它会运行得更慢,因为它需要 fdatasync()对每个文件进行调用。

(使用 Linux 特定的功能可以减少 大量fdatasync()/调用的影响。请参阅有关 IO 和缓存效果的相关答案中有关工作原理的注释“[1]”。但是,这需要更改为 defer ,并且这在某些情况下可能会产生不需要的副作用:-(.)fsync()dpkgnocacheclose()


另一种想法是在 cgroup 中运行复制过程,可能使用systemd-run,并设置内存消耗限制。cgroup 内存控制器控制缓存和进程内存。我找不到该systemd-run命令的一个很好的示例(也许有人会提供一个:-)。


归档时间:

查看次数:

981 次

最近记录:

6 年,6 月 前