在我的测试Linux机器上创见 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 倍。
8.8G/s
对于我来说,期望正在执行的 SSD 具有 100% 的正常读取性能可能不太合理kb_dscd
...但由于块丢弃操作对时间的要求不是特别严格(因为我不太关心它是在 30 秒内完成还是持续 30 分钟),有什么方法可以减慢该过程,以便在执行过程中驱动器的读取性能不会受到太大影响?例如,如果 SSD 仅执行 500 M/s 的操作kb_dscd
,它(可能)会有更多的时间以接近其正常速率来处理其正常的读取 I/O 任务?
(动机:这是一个媒体流媒体盒,它最终将需要同时进行录制和播放,可能每周 7 天、每天 24 小时,如果我能够定期启动 TRIM 操作而不会显著影响盒子继续同时流式传输内容的能力,那就太好了。)
答案1
fstrim
接受-o
(offset) 和-l
(length) 选项。您可以使用它们来限制每次命令调用所修剪的 LBA 数量。