网学网为需要硕士毕业论文的朋友们搜集整理了高性能iSCSI设计分析相关资料,希望对各位网友有所帮助!
引言
iSCSI是由Cisco和IBM共同发起的,并于2003年2月11日, 被IETF( Internet EngineeringTask Force, 互联网工程任务组) 通过的新的网络存储标准。它是一种在Internet协议网络上, 特别是在以太网上进行数据块传输的标准。是一个供硬件设备使用的可以在IP协议上层运行的SCSI指令集。简单地说, iSCSI 可以实现在IP 网络上运行SCSI 协议, 使其能够在诸如高速千兆以太网上进行路由选择。而整个过程在用户看来,使用远端的存储设备就像访问本地的SCSI 设备一样简单。iSCSI协议利用现有的TCP/IP 网络传输SCSI协议命令和数据,价格较低,传输距离也不受限制,但协议开销较大。主要是因为CPU在处理TCP/IP这层协议的开销较大,占用了较多的系统资源和CPU时钟。为此许多学者提出了很多改进措施,例如TOE(TCP/IP offload engine)技术,它使用硬件来承担TCP/IP等网络协议数据包处理的绝大部分工作,将主机CPU从繁重的网络协议处理工作中解放出来,同时也大大提高了处理的效率。采用具有TOE的网卡实现iSCSl协议,主机CPU和软件部分就只需要完成iSCSl协议数据单元的封装、解封装,下层的处理工作由网卡完成。但是对于处理大量的小数据块来说这种技术又会成为系统瓶颈。因此本文设计一种基于UDP数据传输的高性能iSCSI软件来提高数据的处理和传输率,即采用基于UDP的数据传输,数据的传输与命令、状态的传输分离来提高数据传输率,同时减轻了CUP处理繁琐的TCP数据包的负担。
1 基于 UDP 数据传输的iSCSI 模型
iSCSI 协议栈的传输层使用的是TCP,而TCP 协议在数据处理方面比较保守,在传输大量的数据时,势必占用过多的CUP 时钟。如果完全用UDP 代替,又达不到可靠的要求,本文结合TCP 与UDP 作为iSCSI 协议栈的并行传输层。其结构模型。TCP 主要是用来建立可靠的连接和传输读写命令及状态,保障命令被执行完,如果出错则要求重传命令。UDP 的作用是在iSCSI 进入全功能阶段后传输大量数据。并且iSCSI 层在数据方面设计了数据序号机制和错误恢复机制来加强数据的可靠传输。
1.1 iSCSI 数据序号机制
在iSCSI中一条命令的执行可能涉及到多个PDU,如数据(DATA)PDU和准备传输(R2T)PDU,iSCSI规定用一个DataSN参数来同步这些PDU。这个参数是基于命令范围内的,对于输入命令(iSCSI中方向是以客户端为参照物的),如读命令,目标器将数据分成多个DATA-INPDU,DataSN由0开始,从第一个DATA-IN PDU向后依次递增。一旦发现数据序号出错则要求重传所缺序号的数据才能给与确认和续传之后的数据。
对于写命令,客户端要将待输出的数据分成多个DATA-OUT PDU 传往目标器DataSN也是从每个R2T 的第一个DATA-OUT PDU 起以0 开始,以后每个DATA-OUT 递增1,这时的DATA PDU 是针对R2T 而言。
对于双向命令如读-写命令,则是采用上面的两种方向结合方式,这里不再举例。Data和R2T PDU 不像命令和状态都有一个明确的确认信息,在iSCSI 中DATA-OUT 和R2T 对端都不会给予任何确认信息,但对DATA-IN PDU 启动器可以通过一种叫(总是由目标器发出)SNACK 命令给予确认。通过DataSN 和R2TSN 以及SNACK(序列号确认)可以使启动器和目标器很容易的检测出丢失的数据PDU。
1.2 iSCSI 错误恢复机制
iSCSI的恢复模型规定了启动器端每个支持错误恢复的connection都必须实现下面的功能:
-使用NOP-OUT命令来获取目标器的序列机制息。
-能够进行命令重传。
-支持R2T的恢复。
-能够使用SNACK要求目标器重传状态、Data或R2T PDU。
-确认已接收的数据。
-重新分配命令忠贞。
-在session恢复时必须彻底终结老的session。
同样这个恢复模型也为目标器规定了一些必须实现的功能: