I rebooted in safe mode and its been running about 25 minutes. The parity check speed ramped up to 9 MB/sec after a couple of minutes, then dropped down to 150KB/sec. After 10 minutes it settled into 3 MB/sec. Faster, but still much slower than expected.
CPU ave is at 0.9% but load is at 10.
A lot of googling told me CPU% != Load and these are the most likely culprits slowing things down. Don't know what these processes do though (other than nsfd) and how to optimize them.
root@t610:/proc# top -b -n 1 | awk '{if (NR <=7) print; else if ($8 == "D") {print; count++} } END {print "Total status D (I/O wait probably): "count}'
top - 13:58:57 up 1:53, 1 user, load average: 12.99, 12.73, 13.34
Tasks: 444 total, 1 running, 443 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 92.1 id, 6.5 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 32223.3 total, 18945.6 free, 2305.0 used, 10972.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 28300.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
709 root 20 0 0 0 0 D 0.0 0.0 0:00.94 kworker/11:1+xfs-cil/md2
2078 root 20 0 0 0 0 D 0.0 0.0 0:11.48 mdrecoveryd
2153 root 20 0 0 0 0 D 0.0 0.0 0:13.58 nfsd
2155 root 20 0 0 0 0 D 0.0 0.0 0:16.81 nfsd
2160 root 20 0 0 0 0 D 0.0 0.0 0:14.26 nfsd
14153 root 20 0 0 0 0 D 0.0 0.0 0:02.36 kworker/u34:2+flush-9:2
16072 root 20 0 0 0 0 D 0.0 0.0 0:00.25 kworker/11:2+xfs-sync/md2
18871 root 20 0 0 0 0 D 0.0 0.0 0:01.01 kworker/1:7+md
Total status D (I/O wait probably): 8
root@t610:/proc#