SSD 处理较大文件时速度变慢,正常吗?

SSD 处理较大文件时速度变慢,正常吗?

将大文件写入我的主 SSD 似乎很慢,我正在尝试找出原因。主板是 ASUS Maximus VIII Hero,我连接了两个 SSD:

  1. 三星 SSD 840 EVO 120GB --> sda
  2. 三星 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 上运行的两个虚拟机移至较大的磁盘,因为我经常进行备份和复制。

相关内容