随着时间的推移,inode 表急剧缩小,导致 rsync/inode 问题

Ber*_*han 12 linux xfs rsync

我们设置了一个 Linux(它在 Amazon AWS 上,一个类似 CentOS 的系统,尽管我们不确定在它上面完成的自定义)系统具有 4TB 存储作为 LVM 上的 XFS 卷(最终用于通过 NFS4 提供服务,但它是尚未使用),并且我们正在使用 rsync 将文件从我们的生产 NFS 服务器同步到 XFS 卷(即我们从 NFS 上的源 rsync 到本地安装的基于 XFS 的 LVM 卷)。但是我们观察到中间的某个时候rsync开始变得越来越迟钝(吞吐量急剧下降),并且平均负载和内存消耗都有很大程度的上升(CPU在iowait中的比例非常大)。最终我重新启动了 XFS 系统,系统显然恢复了正常,至少在过去的 24 小时内,rsync 性能更加正常。

我们检查了 munin 监控图并没有注意到任何明显的东西,但我们发现“inode table size”和“open inode”指标(检查了指向从 /proc/sys/ 读取的值的 munin 插件实现) fs/inode-nr)随着时间的推移不断减少。在我们观察到 rsync 卡住之前不久,我们观察到这两个指标都从几十万下降到了几千(我们的非 XFS 服务器大部分时间保持在大约 500k,并且在很长一段时间内没有表现出任何单调下降的趋势) ),我们从内核中观察到日志如下:

ip-XX-XXX-XXX-XXX 登录:[395850.680006] hrtimer:中断耗时 20000573 ns
9 月 18 日 17:19:58 ip-XX-XXX-XXX-XXX 内核:[395850.680006] hrtimer:中断耗时 20000573 ns
[400921.660046] 信息:任务 rsync:7919 被阻止超过 120 秒。
[400921.660066]“echo 0 > /proc/sys/kernel/hung_task_timeout_secs”禁用此消息。
[400921.660077] rsync D ffff880002fe4240 0 7919 7918 0x00000000
[400921.660093] ffff8800683e5638 0000000000000282 ffff880000000000 0000000000014240
[400921.660131] ffff8800683e5fd8 0000000000014240 ffff8800683e5fd8 ffff88000726da40
[400921.660153] 0000000000014240 0000000000014240 ffff8800683e5fd8 0000000000014240
[400921.660176] 呼叫跟踪:
[400921.660202] [] schedule_timeout+0x1fd/0x270
[400921.660220] [] ? pvclock_clocksource_read+0x58/0xd0
[400921.660234] [] ? __raw_callee_save_xen_irq_enable+0x11/0x26
[400921.660247] [] __down+0x76/0xc0
[400921.660262] []向下+0x3b/0x50
[400921.660274] [] ? _raw_spin_unlock_irqrestore+0x19/0x20
[400921.660314] [] xfs_buf_lock+0x2b/0x80 [xfs]
[400921.660338] [] _xfs_buf_find+0x139/0x230 [xfs]
[400921.660360] [] xfs_buf_get+0x5b/0x160 [xfs]
[400921.660378] [] xfs_buf_read+0x13/0xa0 [xfs]
[400921.660401] [] xfs_trans_read_buf+0x197/0x2c0 [xfs]
[400921.660422] [] xfs_read_agi+0x6f/0x100 [xfs]
[400921.660443] [] xfs_ialloc_read_agi+0x29/0x90 [xfs]
[400921.660467] [] xfs_ialloc_ag_select+0x12b/0x280 [xfs]
[400921.660485] [] xfs_dialloc+0x3c7/0x870 [xfs]
[400921.660500] [] ? pvclock_clocksource_read+0x58/0xd0
[400921.660509] [] ? __raw_callee_save_xen_restore_fl+0x11/0x1e
[400921.660531] [] xfs_ialloc+0x60/0x6a0 [xfs]
[400921.660550] [] ? xlog_grant_log_space+0x39c/0x3f0 [xfs]
[400921.660566] [] ? xen_spin_lock+0xa5/0x110
[400921.660583] [] xfs_dir_ialloc+0x7d/0x2d0 [xfs]
[400921.660606] [] ? xfs_log_reserve+0xe2/0xf0 [xfs]
[400921.660623] [] xfs_create+0x3f7/0x600 [xfs]
[400921.660638] [] ? __raw_callee_save_xen_restore_fl+0x11/0x1e
[400921.660655] [] xfs_vn_mknod+0xa2/0x1b0 [xfs]
[400921.660678] [] xfs_vn_create+0xb/0x10 [xfs]
[400921.660689] [] vfs_create+0xa7/0xd0
[400921.660701] [] do_last+0x529/0x650
[400921.660714] [] ? get_empty_filp+0x75/0x170
[400921.660728] [] do_filp_open+0x213/0x670
[400921.660744] [] ? xen_spin_lock+0xa5/0x110
[400921.660753] [] ? __raw_callee_save_xen_restore_fl+0x11/0x1e
[400921.660769] [] ? alloc_fd+0x102/0x150
[400921.660780] [] do_sys_open+0x64/0x130
[400921.660792] [] ? __raw_callee_save_xen_irq_disable+0x11/0x1e
[400921.660804] [] sys_open+0x1b/0x20
[400921.660815] [] system_call_fastpath+0x16/0x1b

我们还观察到发生这种情况时在源 NFS 上看到的“查找”操作急剧增加,这在我们开始遇到上述 rsync 问题之前保持稳定。

我们没有在基于 ext3 的生产卷上观察到类似的行为,事实上那些卷尺寸甚至更大。除了文件系统不同之外,文件服务器位于类似的机器类上,并且以类似的方式设置。由于我们发现刚刚 XFS 服务器上的 inode 表指标仍在下降趋势类似于我们之前的观察,即使我们昨天刚刚重新启动它,我担心同样的问题很快会再次困扰我们,并且可能会反映我们的设置、内核或其他方面的一些问题。

当我们遇到这种情况时,我们在 x86_64 架构机器上安装了 inode64 的 XFS 卷。现在我们已经将大约 1.3TB 的数据复制到容量约为 4TB 的 XFS 卷中,如果完全复制,我们应该在该卷中拥有大约 3TB 的数据。该卷是重新创建的,因此从一开始就在内部没有数据的情况下安装了 inode64,因此文件系统应该是干净的并且 inode 均匀分布。

关于可能是什么原因的任何见解?

(实际上我们从几个小时前开始再次看到这个!)

iva*_*eev 1

启用XFS 延迟日志记录delaylog挂载选项)可能会有所帮助(请参阅http://en.wikipedia.org/wiki/XFS#Disadvantages)。CentOS 因使用修补内核而闻名,因此可能需要升级内核。