![有没有办法减慢 SSD 修剪的速度,以便它在进行时不会影响驱动器的读取性能?](https://linux22.com/image/794720/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%87%8F%E6%85%A2%20SSD%20%E4%BF%AE%E5%89%AA%E7%9A%84%E9%80%9F%E5%BA%A6%EF%BC%8C%E4%BB%A5%E4%BE%BF%E5%AE%83%E5%9C%A8%E8%BF%9B%E8%A1%8C%E6%97%B6%E4%B8%8D%E4%BC%9A%E5%BD%B1%E5%93%8D%E9%A9%B1%E5%8A%A8%E5%99%A8%E7%9A%84%E8%AF%BB%E5%8F%96%E6%80%A7%E8%83%BD%EF%BC%9F.png)
在我的测试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 数量。