解决 Synology NAS ISCSI ATS可靠性问题

问题现象

深信服挂载NAS LUN作为后端存储时会发生数据块重用问题:

经深信服官方检查发现该问题可能是由于ATS不可靠引起:

感谢深信服官方提供的ATS测试脚本。
实际测试中发现当NAS I/O延迟较低时完全无法复现该异常。
后续通过FIO将I/O延迟提升至1500+后,才会频繁发生ATS操作无法保证原子性的情况。

测试环境

DS 1621+ x 1 ISCSI存储
Centos 9.4 x 2 增加读写压力
Centos 8.2 x 9 进行ATS可靠性测试

DS 1621+ 配置
DSM 7.2.2 update2
SAN Manager 1.0.11-0319
HDD 4T x 5 存储池
M.2. 380G x 2 SSD缓存

环境拓补图

异常现象

存储压力

LUN 压力

发生问题时,从Centos挂载端查看测试历史数据,会发现本应递增的数值出现了回退现象:

解决方法

目前研究发现该异常是由于lio模块的latency_control_cache功能引起。请尝试在业务压力较低时,通过以下方式手动关闭查看是否可以解决该问题。
如果已经发生数据块重用问题,还请联系深信服官方对存储的文件系统进行修复
注意: 重启NAS、重启ISCSI套件或重启ISCSI Target后该功能会自动开启,需要重新手动关闭

例如LUN的名字是 LUN-1,通过以下命令查询LUN uuid

cat /volume1/\@iSCSI/LUN/iscsi_lun.conf | grep name=LUN-1 -A 1

通过LUN uuid查看latency_control_cache是否有启用:

cat /sys/kernel/config/target/core/fileio_0/LUN_[LUN uuid]/attrib/latency_control_cache

e.g.
cat /sys/kernel/config/target/core/fileio_0/LUN_dea3e21b-29db-4be0-bcc2-263bef9ab9dd/attrib/latency_control_cache

通过以下命令关闭LUN-1的latency_control_cache功能,并检查是否有关闭成功:

echo 0 > /sys/kernel/config/target/core/fileio_0/LUN_[LUN uuid]/attrib/latency_control_cache

e.g.
echo 0 > /sys/kernel/config/target/core/fileio_0/LUN_dea3e21b-29db-4be0-bcc2-263bef9ab9dd/attrib/latency_control_cache

完整操作截图:

确认正常工作后可以建立该命令的开机任务计划,后续自动运行。

在控制面板 -> 任务计划 -> 新增触发的任务并选择用户定义的脚本

用户账户调整为 root 事件为 开机

在任务设置的运行脚本中填写调整latency_control_cache的指令并确定