一种scsi与scsi子系统的实现方法

文档序号:7998961阅读:258来源:国知局
一种scsi与scsi子系统的实现方法
【专利摘要】本发明涉及一种SCSI与iSCSI子系统的实现方法,该子系统包括一先进先出的消息队列,用于存储进入所述子系统的、已被封装成消息的任务;该方法包括:SCSI与iSCSI子系统启动,首先处于初始化状态,然后执行系统初始化任务,生成连接磁盘阵列任务,连接磁盘阵列任务被封装成消息后提交到消息队列,进入待机状态;在待机状态下收到包含连接磁盘阵列任务的消息后,进入建立TCP连接状态,通过socket函数与磁盘阵列建立TCP连接,根据iSCSI标准生成discovery命令和login命令,并发送到磁盘阵列完成连接工作,进入待机状态;在待机状态下接收到以消息方式封装的任务后,转换到与任务相对应的状态,执行任务,任务执行完成后回到待机状态。
【专利说明】-种SCSI与SCSI子系统的实现方法

【技术领域】
[0001] 本发明涉及计算机网络技术,特别涉及一种SCSI与iSCSI子系统的实现方法。

【背景技术】
[0002] 随着计算机技术和网络技术的不断发展,传统处理器在功耗、并发、散热等方面暴 露出的问题日益严重,已经不能满足各类网络应用对处理器性能的迫切需求,因此具有较 低功耗、更高并发性能的网络处理器被更多地用于计算机网络应用中,计算机网络技术中 开始广泛地使用网络处理器来搭建各类高性能的网络应用。
[0003] 在各类网络视频应用中,磁盘阵列设备都是资源存储中心的核心组成部分,尤其 是iSCSI磁盘阵列以其使用简单、性能突出等特性得到更加广泛的应用,所以在基于多核 处理器为计算中心、基于iSCSI磁盘阵列为存储中心的新型视频类应用系统中,如何合理 地结合多核处理器和iSCSI磁盘阵列,并有效地提高系统的整体性能,是增强网络视频应 用系统服务质量的关键之一。对iSCSI磁盘阵列的访问需要根据SCSI子系统生产的SCSI 命令字,并通过iSCSI协议进行封装,最终通过TCP/IP协议栈实现iSCSI Host端和iSCSI Target端的高效数据交互,而操作系统上的SCSI子系统有多个组成部分,因此SCSI命令 执行流程冗余繁杂,会造成处理器处理资源的浪费,而处理器的实时执行环境执行效率较 高,但是没有操作系统中各种功能的支持,无法直接实现SCSI命令、iSCSI协议的处理和执 行,因此需要有效地整合多核处理器上Linux操作系统和实时执行环境的优势和特点,提 高SCSI命令的处理效率。


【发明内容】

[0004] 本发明的目的在于克服现有技术中SCSI命令执行流程冗余繁杂,会造成处理器 处理资源浪费的缺陷,从而提供一种处理过程简单、节约处理器资源的方法。
[0005] 为了实现上述目的,本发明提供了一种SCSI与iSCSI子系统的实现方法,该子系 统包括一先进先出的消息队列,所述消息队列用于存储进入所述子系统的、已被封装成消 息的任务,所述任务根据多核处理器的消息通讯机制被封装成消息;该方法包括:
[0006] 步骤1 )、所述SCSI与iSCSI子系统启动,该子系统首先处于初始化状态,然后执行 系统初始化任务,并生成连接磁盘阵列任务,所述连接磁盘阵列任务被封装成消息后提交 到所述消息队列,SCSI与iSCSI子系统进入待机状态;
[0007] 步骤2)、所述SCSI与iSCSI子系统在待机状态下收到包含连接磁盘阵列任务的消 息后,进入建立TCP连接状态,通过socket函数与磁盘阵列建立TCP连接,根据iSCSI标准 生成discovery命令和login命令,并发送到磁盘阵列完成连接工作,接着SCSI与iSCSI 子系统进入待机状态;
[0008] 步骤3)、所述SCSI与iSCSI子系统在待机状态下接收到以消息方式封装的任务 后,转换到与所述任务相对应的状态,执行所述任务,任务执行完成后回到所述待机状态。
[0009] 上述技术方案中,在所述的步骤3)中,所述任务包括磁盘阵列数据读取任务、磁盘 阵列数据写入任务、网络数据解析任务、错误处理任务;其中,
[0010] 与所述磁盘阵列数据读取任务相对应的状态为磁盘阵列数据读取状态,与所述磁 盘阵列数据写入任务相对应的状态为磁盘阵列数据写入状态,与所述网络数据解析任务相 对应的状态为网络数据解析状态,与所述错误处理任务相对应的状态为错误处理状态。
[0011] 上述技术方案中,当所述任务为磁盘阵列数据读取任务时,所述SCSI与iSCSI 子系统进入磁盘阵列数据读取状态,根据SCSI标准生成read命令,根据iSCSI标准封装 iSCSI rou,并通过socket函数发送rou,最后所述SCSI与iSCSI子系统进入待机状态。
[0012] 上述技术方案中,当所述任务为磁盘阵列数据写入任务时,所述SCSI与iSCSI子 系统进入磁盘阵列数据写入状态,根据SCSI标准生成write命令,根据iSCSI标准封装 iSCSI rou,并通过socket函数发送rou,最后所述SCSI与iSCSI子系统进入待机状态。
[0013] 上述技术方案中,当所述任务为网络数据解析任务时,所述SCSI与iSCSI子系 统进入网络数据解析状态,执行网络数据解析任务,根据iSCSI标准接卸iSCSI rou,根据 SCSI标准解析SCSI数据,如果为read回应,则处理磁盘阵列返回的数据,SCSI与iSCSI子 系统进入待机状态;如果为write回应,则判断write是否成功,成功,则SCSI与iSCSI子 系统进入待机状态,失败则生成错误处理消息;非read、write回应数据则直接丢弃,SCSI 与iSCSI子系统进入待机状态。
[0014] 上述技术方案中,当所述任务为错误处理任务时,所述SCSI与iSCSI子系统进入 错误处理状态,执行错误处理任务,记录磁盘阵列发生错误的位置,最后所述SCSI与iSCSI 子系统进入待机状态。
[0015] 本发明的优点在于:
[0016] 本发明提出了一种运行于多核网络处理器实时执行环境的SCSI与iSCSI子系统 实现方法,该方法基于有限状态机驱动SCSI与iSCSI子系统接收与处理上层应用提交的磁 盘阵列读写请求,并将请求封装为消息在状态机的不同状态之间转换,通过消息传递保证 SCSI/iSCSI子系统的无停滞运行,提高了 SCSI与iSCSI子系统访问磁盘阵列的实时性和并 发性。

【专利附图】

【附图说明】
[0017] 图1是本发明中SCSI与iSCSI子系统基于消息驱动运行的原理图。
[0018] 附图标识
[0019] 101磁盘阵列 102 SCSI与iSCSI子系统 103消息
[0020] 104任务 105 消息封装 106状态转换
[0021] 107初始化状态 108 任务执行操作 109系统初始化任务
[0022] 110新任务生成 111 连接磁盘阵列任务 112 数据
[0023] 113网络数据 114 上层应用 115磁盘阵列数据读取请求
[0024] 116数据 117 消息队列 118建立TCP连接状态
[0025] 119磁盘阵列数据读取状态120磁盘阵列数据写入状态121网络数据解析状态
[0026] 122错误处理状态 123 消息队列扫描 124待机状态
[0027] 125状态转换 126 网络数据解析任务 127接收数据
[0028] 128协议栈 129 错误处理任务 130 socket发送函数
[0029] 131 socket发送函数 132 数据写入结果 133磁盘阵列数据写入任务
[0030] 134磁盘阵列数据写入请求135 磁盘阵列数据读取任务136状态转换
[0031] 151状态转换 152 状态转换 153状态转换
[0032] 154状态转换 155 状态转换 156状态转换
[0033] 157状态转换 158 状态转换 159消息封装

【具体实施方式】
[0034] 现结合附图对本发明作进一步的描述。
[0035] 本发明中所述的SCSI与iSCSI子系统是从属于Linux操作系统的一个子系统, 该子系统对需要处理的任务进行抽象,并使用多核处理器的消息通讯机制将任务封装进消 息,通过消息驱动SCSI与iSCSI子系统进入相应的执行流程,实现SCSI与iSCSI子系统在 多核处理器上的实时、高效运行。
[0036] 下面结合图1对该子系统做进一步的详细说明。
[0037] 本发明的SCSI与iSCSI子系统包括一消息队列,进入子系统的任务根据多核处理 器的消息通讯机制被封装成消息,按照时序存储在该消息队列中,并依照在消息队列中的 次序依次予以处理。
[0038] 本发明的SCSI与iSCSI子系统在工作过程中要执行多种任务,每一种任务对应一 种特定的操作,具体的说,所述任务包括:系统初始化任务、连接磁盘阵列任务、磁盘阵列数 据读取任务、磁盘阵列数据写入任务、网络数据解析任务、错误处理任务。
[0039] 本发明的SCSI与iSCSI子系统运行于多个状态下,每个状态对应不同的执行流 程,消息进入SCSI与iSCSI子系统后在不同的状态间传递,驱动SCSI与iSCSI子系统在 不同状态间转换,从而完成消息中任务的处理。SCSI与iSCSI子系统所包含的状态具体包 括:初始化状态、建立TCP连接状态、磁盘阵列数据读取状态、磁盘阵列数据写入状态、网络 数据解析状态、错误处理状态和待机状态。
[0040] 下面对SCSI与iSCSI子系统的工作流程加以说明。
[0041] SCSI与iSCSI子系统启动时处于初始化状态,执行系统初始化任务,生成连接磁 盘阵列任务,该任务被封装成消息后提交到消息队列,SCSI与iSCSI子系统进入待机状态。
[0042] SCSI与iSCSI子系统在待机状态下收到包含连接磁盘阵列任务的消息后,进 入建立TCP连接状态,通过socket函数与磁盘阵列建立TCP连接,根据iSCSI标准生成 discovery命令和login命令,并发送到磁盘阵列完成连接工作,SCSI与iSCSI子系统进入 待机状态。
[0043] SCSI与iSCSI子系统在待机状态下收到上层应用提交的磁盘阵列数据读取任务 后,进入磁盘阵列数据读取状态,根据SCSI标准生成read命令,根据iSCSI标准封装iSCSI H)U,并通过socket函数发送H)U,SCSI与iSCSI子系统进入待机状态。
[0044] SCSI与iSCSI子系统在待机状态下收到上层应用提交的磁盘阵列数据写入任 务后,进入磁盘阵列数据写入状态,根据SCSI标准生成write命令,根据iSCSI标准封装 iSCSI rou,并通过socket函数发送rou,SCSI与iSCSI子系统进入待机状态。
[0045] SCSI与iSCSI子系统在待机状态下收到网络数据包后,进入网络数据解析状态, 执行网络数据解析任务,根据iSCSI标准接卸iSCSI rou,根据SCSI标准解析SCSI数据, 如果为read回应,则处理磁盘阵列返回的数据,SCSI与iSCSI子系统进入待机状态;如果 为write回应,则判断write是否成功,成功,则SCSI与iSCSI子系统进入待机状态,失败 则生成错误处理消息;非read、write回应数据则直接丢弃,SCSI与iSCSI子系统进入待机 状态。
[0046] SCSI与iSCSI子系统在待机状态下收错误处理消息后,进入错误处理状态,执行 错误处理任务,记录磁盘阵列发生错误的位置,SCSI与iSCSI子系统进入待机状态。
[0047] 下面结合一个实施例对本发明做进一步的说明。在一个实施例中,选用Cavium Networks公司的0CTE0N系列处理器平台。使用Cavium Networks公司提供的简单执行环 境SE (Simple Executive)作为本发明中SCSI与iSCSI子系统的运行环境。
[0048] SCSI与iSCSI子系统102对磁盘阵列101访问的流程如下:
[0049] SCSI与iSCSI子系统102启动时运行于初始化状态107,通过任务执行操作108 执行系统初始化任务109,完成系统环境的初始化工作。
[0050] SCSI与iSCSI子系统102在完成系统的初始化后,通过新任务生成110,生成连接 磁盘阵列任务111,并通过消息封装105,生成消息103,其中包含要处理的任务104,然后将 消息103提交到消息队列117的尾部,SCSI与iSCSI子系统102通过状态切换106进入待 机状态124。
[0051] SCSI与iSCSI子系统102在待机状态124下进行消息队列扫描123,由消息队列 117的头部读取消息103,如果消息队列117中为空,则继续扫描等待,直到消息队列117中 收到消息103 ;如果消息队列117中有消息103,则从消息队列117中获取消息103。
[0052] SCSI与iSCSI子系统102从消息103中解析出连接磁盘阵列任务111,通过状态 切换136进入建立TCP连接状态118,通过socket完成SCSI与iSCSI子系统102与磁盘阵 列101完成连接,SCSI与iSCSI子系统102再次通过状态转换151回到待机状态124。
[0053] 上层应用114向SCSI与iSCSI子系统102发起磁盘阵列数据读取请求115,由 SCSI与iSCSI子系统102生成磁盘阵列数据读取任务135,并通过消息封装105,生成消 息103,其中包含要处理的任务104,然后将消息103提交到消息队列117的尾部,SCSI与 iSCSI子系统102通过状态切换106进入待机状态124。
[0054] SCSI与iSCSI子系统102从消息103中解析出磁盘阵列数据读取任务135,通过 状态切换125进入磁盘阵列数据读取状态119,根据SCSI标准封装相应的SCSI命令字,并 根据iSCSI协议封装待发送的数据,通过socket发送函数131调用协议栈128向磁盘阵列 101发送封装了 SCSI命令的网络数据113。
[0055] 磁盘阵列101发送数据112给SCSI与iSCSI子系统102,协议栈128接收数据 127,生成网络数据解析任务126,并通过消息封装105,生成消息103,其中包含要处理的任 务104,然后将消息103提交到消息队列117的尾部,SCSI与iSCSI子系统102通过状态切 换152进入待机状态124。
[0056] SCSI与iSCSI子系统102从消息103中解析出网络数据解析任务126,通过状态 切换157进入网络数据解析状态121,如果数据为磁盘阵列101的回应数据,则执行磁盘阵 列数据读取任务135,将数据116返回给上层应用114;如果数据不是磁盘阵列的回应数据, SCSI与iSCSI子系统102将生成错误处理任务129,通过消息封装105,生成消息103,其中 包含要处理的任务104,然后将消息103提交到消息队列117的尾部,SCSI与iSCSI子系统 102通过状态切换154进入待机状态124。
[0057] SCSI与iSCSI子系统102从消息103中解析出错误处理任务129,通过状态切换 156进入错误处理状态122,丢弃收到的数据包,SCSI与iSCSI子系统102通过状态切换155 进入待机状态124。
[0058] 上层应用114向SCSI与iSCSI子系统102发起磁盘阵列数据写入请求134,由 SCSI与iSCSI子系统102生成磁盘阵列数据写入任务133,并通过消息封装159,生成消 息103,其中包含要处理的任务104,然后将消息103提交到消息队列117的尾部,SCSI与 iSCSI子系统102通过状态切换158进入磁盘阵列数据写入状态120,根据SCSI标准封装 相应的SCSI命令字,并根据iSCSI协议封装待发送的数据,通过socket发送函数130调用 协议栈128向磁盘阵列101发送封装了 SCSI命令的网络数据113。
[0059] 磁盘阵列101发送数据112给SCSI与iSCSI子系统102,协议栈128接收数据 127,生成网络数据解析任务126,并通过消息封装105,生成消息103,其中包含要处理的任 务104,然后将消息103提交到消息队列117的尾部,SCSI与iSCSI子系统102通过状态切 换153进入待机状态124。
[0060] SCSI与iSCSI子系统102从消息103中解析出网络数据解析任务126,通过状态 切换157进入网络数据解析状态121,如果数据为磁盘阵列101的回应数据,则执行磁盘阵 列数据读取任务135,将数据132返回给上层应用114;如果数据不是磁盘阵列的回应数据, SCSI与iSCSI子系统102将生成错误处理任务129,通过消息封装105,生成消息103,其中 包含要处理的任务104,然后将消息103提交到消息队列117的尾部,SCSI与iSCSI子系统 102通过状态切换154进入待机状态124。
[0061] SCSI与iSCSI子系统102从消息103中解析出错误处理任务129,通过状态切换 156进入错误处理状态122,丢弃收到的数据包,SCSI与iSCSI子系统102通过状态切换155 进入待机状态124。
[0062] 最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参 照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方 案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明 的权利要求范围当中。
【权利要求】
1. 一种SCSI与iSCSI子系统的实现方法,其特征在于,该子系统包括一先进先出的消 息队列,所述消息队列用于存储进入所述子系统的、已被封装成消息的任务,所述任务根据 多核处理器的消息通讯机制被封装成消息;该方法包括: 步骤1)、所述SCSI与iSCSI子系统启动,该子系统首先处于初始化状态,然后执行系统 初始化任务,并生成连接磁盘阵列任务,所述连接磁盘阵列任务被封装成消息后提交到所 述消息队列,SCSI与iSCSI子系统进入待机状态; 步骤2)、所述SCSI与iSCSI子系统在待机状态下收到包含连接磁盘阵列任务的消息 后,进入建立TCP连接状态,通过socket函数与磁盘阵列建立TCP连接,根据iSCSI标准生 成discovery命令和login命令,并发送到磁盘阵列完成连接工作,接着SCSI与iSCSI子 系统进入待机状态; 步骤3)、所述SCSI与iSCSI子系统在待机状态下接收到以消息方式封装的任务后,转 换到与所述任务相对应的状态,执行所述任务,任务执行完成后回到所述待机状态。
2. 根据权利要求1所述的SCSI与iSCSI子系统的实现方法,其特征在于,在所述的步 骤3)中,所述任务包括磁盘阵列数据读取任务、磁盘阵列数据写入任务、网络数据解析任 务、错误处理任务;其中, 与所述磁盘阵列数据读取任务相对应的状态为磁盘阵列数据读取状态,与所述磁盘阵 列数据写入任务相对应的状态为磁盘阵列数据写入状态,与所述网络数据解析任务相对应 的状态为网络数据解析状态,与所述错误处理任务相对应的状态为错误处理状态。
3. 根据权利要求2所述的SCSI与iSCSI子系统的实现方法,其特征在于,当所述任务 为磁盘阵列数据读取任务时,所述SCSI与iSCSI子系统进入磁盘阵列数据读取状态,根据 SCSI标准生成read命令,根据iSCSI标准封装iSCSI rou,并通过socket函数发送rou,最 后所述SCSI与iSCSI子系统进入待机状态。
4. 根据权利要求2所述的SCSI与iSCSI子系统的实现方法,其特征在于,当所述任务 为磁盘阵列数据写入任务时,所述SCSI与iSCSI子系统进入磁盘阵列数据写入状态,根据 SCSI标准生成write命令,根据iSCSI标准封装iSCSI rou,并通过socket函数发送rou, 最后所述SCSI与iSCSI子系统进入待机状态。
5. 根据权利要求2所述的SCSI与iSCSI子系统的实现方法,其特征在于,当所述任务 为网络数据解析任务时,所述SCSI与iSCSI子系统进入网络数据解析状态,执行网络数据 解析任务,根据iSCSI标准接卸iSCSI rou,根据SCSI标准解析SCSI数据,如果为read回 应,则处理磁盘阵列返回的数据,SCSI与iSCSI子系统进入待机状态;如果为write回应, 则判断write是否成功,成功则SCSI与iSCSI子系统进入待机状态,失败则生成错误处理 消息;非read、write回应数据则直接丢弃,SCSI与iSCSI子系统进入待机状态。
6. 根据权利要求2所述的SCSI与iSCSI子系统的实现方法,其特征在于,当所述任务 为错误处理任务时,所述SCSI与iSCSI子系统进入错误处理状态,执行错误处理任务,记录 磁盘阵列发生错误的位置,最后所述SCSI与iSCSI子系统进入待机状态。
【文档编号】H04L29/08GK104144171SQ201310161733
【公开日】2014年11月12日 申请日期:2013年5月6日 优先权日:2013年5月6日
【发明者】郭秀岩, 张武, 尚秋里, 查奇文 申请人:中国科学院声学研究所, 北京中科华影传媒技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1