2025/03/09(日)FreeBSD UFS2 SU+J ファイル削除はあまり速くない

FreeBSD の UFS2 SU+J (Softupdate + softupdate journaling) でのファイル削除はあまり速くないようだ。
どうも、I/O よりも kernel VFS 内部でのロック処理あるいは journal 処理などで時間かかってそう。

積年の /var/db/freebsd-update/files ディレクトリのファイルを削除しようとしたら思ったより時間がかかった。

時間かかるので途中で止めて time で時間を計ってみたところ、殆どが sys に時間を取られている。
もしかすると find -delete よりも xargs のほうが速いかも…?

SSD なら fsck を我慢できるので softupdate journal は不要かもしれない。
削除コマンド
root@:/var/db/freebsd-update/files# find . -mtime +365 | wc -l
  468408
root@:/var/db/freebsd-update/files# find . -mtime -365 | wc -l
   62895
root@:/var/db/freebsd-update/files# find . -mtime +365 -delete

^C
root@:/var/db/freebsd-update/files# find . -mtime +365 | wc -l
  114599
root@:/var/db/freebsd-update/files# time find . -mtime +365 -delete

real    10m23.096s
user    0m0.362s
sys     10m21.413s
root@:/var/db/freebsd-update/files#
I/O
FreeBSD の dirty buffer の定期書き出し以外では Read/Write はほぼ無し。
root@:~# iostat ada4 1 | perl -pe 's/^/localtime() . " "/e'
Sun Mar  9 14:58:09 2025        tty            ada4             cpu
Sun Mar  9 14:58:09 2025  tin  tout KB/t  tps  MB/s  us ni sy in id
Sun Mar  9 14:58:09 2025    1    73 16.1   11   0.2   2  0  1  0 96
Sun Mar  9 14:58:10 2025    0   311  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:11 2025    0   173  4.0    2   0.0   1  0 50  0 49
Sun Mar  9 14:58:12 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:13 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:14 2025    0   173  4.0    2   0.0   1  0 50  0 50
Sun Mar  9 14:58:15 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:16 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:17 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:18 2025    0   173  4.0    2   0.0   1  0 50  0 50
Sun Mar  9 14:58:19 2025    0   287  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:20 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:21 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:22 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:23 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:24 2025    0   173 13.3    3   0.0   0  0 51  0 49
Sun Mar  9 14:58:25 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:26 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:27 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:28 2025    0   173  4.0    2   0.0   0  0 52  0 48
Sun Mar  9 14:58:29 2025        tty            ada4             cpu
Sun Mar  9 14:58:29 2025  tin  tout KB/t  tps  MB/s  us ni sy in id
Sun Mar  9 14:58:29 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:30 2025    0   311 10.0    4   0.0   0  0 50  0 49
Sun Mar  9 14:58:31 2025    0   173 30.8   48   1.4   0  0 50  0 49
Sun Mar  9 14:58:32 2025    0    69  3.0    3   0.0   0  0 56  0 44
Sun Mar  9 14:58:33 2025    0   173  4.0    4   0.0   0  0 51  0 49
Sun Mar  9 14:58:34 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:35 2025    0   173  4.0    2   0.0   0  0 51  0 48
Sun Mar  9 14:58:36 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:37 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:38 2025    0   173  4.0    2   0.0   1  0 50  0 49
Sun Mar  9 14:58:39 2025    0   173 27.7   13   0.4   0  0 50  0 50
Sun Mar  9 14:58:40 2025    0   173 13.8 7358  99.2   0  0 55  0 45
Sun Mar  9 14:58:41 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:42 2025    0   173  4.0    2   0.0   1  0 50  0 49
Sun Mar  9 14:58:43 2025    0   173  4.0    2   0.0   1  0 50  0 49
Sun Mar  9 14:58:44 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:45 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:46 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:47 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:48 2025    0   173  4.0    2   0.0   0  0 50  0 49
Sun Mar  9 14:58:49 2025        tty            ada4             cpu
Sun Mar  9 14:58:49 2025  tin  tout KB/t  tps  MB/s  us ni sy in id
Sun Mar  9 14:58:49 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:50 2025    0   311 18.0    4   0.1   0  0 50  0 50
Sun Mar  9 14:58:51 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:52 2025    0   173  4.0    2   0.0   0  0 50  0 49
Sun Mar  9 14:58:53 2025    0   375  4.0    2   0.0   0  0 51  0 48
Sun Mar  9 14:58:54 2025    0   173  4.0    2   0.0   1  0 50  0 49
Sun Mar  9 14:58:55 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:58:56 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:57 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:58:58 2025    0   173  4.0    2   0.0   0  0 50  0 49
Sun Mar  9 14:58:59 2025    0   173  4.0    2   0.0   0  0 50  0 49
Sun Mar  9 14:59:00 2025    0   173  4.0    2   0.0   0  0 52  0 48
Sun Mar  9 14:59:01 2025    0   173  4.0    2   0.0   0  0 50  0 49
Sun Mar  9 14:59:02 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:59:03 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:59:04 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:59:05 2025    0   173 13.3    6   0.1   0  0 50  0 50
Sun Mar  9 14:59:06 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:59:07 2025    0   173  4.0    2   0.0   0  0 50  0 50
Sun Mar  9 14:59:08 2025    0   173  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:59:09 2025        tty            ada4             cpu
Sun Mar  9 14:59:09 2025  tin  tout KB/t  tps  MB/s  us ni sy in id
Sun Mar  9 14:59:09 2025    1   175  4.0    2   0.0   0  0 51  0 49
Sun Mar  9 14:59:10 2025    0   311  4.0    2   0.0   0  0 50  0 49
Sun Mar  9 14:59:11 2025    1   228 27.5 3787 101.7   0  0 44  0 56
Sun Mar  9 14:59:12 2025    6   228 20.6 3455  69.6   0  0 23  0 76
Sun Mar  9 14:59:13 2025    9   269  0.0    0   0.0   0  0  2  1 98
Sun Mar  9 14:59:14 2025    0   173  0.0    0   0.0   0  0  0  0 99
Sun Mar  9 14:59:15 2025    1   184  0.0    0   0.0   2  0 11  0 87
tunefs
softupdate, soft update journaling, trim が on。
と言ってもそもそも dirty buffer 書き出しはすぐ終わっているので、古いSSDでも I/O スピードは間に合っている。
root@:/var/db/freebsd-update/files# tunefs -p /
tunefs: POSIX.1e ACLs: (-a)                                disabled
tunefs: NFSv4 ACLs: (-N)                                   disabled
tunefs: MAC multilabel: (-l)                               disabled
tunefs: soft updates: (-n)                                 enabled
tunefs: soft update journaling: (-j)                       enabled
tunefs: gjournal: (-J)                                     disabled
tunefs: trim: (-t)                                         enabled
tunefs: maximum blocks per file in a cylinder group: (-e)  4096
tunefs: average file size: (-f)                            16384
tunefs: average number of files in a directory: (-s)       64
tunefs: minimum percentage of free space: (-m)             2%
tunefs: space to hold for metadata blocks: (-k)            1600
tunefs: optimization preference: (-o)                      space
tunefs: volume label: (-L)
対象デバイス
root@:~# camcontrol identify ada4 | head -6
pass4: <SanDisk SD6SB1M064G1022I X230600> ATA8-ACS SATA 3.x device
pass4: 150.000MB/s transfers (SATA, UDMA6, PIO 512bytes)

protocol              ATA8-ACS SATA 3.x
device model          SanDisk SD6SB1M064G1022I
firmware revision     X230600
root@:~#
root@:~# mount | grep ssdroot
/dev/gpt/ssdroot on / (ufs, local, noatime, soft-updates, journaled soft-updates)
root@:~#
root@:~# glabel status | grep ssdroot
                               gpt/ssdroot     N/A  ada4p3
root@:~#

ちなみに開始前 /var/db/freebsd-update/files の状況

2014年からの freebsd-update の残りかすが溜まっていたようだ。

2014年は FreeBSD 10 くらいなので、それからずっと freebsd-update で更新してきたという事になる。
root@:/var/db/freebsd-update/files# find . -ls | less

4333839    88640 drwxr-xr-x    2 root  wheel  45338112  3月  8 18:11 .
4334257     1344 -rw-r--r--    1 root  wheel    642298 11月 19  2014 ./8417c2444df4aa495c9ee7e953b9e24ff91a552b512ad7041ced4724f6482e63.gz
4334258      104 -rw-r--r--    1 root  wheel     51255 11月 19  2014 ./e43dbfcf12eb2d71aa998cb17b4e67bd5a52f40482524049a19ceb400019b739.gz
4333840        8 -rw-r--r--    1 root  wheel      1578  8月 23  2014 ./8d9d85c2c6d24a47cadc45dc1074d5c09ac1bfbda719598e28e84c20c4e3ffaf.gz
4333841      160 -rw-r--r--    1 root  wheel     79103  8月 23  2014 ./a9cda8f4ae23244290ad6a939b8a4c4ac28a353e166645948b0aef5cb943eac3.gz
4333842       80 -rw-r--r--    1 root  wheel     37036  8月 23  2014 ./a449f23323e5fab78d05cbd2477a744a31cacc8274d658ce45ab77772c96545a.gz