背景:我们发现,在一个 25T 磁盘上创建许多小文件的系统上,文件分配性能非常慢。我们发现http://xfs.9218.n7.nabble.com/1B-files-slow-file-creation-only-AG0-used-td1606.html确实看起来好像所有文件都是在第一个 AG 中创建的。
for x in {0..38}; do echo -n "${x}: "; xfs_db -c "agi ${x}" -c "print" -r /dev/md1 | grep "^count"; done
0: count = 194711488
1: count = 0
2: count = 0
3: count = 0
4: count = 0
5: count = 0
6: count = 0
7: count = 0
8: count = 0
9: count = 0
10: count = 0
11: count = 0
12: count = 0
13: count = 0
14: count = 0
15: count = 0
16: count = 0
17: count = 0
18: count = 0
19: count = 0
20: count = 0
21: count = 0
22: count = 0
23: count = 0
24: count = 0
25: count = 0
26: count = 0
27: count = 0
28: count = 0
29: count = 0
30: count = 0
31: count = 0
32: count = 0
33: count = 0
34: count = 0
35: count = 0
36: count = 0
37: count = 0
38: count = 0
因此,我们使用 inode64 选项重新安装,希望它能够开始使用其他 AG 并提高性能。
性能确实似乎有所改善,但仍然不可靠,似乎有所变化。此外,重新运行上述命令,我仍然看到除第一个 AG 之外的所有 AG 的 count = 0。
更奇怪的是,看起来第一个 AG 之后的 AG 只有 5 个块。
# xfs_db -c "freesp -a 0" -c "print" -r /dev/md1
from to extents blocks pct
1 1 58586 58586 0.02
2 3 40188 95811 0.04
4 7 119478 504965 0.20
8 15 51112 490250 0.19
16 31 22071 456215 0.18
32 63 14025 634223 0.25
64 127 474758 54537529 21.43
128 255 28449 6001372 2.36
256 511 13115 5007894 1.97
512 1023 4764 3441878 1.35
1024 2047 1952 2783230 1.09
2048 4095 883 2536350 1.00
4096 8191 477 2742390 1.08
8192 16383 208 2330731 0.92
16384 32767 121 2719892 1.07
32768 65535 37 1518146 0.60
65536 131071 24 2023965 0.80
131072 262143 9 1595257 0.63
262144 524287 1 349393 0.14
1048576 2097151 1 1345705 0.53
134217728 268435328 1 163286552 64.17
no current type
# xfs_db -c "freesp -a 1" -c "print" -r /dev/md1
from to extents blocks pct
1 1 5 5 100.00
no current type
几乎没有块可以解释为什么那里没有分配任何块,但为什么这些块这么少?还是我误读了这些数据?(我不是 XFS 专家)
任何见解都将不胜感激。