为什么 ext4 上的写入速度这么慢?

为什么 ext4 上的写入速度这么慢?

我正在尝试找出为什么写入我的服务器上的 ext4 分区如此慢。当我将异地备份驱动器从 ExFAT 重新格式化为 ext4 时,我注意到了这个问题。当这些驱动器格式化为 ExFAT 时,我看到写入速度约为 140-150MB/s。现在,使用 ext4 格式化的相同驱动器,我发现写入速度约为 40MB/s。

这两个驱动器是 4TB Western Digital Elements Portable (25A1) 驱动器,通过 USB 3 连接。

在运行任何基准测试之前,我已确保 ext4 惰性初始化已完成。

findmnt --target以下是其中一个驱动器的输出:

TARGET          SOURCE    FSTYPE OPTIONS
/mnt/off-site_2 /dev/sdd1 ext4   rw,nosuid,nodev,noexec,noatime

其他信息(为了方便起见,从评论中复制了一些信息):

  • 我正在将许多家庭大型(1GB-5GB)文件同步到这些驱动器。
  • 所有文件都小于可用内存量。
  • 该系统安装了 8GB RAM,通常使用的内存少于 512mb;其余的由缓存使用。
  • 将数据写入驱动器时,无论 FS 是 ExFAT 还是 ext4,该Dirty值都会浮动到 1.3GB 左右。/proc/meminfo
  • 内核是4.19.0-11-amd64我目前在 Debian 10 上可用的最新版本。
  • 驱动器型号为WDC WD40NMZW-11GX6S1。根据,这是一个SMR驱动器。
  • 输出dumpe2fs -h /dev/sdd1
root@Server:~# dumpe2fs -h /dev/sdd1
dumpe2fs 1.44.5 (15-Dec-2018)
Filesystem volume name:   Off-site 2
Last mounted on:          /mnt/off-site_2
Filesystem UUID:          d5f29945-6e3c-45d1-98bb-ac2dd404975a
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              244187136
Block count:              976745979
Reserved block count:     48837298
Free blocks:              83988236
Free inodes:              244182173
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Oct  5 15:47:31 2020
Last mount time:          Wed Oct  7 20:09:00 2020
Last write time:          Wed Oct  7 20:32:22 2020
Mount count:              6
Maximum mount count:      -1
Last checked:             Mon Oct  5 15:47:31 2020
Check interval:           0 (<none>)
Lifetime writes:          3433 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     32
Desired extra isize:      32
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      777766d4-df04-4c2c-b503-f7244bf87810
Journal backup:           inode blocks
Checksum type:            crc32c
Checksum:                 0xbf1db7ae
Journal features:         journal_incompat_revoke journal_64bit journal_checksum_v3
Journal size:             1024M
Journal length:           262144
Journal sequence:         0x00003fdd
Journal start:            0
Journal checksum type:    crc32c
Journal checksum:         0x2a21e235

我试图在这里演示这个问题:

# ExFAT drive
root@Server:/mnt/off-site_1/test# dd if=/dev/zero of=test.bin bs=1M count=5000 status=progress
5131730944 bytes (5.1 GB, 4.8 GiB) copied, 23 s, 223 MB/s
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 23.6661 s, 222 MB/s

# ext4 drive
root@Server:/mnt/off-site_2/test# dd if=/dev/zero of=test.bin bs=1M count=5000 status=progress
5173673984 bytes (5.2 GB, 4.8 GiB) copied, 44 s, 118 MB/s
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 58.9746 s, 88.9 MB/s

相关内容