iSCSI


iSCSI(Internet Small Computer System Interface),Internet小型计算机系统接口,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,由IETF提出,并于2003年2月11日成为正式的标准。可以看出iSCSI是基于以太网的SCSI,SCSI的全称是Small Computer System Interface,也就是小型计算机系统接口。
iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换数据。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。
与传统的SCSI技术比较起来,iSCSI技术有以下三个革命性的变化:
把原来只用于本机的SCSI协义透过TCP/IP网络传送,使连接距离可作无限的地域延伸;
连接的服务器数量无限(原来的SCSI-3的上限是15);
由于是服务器架构,因此也可以实现在线扩容以至动态部署。
SCSI 结构基于客户端/服务器模式,其通常应用环境是:设备互相靠近,并且这些设备由 SCSI 总线连接。iSCSI 的主要功能是在 TCP/IP 网络上的主机系统(启动器 initiator)客户端和存储设备(目标器 target)服务器之间进行大量数据的封装和可靠传输过程。此外,iSCSI 提供了在 IP 网络封装 SCSI 命令,且运行在 TCP 上。
SCSI协议
SCSI最早发明于1982年,一路走来有多个不同的标准,比如SCSI-1,SCSI-2和SCSI-3等等。不同标准的速度不同,硬件的接口也不尽相同。如下图是不同的SCSI接口。

SCSI不仅仅是一种接口,更是一套完整的协议,它实现了计算机的主机与外围设备通信的协议。这样计算机主机就可以与这些外围设备交互数据了,其中比较典型的如与硬盘和光驱等交互数据。
ISCSI技术的核心是在TCP/IP网络上传输SCSI协议,是指用TCP/IP报文、和ISCSI报文封装SCSI报文,使得SCSI命令和数据可以在普通以太网络上进行传输,如下图:

iSCSI 协议定义了在 TCP/IP 网络发送、接收 block(数据块)级的存储数据的规则和方 法。发送端将SCSI命令和数据封装到 TCP/IP 包中再通过网络转发,接收端收到 TCP/IP 包之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到 TCP/IP 包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就象访问本地的 SCSI设备一样简单。
iSCSI利用了TCP/IP的port 860 和 3260(一般使用TCP端口860和3260)。作为沟通的渠道。透过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置。本质上,iSCSI 让两个主机通过 IP 网络相互协商然后交换 SCSI 命令。这样一来,iSCSI 就是用广域网仿真了一个常用的高性能本地存储总线,从而创建了一个存储局域网(SAN)。不像某些 SAN 协议,iSCSI 不需要专用的电缆;它可以在已有的交换和 IP 基础架构上运行。然而,如果不使用专用的网络或者子网( LAN 或者 VLAN ),iSCSI SAN 的部署性能可能会严重下降。于是iSCSI 常常被认为是光纤通道(Fiber Channel)的一个低成本替代方法,而光纤通道是需要专用的基础架构的。但是,基于以太网的光纤通道(FCoE)则不需要专用的基础架构。
使用iSCSI SAN 的目的通常有以下三个:
存储整合
公司希望将不同的存储资源从分散在网络上的服务器移动到统一的位置(常常是数据中心); 这可以让存储的分配变得更为有效。 SAN 环境中的服务器无需任何更改硬件或电缆连接就可以得到新分配的磁盘卷。
灾难恢复:公司希望把存储资源从一个数据中心镜像到另一个远程的数据中心上,后者在出现长时间停电的情况下可以用作热备份。特别是,iSCSI SAN 使我们只需要用最小的配置更改就可以在 WAN 上面迁移整个磁盘阵列,实质上就是,把存储变成了“可路由的”,就像普通的网络通信一样。
网络引导
对于配有支持网络引导的网络接口设备(网卡)的计算机,可以另外配置一台 DHCP 服务器来协助“iSCSI 启动”。 这种情况下,网卡会寻找一个提供 PXE 或 bootp 引导映像的 DHCP 服务器。该 DHCP 服务器会根据启动网卡的 MAC 地址 提供对应的 iSCSI 启动目标设备/卷信息,然后计算机便可以开始从 iSCSI 远程启动的进程了。
定制的 iSCSI 接口卡提供内置的 BIOS 功能,可以为该接口事先指定一个 iSCSI 目标设备,然后就可以直接从一个启动服务器进行启动,(而不需要另设一个DHCP 服务器), 从而减少网络配置的复杂度。
iSCSI 启动器(initiator)与 iSCSI 目标(target)之间的区别。
iSCSI 启动器。从本质上说,iSCSI 启动器是一个客户端设备,用于将请求连接并启动到服务器提供的某个服务。
iSCSI 启动器可以使用软件实现,也可以使用硬件实现。软件 iSCSI 启动器可用于大部分主要操作系统平台。通常使用免费的 Linux iscsi-sfnet 软件驱动程序,该程序位于作为 Linux-iSCSI 项目的一部分而开发的 iscsi-initiator-utils 中。iSCSI 软件启动器通常与标准网络接口卡 (NIC)(大多数情况下是千兆位以太网卡)配合使用。硬件启动器是一个 iSCSI HBA(或 TCP 卸载引擎 (TOE) 卡),它在本质上只是一个专用以太网卡,其上的 SCSI ASIC 可以从系统 CPU 内卸载所有工作(TCP 和 SCSI 命令)。iSCSI HBA 可以从许多供应商处购买,包括 Adaptec、Alacritech、Intel 和 QLogic。
在PC架构的iSCSI存储设备上,所有的RAID组校验、逻辑卷管理、iSCSI 运算、TCP/IP 运算等都是以纯软件方式实现,因此对PC的CPU和内存的性能要求较高。另外iSCSI存储设备的性能极容易收PC服务器运行状态的影响。
iSCSI 目标。iSCSI 目标是 iSCSI 网络的“服务器”组件。它通常是一个存储设备,用于包含您所需的信息并回应来自启动器(一个或多个)的请求,通常NAS服务器具有此种功能。
iSCSI协议
采用这种粗笨的线缆来传输数据并不方面,于是有了iSCSI。iSCSI基于以太网来传输SCSI指令,以太网的连接非常方便,自然设备的访问也变得方便了。以太网是如何承载SCSI指令的呢?其实原理很简单,就是将SCSI指令封装为数据包,然后通过TCP协议传输。如下图所示,所谓的iSCSI协议可以理解为一个应用层的协议,其内容为各种SCSI指令。

我们知道TCP协议是CS架构的,iSCSI协议自然也是CS架构的,iSCSI的整体架构如图所示。iSCSI通常是用来访问存储设备的,存储设备为服务端,而计算服务器为客户端。在iSCSI中有专有名词,客户端软件通常被称为initiator,也就是启动器;而服务端软件则被称为target,目标器。基于iSCSI协议,当主机连接到存储时,在主机就可以看到一个磁盘,该磁盘与本地磁盘没有任何差别。

这样,在主机端就可以基于该磁盘来格式化文件系统,并将数据放到磁盘上。当对磁盘进行读写等访问时,这时读写请求就会经过启动器转化为SCSI指令发送到服务端,服务端解析并处理后给启动器端返回应答。由于协议基于以太网,因此主机和存储之间可以通过交换机形成一个非常复杂的网络。那么主机对存储资源的访问也就变得非常灵活了。

基于RDMA的iSCSI
iSCSI协议已经非常好了,但是由于基于以太网协议需要在用户态和内核态拷贝内存,这不仅要占用CPU资源,还会导致IO延迟增大。为了进一步提升iSCSI的性能,于是有了基于RDMA的iSCSI,也就是iSER。
iSER的全称是iSCSI Extensions for RDMA,可以看出它是基于RDMA的iSCSI扩展协议。它主要还是利用RDMA技术,本质上还是封装的SCSI指令。如图所示,当在启动器端写数据时,数据直接从该端的内存发送到目标器端的CPU中进行除了,最终持久化到目标器的持久化存储中。也就是跳过了启动器端CPU的处理。

基于上述技术,使得启动器访问目标器的延时得到了大幅的降低,性能自然也会有相应的提高。
性能对比
具体性能是怎么样的看一下SNIA的测试数据。下面这个是IO响应延迟的数据,可以看到基于iSER的延迟大幅下降。

带宽方面,基于iSER则大幅增加。因此目前基于RDMA技术的iSCSI在性能方面有着非常明显的优势。

参考来源
iSCSI
Linux iSCSI
iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换数据。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。
与传统的SCSI技术比较起来,iSCSI技术有以下三个革命性的变化:
把原来只用于本机的SCSI协义透过TCP/IP网络传送,使连接距离可作无限的地域延伸;
连接的服务器数量无限(原来的SCSI-3的上限是15);
由于是服务器架构,因此也可以实现在线扩容以至动态部署。
SCSI 结构基于客户端/服务器模式,其通常应用环境是:设备互相靠近,并且这些设备由 SCSI 总线连接。iSCSI 的主要功能是在 TCP/IP 网络上的主机系统(启动器 initiator)客户端和存储设备(目标器 target)服务器之间进行大量数据的封装和可靠传输过程。此外,iSCSI 提供了在 IP 网络封装 SCSI 命令,且运行在 TCP 上。
SCSI协议
SCSI最早发明于1982年,一路走来有多个不同的标准,比如SCSI-1,SCSI-2和SCSI-3等等。不同标准的速度不同,硬件的接口也不尽相同。如下图是不同的SCSI接口。

SCSI不仅仅是一种接口,更是一套完整的协议,它实现了计算机的主机与外围设备通信的协议。这样计算机主机就可以与这些外围设备交互数据了,其中比较典型的如与硬盘和光驱等交互数据。
ISCSI技术的核心是在TCP/IP网络上传输SCSI协议,是指用TCP/IP报文、和ISCSI报文封装SCSI报文,使得SCSI命令和数据可以在普通以太网络上进行传输,如下图:

iSCSI 协议定义了在 TCP/IP 网络发送、接收 block(数据块)级的存储数据的规则和方 法。发送端将SCSI命令和数据封装到 TCP/IP 包中再通过网络转发,接收端收到 TCP/IP 包之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到 TCP/IP 包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就象访问本地的 SCSI设备一样简单。
iSCSI利用了TCP/IP的port 860 和 3260(一般使用TCP端口860和3260)。作为沟通的渠道。透过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置。本质上,iSCSI 让两个主机通过 IP 网络相互协商然后交换 SCSI 命令。这样一来,iSCSI 就是用广域网仿真了一个常用的高性能本地存储总线,从而创建了一个存储局域网(SAN)。不像某些 SAN 协议,iSCSI 不需要专用的电缆;它可以在已有的交换和 IP 基础架构上运行。然而,如果不使用专用的网络或者子网( LAN 或者 VLAN ),iSCSI SAN 的部署性能可能会严重下降。于是iSCSI 常常被认为是光纤通道(Fiber Channel)的一个低成本替代方法,而光纤通道是需要专用的基础架构的。但是,基于以太网的光纤通道(FCoE)则不需要专用的基础架构。
使用iSCSI SAN 的目的通常有以下三个:
存储整合
公司希望将不同的存储资源从分散在网络上的服务器移动到统一的位置(常常是数据中心); 这可以让存储的分配变得更为有效。 SAN 环境中的服务器无需任何更改硬件或电缆连接就可以得到新分配的磁盘卷。
灾难恢复:公司希望把存储资源从一个数据中心镜像到另一个远程的数据中心上,后者在出现长时间停电的情况下可以用作热备份。特别是,iSCSI SAN 使我们只需要用最小的配置更改就可以在 WAN 上面迁移整个磁盘阵列,实质上就是,把存储变成了“可路由的”,就像普通的网络通信一样。
网络引导
对于配有支持网络引导的网络接口设备(网卡)的计算机,可以另外配置一台 DHCP 服务器来协助“iSCSI 启动”。 这种情况下,网卡会寻找一个提供 PXE 或 bootp 引导映像的 DHCP 服务器。该 DHCP 服务器会根据启动网卡的 MAC 地址 提供对应的 iSCSI 启动目标设备/卷信息,然后计算机便可以开始从 iSCSI 远程启动的进程了。
定制的 iSCSI 接口卡提供内置的 BIOS 功能,可以为该接口事先指定一个 iSCSI 目标设备,然后就可以直接从一个启动服务器进行启动,(而不需要另设一个DHCP 服务器), 从而减少网络配置的复杂度。
iSCSI 启动器(initiator)与 iSCSI 目标(target)之间的区别。
iSCSI 启动器。从本质上说,iSCSI 启动器是一个客户端设备,用于将请求连接并启动到服务器提供的某个服务。
iSCSI 启动器可以使用软件实现,也可以使用硬件实现。软件 iSCSI 启动器可用于大部分主要操作系统平台。通常使用免费的 Linux iscsi-sfnet 软件驱动程序,该程序位于作为 Linux-iSCSI 项目的一部分而开发的 iscsi-initiator-utils 中。iSCSI 软件启动器通常与标准网络接口卡 (NIC)(大多数情况下是千兆位以太网卡)配合使用。硬件启动器是一个 iSCSI HBA(或 TCP 卸载引擎 (TOE) 卡),它在本质上只是一个专用以太网卡,其上的 SCSI ASIC 可以从系统 CPU 内卸载所有工作(TCP 和 SCSI 命令)。iSCSI HBA 可以从许多供应商处购买,包括 Adaptec、Alacritech、Intel 和 QLogic。
在PC架构的iSCSI存储设备上,所有的RAID组校验、逻辑卷管理、iSCSI 运算、TCP/IP 运算等都是以纯软件方式实现,因此对PC的CPU和内存的性能要求较高。另外iSCSI存储设备的性能极容易收PC服务器运行状态的影响。
iSCSI 目标。iSCSI 目标是 iSCSI 网络的“服务器”组件。它通常是一个存储设备,用于包含您所需的信息并回应来自启动器(一个或多个)的请求,通常NAS服务器具有此种功能。
iSCSI协议
采用这种粗笨的线缆来传输数据并不方面,于是有了iSCSI。iSCSI基于以太网来传输SCSI指令,以太网的连接非常方便,自然设备的访问也变得方便了。以太网是如何承载SCSI指令的呢?其实原理很简单,就是将SCSI指令封装为数据包,然后通过TCP协议传输。如下图所示,所谓的iSCSI协议可以理解为一个应用层的协议,其内容为各种SCSI指令。

我们知道TCP协议是CS架构的,iSCSI协议自然也是CS架构的,iSCSI的整体架构如图所示。iSCSI通常是用来访问存储设备的,存储设备为服务端,而计算服务器为客户端。在iSCSI中有专有名词,客户端软件通常被称为initiator,也就是启动器;而服务端软件则被称为target,目标器。基于iSCSI协议,当主机连接到存储时,在主机就可以看到一个磁盘,该磁盘与本地磁盘没有任何差别。

这样,在主机端就可以基于该磁盘来格式化文件系统,并将数据放到磁盘上。当对磁盘进行读写等访问时,这时读写请求就会经过启动器转化为SCSI指令发送到服务端,服务端解析并处理后给启动器端返回应答。由于协议基于以太网,因此主机和存储之间可以通过交换机形成一个非常复杂的网络。那么主机对存储资源的访问也就变得非常灵活了。

基于RDMA的iSCSI
iSCSI协议已经非常好了,但是由于基于以太网协议需要在用户态和内核态拷贝内存,这不仅要占用CPU资源,还会导致IO延迟增大。为了进一步提升iSCSI的性能,于是有了基于RDMA的iSCSI,也就是iSER。
iSER的全称是iSCSI Extensions for RDMA,可以看出它是基于RDMA的iSCSI扩展协议。它主要还是利用RDMA技术,本质上还是封装的SCSI指令。如图所示,当在启动器端写数据时,数据直接从该端的内存发送到目标器端的CPU中进行除了,最终持久化到目标器的持久化存储中。也就是跳过了启动器端CPU的处理。

基于上述技术,使得启动器访问目标器的延时得到了大幅的降低,性能自然也会有相应的提高。
性能对比
具体性能是怎么样的看一下SNIA的测试数据。下面这个是IO响应延迟的数据,可以看到基于iSER的延迟大幅下降。

带宽方面,基于iSER则大幅增加。因此目前基于RDMA技术的iSCSI在性能方面有着非常明显的优势。

参考来源
iSCSI
Linux iSCSI