PowerFlex 写入性能问题
Summary: 在执行网络维护后,某些 SDS 的写入性能现在较差。
Symptoms
场景
- 在对架顶式交换机 (TOR) 执行网络维护(通常是交换机重新启动)后,会出现此问题。
- SDS 节点对数据网络使用 LACP 绑定。
- 只有使用执行了维护的交换机的 SDS 节点才会受到影响。
- 对于某个存储池/PD,写入性能最高可达数百毫秒。
- 同一组SDS的读取性能正常。
- diag_counters.txt中的“NET_LONG_RCV_GRP_PROCESS”表示值快速攀升,而最后一次增量值保持低位。
示例:
Comp :: Counter :: Value :: ExtData :: Last Counted(Ms) NET :: NET_LONG_RCV_GRP_PROCESS :: 3756453 :: 0xffffffff :: 3120 NET :: NET_LONG_RCV_GRP_PROCESS :: 3825395 :: 0xffffffff :: 960 NET :: NET_LONG_RCV_GRP_PROCESS :: 3705906 :: 0xffffffff :: 1320 NET :: NET_LONG_RCV_GRP_PROCESS :: 4094919 :: 0xffffffff :: 1230 NET :: NET_LONG_RCV_GRP_PROCESS :: 3954725 :: 0xffffffff :: 1390 NET :: NET_LONG_RCV_GRP_PROCESS :: 3594178 :: 0xffffffff :: 420 NET :: NET_LONG_RCV_GRP_PROCESS :: 3702403 :: 0xffffffff :: 680 NET :: NET_LONG_RCV_GRP_PROCESS :: 3830299 :: 0xffffffff :: 510 NET :: NET_LONG_RCV_GRP_PROCESS :: 3491713 :: 0xffffffff :: 330 NET :: NET_LONG_RCV_GRP_PROCESS :: 4155343 :: 0xffffffff :: 690
在此示例中,第三列中的值很高(如果观看直播,则值会增加)。第五列显示上次遇到它的时间,对于大部分 SDS 来说,这一时间不到一秒。
在运行状况良好的 PowerFlex 系统中,第三列将不会计数,第五列将计数,因为上次遇到的时间会随着时间的推移而增加。
要实时观看计数器,可以运行以下命令:
#Set 受影响保护域中的 SDS 的变量。在此处输入正确的物理磁盘名称。
pd=<PD_NAME>
#Set 保护域中 SDS 数量的变量。按原样运行。
num=`scli --query_protection_domain --protection_domain_name $pd |grep Protection |awk '{print $16}'`
#login 以允许最后一个命令起作用。
scli --login --username admin
从每个 SDS 的“query_diag_counters”命令中 #Watch 正确的计数器。
watch -d -n 1 "for x in \$(scli --query_all_sds | grep -A $num $pd | grep ID | awk '{print \$5}'); do echo \$x; scli --query_diag_counters | grep -A30 \$x | grep -Em1 '\$x|NET_LONG_RCV_GRP_PROCESS'; done"
在一个健康的系统中,预计第五列会随着时间的推移定期计数,而第三列是静态的。如果第五列时间保持较低,并且第三列正在倒计时,则这是问题的症状。
冲击
客户端的写入性能较差。
Cause
上面跟踪的“NET_LONG_RCV_GRP_PROCESS”表示将 TCP 数据发送到远程 SDS 需要的时间超过 1 秒才能完成。
由于网络维护后初始 TCP 拥塞窗口较小,并且未在作系统中正确设置 OOO(无序)数据包参数,因此可能会发生此延迟。这会导致 SDS 到 SDS 套接字无法有效通信,从而导致多次 TCP 重新传输和缩短段大小。这会在写入时产生更高的延迟,因为这只会影响 SDS 到 SDS 插槽。
读取延迟不受影响,因为 SDC(客户端)为每个读取 IO 请求与单个 SDS 通信,并且不依赖于 SDS 到 SDS TCP 通信。
Resolution
要立即解决此问题,请在每个受影响的节点上重新启动 SDS 服务。重新启动 SDS 进程时使用维护模式。节点处于维护状态后,“pkill sds”就足够了。
要防止将来发生此问题,请执行以下作:
- 应用此公共知识库文章中讨论的 sysctl 设置:
Storage Data Server 节点可能不包含正确的系统调整参数,这可能会导致性能问题
- 如果使用 RHEL/CentOS 7,请将 SDS 节点上的作系统内核版本更新为“3.10.0-1160.66.1”或更高版本
受影响的版本
PowerFlex 3.x
已修复问题的版本
RCM 版本 3.6.3.2 或更高版本
IC 版本 38.363.02 或更高版本