LUKS 高传输速率随后是高 io 等待

LUKS 高传输速率随后是高 io 等待

我目前正在 Proxmox VE 上设置服务器。我希望所有驱动器都加密,因此我选择在所有磁盘上设置 luks,并在 luks 之上设置 LVM。

现在,当我使用 dd 将数据从快速驱动器 (SSD) 传输到较慢的驱动器 (HDD) 时,它会以几 GB/s 的速度非常快地启动。然后速度变慢。然后我注意到 IO 等待时间高达 10%,系统负载上升到 36。一些虚拟机受此影响并冻结。

进一步的监控显示,在高 IO 等待期间dmcrypt_write使用了 99% 的 IO。因此我安装了 Netdata 来获取一些图表,这些图表显示 HDD 的写入速度约为 120 到 150 MB/s。

一段时间后,kworkers 会因为耗时过长而被杀死。经过一番研究,我将和调整dirty_ratiodirty_background_ratio较低的值,这有所帮助,但速度却大幅降低。降至约 25 MB/s。这避免了严重的冻结,但仍会导致一些滞后。这也降低了 HDD 本身的写入速度。HDD 的写入速度不再是 150 MB/s,而是只有 50 MB/s。

说实话,我不知道更多。是否有我尚未发现的缓存类型?或者是否有办法将 Linux 中的写入速度限制为驱动器的写入速度?

我唯一的目标是将数据从 A 复制到 B,而不必手动限制速度,也不必担心虚拟机冻结。

系统信息:

中央处理器:2 个英特尔至强 E5-2650 v2
内存:128 GB DDR3 ECC
操作系统:Debian 10 手动安装了 Proxmox VE
核心: Linux 5.3.18-3-pve #1 SMP PVE 5.3.18-3 (Tue, 17 Mar 2020 16:33:19 +0100) x86_64 GNU/Linux

我让 dd 读取的 SSD 是两个东芝企业级 SAS-SSD,组成了 RAID 1。HDD 是一些 5400rpm 的 SATA HDD(所以...不是最快的)。它们也组成了 RAID 1。

RAID 由 DELL PERC H710 mini(嵌入式)管理。所有 RAID 都具有Adaptive Read Ahead读取策略和Write Through写入策略。

我还注意到一个奇怪的脏/写回图: 点击查看图片(新手保护)

答案1

问题是由于 和 太高dirty_ratio而引起的dirty_background_ratio。由于 RAM 相对较大,页面缓存也很大。如果页面缓存已满,系统会阻止 IO 并等待其刷新。这就是导致 IO 等待过高的原因。

将它们减少到更小的值(background_ratio 为 64 MB,dirty_ratio 为 4 GB)解决了我的问题。

相关内容