在我的测试 Linux 机器上安装了Transcend TS2TMTE662T2-G1 SSD。我在 1.8TB ext4 分区上创建了一个 100GB 的虚拟文件,然后我cat <bigdummy.bin >/dev/null
尽可能快地从该文件中顺序读取数据。
运行时cat
,我iostat -t nvme0n1p6 --human 1
在不同的 shell 窗口中运行以监视 SSD 的读取性能...它看起来相当不错,我每秒读取约 2.2 GB:
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
nvme0n1p6 18232.00 2.2G 0.0k 0.0k 2.2G 0.0k 0.0k
然后我rm
从分区中删除了大约 600GB 的(不相关的)文件,然后我跑去fstrim --all
告诉 SSD 开始擦除新丢弃的块。在进行修剪的同时,我iostat
再次查看了输出,以了解我的cat
进程的读取性能现在的表现如何:
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
nvme0n1p6 215.00 18.1M 0.0k 8.8G 18.1M 0.0k 8.8G
哎呀,一点也不好。读取带宽已降低至区区 18MB/秒,每秒事务数也同样降低了 100 倍。
对我来说,期望 SSD 能够获得 100% 的正常读取性能可能是不合理的,因为该 SSD 也在执行's8.8G/s
操作kb_dscd
,但由于块丢弃操作对时间要求不是特别严格(因为我不这样做)我不太关心它是在 30 秒内完成还是持续 30 分钟),有什么方法可以减慢该过程,以便我的驱动器的读取性能在该过程中不会受到如此严重的影响?例如,如果 SSD 仅执行 500 M/s 的kb_dscd
操作,它(也许)会有更多时间以接近其通常速率的速度处理其正常的读取 I/O 任务?
(动机:这是一个媒体流媒体盒,它最终会想要同时进行录制和播放,可能是 24/7,如果我可以定期启动 TRIM 操作,而不显着影响媒体盒继续流媒体内容的能力,那就太好了同一时间。)
fstrim
接受-o
(偏移)和-l
(长度)选项。您可以使用它们来限制每次命令调用的修剪 LBA 数量。