我目前正在 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_ratio
and调整dirty_background_ratio
为较低的值,这有助于但大大降低了速度。大约 25 MB/s。这防止了巨大的冻结,但仍然导致一些滞后。这也减慢了 HDD 本身的写入速度。HDD 不再以 150 MB/s 的速度写入,而现在只能以 50 MB/s 的速度写入。
老实说,我不知道更多。有没有我还没有找到的缓存?或者是否有办法将 Linux 中的写入速度限制为应有的驱动器写入速度?
我唯一的目标是将数据从 A 复制到 B,而不必手动限制速度,也不必担心虚拟机冻结。
系统信息:
CPU: 2x Intel Xeon E5-2650 v2
RAM: 128 GB DDR3 ECC
操作系统:手动安装 Proxmox VE
内核的 Debian 10: 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 是 RAID 1 中的两个东芝企业 SAS-SSD。HDD 是一些 5400rpm 的 SATA HDD(所以......不是最快的)。它们也在 RAID 1 中。
RAID 由 DELL PERC H710 mini(嵌入式)管理。所有 RAID 都具有Adaptive Read Ahead
读取策略和Write Through
写入策略。
我还注意到一个看起来很奇怪的 Dirty/ Writeback 图:点击查看图像(新手保护)