What’s SSD TRIM and why use it?
最近我们的一个 Mongo cluster 总是在周末的时候有大量的 IO 操作,并严重影响了 Mongo 的性能。然后发现问题出现的时候总是会执行一个 cron job – fstrim:
$ cat /etc/crontab | grep weekly
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
$ cat /etc/cron.weekly/fstrim
!/bin/sh
trim all mounted file systems which support it
/sbin/fstrim --all || true
这是在 Ubuntu 16.04 上默认开启的(注意在 18.04 上变成了 systemd 来驱动,而不是 crontab),从 man 可以看到 fstrim 是用来清除文件系统上,特别是 SSD 不用的 block 的,并可以延长 SSD 的寿命。
通过 iostat 可以看到,fstrim 运行的时候,Mongo 的 IO write 数量增长了几千倍:
$ sudo iostat 3
Linux 4.4.0-1105-aws (mongo-03) 04/13/2020 _x86_64_ (64 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.27 0.00 0.58 0.18 0.00 95.97
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
xvda 0.00
...