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

DPU上virtio_blk的复位恢复方法--讲解2

2024-11-04 09:32:43
8
0

三、模块介绍

     这里简单概述一下智能网卡DPU中有关virtio_blk复位及恢复的主要的组成部分和其模块之间的交互。

      在智能网卡DPU中,有关存储数据传输的模块,主要有FPGA芯片和SOC芯片,而FPGA中主要有pcie_tlp、virtio_blk、virtio_net_blk、csr等模块。本方案主要围绕存储数据无损传输而设定的。因此这里介绍一下这几个模块对存储数据的传输所起到的功能及其之间的连接配合。

pcie_tlp模块:主要功能就是连接host侧的pcie驱动和FPGA侧virtio等,对数据格式进行转换和传输,还包含中断映射等。

virtio_blk模块:存储数据的主要传输通道,将host侧的指令和数据通过virtio_blk模块解析后传输到后端去,同时也接收来自后端的反馈信息,传递给host。

virtio_net_blk模块:相当于是一个中转接口模块。主要功能就是将virtio_blk的数据上送到soc,然后将soc解析出来的TCP报文转发到光口。同时接收来自光口的TCP报文,送给soc解析后,然后将解析的信息再转发给virtio_blk模块。

index_ram模块:存在于virtio_blk模块内部,主要实时记录每个队列最新的指针,包括有效指针avail_index和已用指针used_index。并且此模块可以被soc控制读写,修改里面的指针信息等。这里需要说明一下,有效指针avail_index一般都是大于或者等于已用指针的used_index,从0开始递增,一直到65535数值后,就又从0开始循环。也就是在0到65535数值循环中,有效指针始终走在已用指针的前面或者与其相等。有效指针代表的是已经存放了有效存储数据的最新的指针位置,已用指针代表的是FPGA已经取走数据,完成传输,顺利将状态返回给host的已完成的指针位置。两个指针的差值空间,就是FPGA还没有处理完的数据部分。

csr模块:存放一些控制、统计和状态寄存器,主要功能就是对接host和soc侧的驱动,可以实现virtio_blk的初始化流程控制,此模块也是soc控制FPGA的重要转换通道,soc可以通过读写csr模块设定的一些寄存器,可以间接控制FPGA的工作和获取相关的信息等。

SFP模块:光口输出输入模块。

      以上就是这些主要模块的功能介绍。接下来需要说明一下,此方案使用的场景。

如何判断错误而采用纠错方案?

      这里主要为两种情况可以参考。

情况1:FPGA内部的virtio_blk模块出现异常阻塞,导致存储数据不能正常传输,出现此种情况,可能是本模块潜在的设计问题,也可能是前后端交互引起的问题等;

情况2:后端传输异常导致存储数据丢失或者发生错误,而引起host侧无法接收到后端返回的完成状态,同时也检测不到队列指针的更新,从而导致host侧驱动异常。

      这些情况出现时,都可以使用此技术方案来主动纠错,实现存储数据的无损传输。

 

复位恢复流程:

      经过上面的基础介绍后,我们已经知道大体的设计结构和实现目标,现在基于此框架,来详细阐述基于智能网卡的存储数据无损传输的纠错方法。

如下图所示,为存储数据无损传输纠错流程图,该流程讲述了怎样实现对存储数据的纠错,实现无损传输的效果。下面罗列一下实现步骤。

(1)运维监控virtio_blk是否异常,如果发生异常,有出现上面描述的两种错误情况之一,则需要人为介入,启动纠错功能。

(2)手动执行命令,控制socvirtio_blk启动复位操作,进行初始化实现纠错。

(3)执行完第2步后,系统会自动执行设定的脚本命令,控制soc读取host侧队列指针信息,并且将此信息写到index_ram模块中。

(4)执行完第3步后,系统会自动执行设定的脚本命令,控制socvirtio_blk发起重传指令。

(5)FPGA收到重传指令后,vrtio_blk会主动发起存储数据的重传操作,实现存储数据的无损传输。

      基于此流程,可以实现存储数据的无损传输。

0条评论
0 / 1000
l****n
9文章数
0粉丝数
l****n
9 文章 | 0 粉丝
原创

DPU上virtio_blk的复位恢复方法--讲解2

2024-11-04 09:32:43
8
0

三、模块介绍

     这里简单概述一下智能网卡DPU中有关virtio_blk复位及恢复的主要的组成部分和其模块之间的交互。

      在智能网卡DPU中,有关存储数据传输的模块,主要有FPGA芯片和SOC芯片,而FPGA中主要有pcie_tlp、virtio_blk、virtio_net_blk、csr等模块。本方案主要围绕存储数据无损传输而设定的。因此这里介绍一下这几个模块对存储数据的传输所起到的功能及其之间的连接配合。

pcie_tlp模块:主要功能就是连接host侧的pcie驱动和FPGA侧virtio等,对数据格式进行转换和传输,还包含中断映射等。

virtio_blk模块:存储数据的主要传输通道,将host侧的指令和数据通过virtio_blk模块解析后传输到后端去,同时也接收来自后端的反馈信息,传递给host。

virtio_net_blk模块:相当于是一个中转接口模块。主要功能就是将virtio_blk的数据上送到soc,然后将soc解析出来的TCP报文转发到光口。同时接收来自光口的TCP报文,送给soc解析后,然后将解析的信息再转发给virtio_blk模块。

index_ram模块:存在于virtio_blk模块内部,主要实时记录每个队列最新的指针,包括有效指针avail_index和已用指针used_index。并且此模块可以被soc控制读写,修改里面的指针信息等。这里需要说明一下,有效指针avail_index一般都是大于或者等于已用指针的used_index,从0开始递增,一直到65535数值后,就又从0开始循环。也就是在0到65535数值循环中,有效指针始终走在已用指针的前面或者与其相等。有效指针代表的是已经存放了有效存储数据的最新的指针位置,已用指针代表的是FPGA已经取走数据,完成传输,顺利将状态返回给host的已完成的指针位置。两个指针的差值空间,就是FPGA还没有处理完的数据部分。

csr模块:存放一些控制、统计和状态寄存器,主要功能就是对接host和soc侧的驱动,可以实现virtio_blk的初始化流程控制,此模块也是soc控制FPGA的重要转换通道,soc可以通过读写csr模块设定的一些寄存器,可以间接控制FPGA的工作和获取相关的信息等。

SFP模块:光口输出输入模块。

      以上就是这些主要模块的功能介绍。接下来需要说明一下,此方案使用的场景。

如何判断错误而采用纠错方案?

      这里主要为两种情况可以参考。

情况1:FPGA内部的virtio_blk模块出现异常阻塞,导致存储数据不能正常传输,出现此种情况,可能是本模块潜在的设计问题,也可能是前后端交互引起的问题等;

情况2:后端传输异常导致存储数据丢失或者发生错误,而引起host侧无法接收到后端返回的完成状态,同时也检测不到队列指针的更新,从而导致host侧驱动异常。

      这些情况出现时,都可以使用此技术方案来主动纠错,实现存储数据的无损传输。

 

复位恢复流程:

      经过上面的基础介绍后,我们已经知道大体的设计结构和实现目标,现在基于此框架,来详细阐述基于智能网卡的存储数据无损传输的纠错方法。

如下图所示,为存储数据无损传输纠错流程图,该流程讲述了怎样实现对存储数据的纠错,实现无损传输的效果。下面罗列一下实现步骤。

(1)运维监控virtio_blk是否异常,如果发生异常,有出现上面描述的两种错误情况之一,则需要人为介入,启动纠错功能。

(2)手动执行命令,控制socvirtio_blk启动复位操作,进行初始化实现纠错。

(3)执行完第2步后,系统会自动执行设定的脚本命令,控制soc读取host侧队列指针信息,并且将此信息写到index_ram模块中。

(4)执行完第3步后,系统会自动执行设定的脚本命令,控制socvirtio_blk发起重传指令。

(5)FPGA收到重传指令后,vrtio_blk会主动发起存储数据的重传操作,实现存储数据的无损传输。

      基于此流程,可以实现存储数据的无损传输。

文章来自个人专栏
紫金DPU存储卸载硬件实现有关技术探讨
9 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0