searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

SPDK场景下一次慢IO的场景分析

2024-10-17 09:34:47
6
0

背景

再测试环境中遇到IO超过分钟级没回来的场景。通过日志分析为什么会有分钟级IO没有返回

分析定位

通过存储的日志发现,有批量的IO有超过秒级的返回
image.png

追查后发现,bdev层注册到spdk reactor的poller有长时间没有被调用
image.png

查看当前进程的线程运行的状态发现在该线程上的另一个poller一直在运行。
企业微信截图_1728359542745.png

查看spdk的代码代码如下
image.png

再处理zcopy特性的时候接收到内核的ERRQUEUE的时候,存在一个循环,如果没有跳出循环则死循环无法调度到下一个poller。通过gdb 发现在处理的这个serr的内存数据如下
企业微信截图_ae4f9800-1e5c-47fc-9ebc-0763f828a185.png

通过变量和代码分析出判断死循环无法退出。导致异常

后续修复

SPDK默认在编译环境如果支持zcopy的话是默认开启的,可以通过以下方式修复:
image.png

0条评论
作者已关闭评论
c****h
1文章数
0粉丝数
c****h
1 文章 | 0 粉丝
c****h
1文章数
0粉丝数
c****h
1 文章 | 0 粉丝
原创

SPDK场景下一次慢IO的场景分析

2024-10-17 09:34:47
6
0

背景

再测试环境中遇到IO超过分钟级没回来的场景。通过日志分析为什么会有分钟级IO没有返回

分析定位

通过存储的日志发现,有批量的IO有超过秒级的返回
image.png

追查后发现,bdev层注册到spdk reactor的poller有长时间没有被调用
image.png

查看当前进程的线程运行的状态发现在该线程上的另一个poller一直在运行。
企业微信截图_1728359542745.png

查看spdk的代码代码如下
image.png

再处理zcopy特性的时候接收到内核的ERRQUEUE的时候,存在一个循环,如果没有跳出循环则死循环无法调度到下一个poller。通过gdb 发现在处理的这个serr的内存数据如下
企业微信截图_ae4f9800-1e5c-47fc-9ebc-0763f828a185.png

通过变量和代码分析出判断死循环无法退出。导致异常

后续修复

SPDK默认在编译环境如果支持zcopy的话是默认开启的,可以通过以下方式修复:
image.png

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0