将大文件写入我的主 SSD 似乎很慢,我正在尝试找出原因。主板是 ASUS Maximus VIII Hero,我连接了两个 SSD:
- 三星 SSD 840 EVO 120GB --> sda
- 三星 SSD 840 EVO 500 GB --> sdb
这是 fdisk -l 输出
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A3DB9022-5AE0-4BF4-BCA0-E0DAF7BB2106
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 167569407 166518784 79.4G Linux filesystem
/dev/sda3 167569408 234440703 66871296 31.9G Linux swap
Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
因此,120GB 是我的系统磁盘,500GB 是辅助磁盘。如果我使用 dd 写入 SSD,则会得到以下结果:
sda:
~$ dd if=/dev/zero of=/tmp/dd_performance bs=1G count=1 oflag=direct
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.1183 s, 507 MB/s
~$ dd if=/dev/zero of=/tmp/dd_performance bs=1G count=10 oflag=direct
10737418240 bytes (11 GB, 10 GiB) copied, 296.29 s, 36.2 MB/s
数据库:
~$ dd if=/dev/zero of=/mnt/temp_data/dd_performance bs=1G count=1 oflag=direct
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.13052 s, 504 MB/s
~$ dd if=/dev/zero of=/mnt/temp_data/dd_performance bs=1G count=10 oflag=direct
10737418240 bytes (11 GB, 10 GiB) copied, 21.1424 s, 508 MB/s
因此,对于 1GB 的文件,我得到的结果非常相似。但将 10GB 文件写入 sda 的速度非常慢。
我发现类似问题但我认为 oflag=direct 应该跳过所有缓存并直接写入。在执行过程中,我有 25GB 的可用内存。
我想到的唯一解释是,sda 包含更多文件(系统磁盘),SSD 可能需要比 sdb 做更多工作才能容纳 10GB 文件。这种行为正常吗?我是否可以执行更好的测试?
答案1
感谢 Daniel Bs 的评论,我确信这种行为是正常的。
解决方案
这两个磁盘的 TurboWrites 有很大不同,写入大文件时会出现下降。对于较小的磁盘,下降发生得更快,而且幅度更大。此外,我使用的块大小 (1G) 不是测试的最佳选择。使用更合理的 1M 可以获得更好的结果。
结论
我仍将使用较小的磁盘进行系统分区,因为它们有许多小文件,而且运行速度很快。但我会将我在此 SSD 上运行的两个虚拟机移至较大的磁盘,因为我经常进行备份和复制。