我有 2 个文件系统,由相同的 15Tib 大小组成,它们都使用相同型号的 4 个 nvme ssd,使用基于 btrfs 的 raid0,并且将它们全部插入 pci 端口。
两个文件系统的占用率都在 50% 左右,包含的文件数量也差不多。两者都使用相同的选项进行格式化,并使用相同的挂载选项进行挂载nodatasum,commit=3600,discard,inode_cache,max_inline=4096,space_cache=v2,ssd,user_subvol_rm_allowed,noatime,compress=no
。
问题
- 当我在第一个文件系统上复制大型文件时,所有内容都缓存在内存中(最多 300Gib)。复制完成后,同步命令需要几个小时才能完成,但速度仍然可以接受。
- 从第二个文件系统复制的速度可达几 Gb/s。但是当我使用同一工具将大文件复制到第二个文件系统时,即使重新启动后,写入速度也非常慢:只有 20Mib/s。以这样的速度复制 TB 级的新数据需要一周的时间。
我不知道是什么原因导致速度比硬盘还慢。速度这么慢,肯定没有使用内核页面缓存,否则复制前 300Gib 需要几秒钟,而速度这么慢是从头开始的。
由于这似乎是一个软件问题而不是硬件问题,我在想如果不管底层文件系统的性能如何都使用内核页面缓存,那么实现的写入速度umount
会更加正常,从而避免底层问题。
关于如何使用直接 I/O 进行复制有很多文档,但我可以做相反的事情,即从不使用直接 I/O 进行复制? 我的意思是始终使用内核页面缓存?