iscsi的工作原理与优化(2)
2.1 iSCSI协议模型,iscsi【会话层协议,即应用协议】
iSCSI使用TCP/IP协议在不稳定网络上进行可靠的数据传输。iSCSI层和标准SCSI集在协议栈中的位置如图1所示。iSCSI层包括了已封装的SCSI命令、数据和状态。就是说若Initiator端的操作系统或应用程序需要进行数据写操作,SCSI的CDB(Command Description Block命令描述块)必须被封装以便能够在串行千兆位链接上传输到Target端。iSCSI属于端到端的会话层协议,它定义的是SCSI到TCP/IP的映射,即Initiator将SCSI指令和数据封装成iSCSI协议数据单元,向下提交给TCP层,最后封装成IP数据包在IP网络上传输,到达Target后通过解封装还原成SCSI指令和数据,再由存储控制器发送到指定的驱动器,从而实现SCSI命令和数据在IP网络上的透明传输。它整合了现有的存储协议SCSI和网络协议TCP/IP,实现了存储与TCP/IP网络的无缝融合。
iscsi的网络应用类型:
SAN网络:Storage Area Network 存储区域网络,多采用高速光纤通道,对速率、冗余性要求高。使用iscsi存储协议,块级传输。
NAS网络:Network Attachment Storage,网络附件存储,采用普通以太网,对速率、冗余无特别要求,使用NFS、CIFS共享协议,文件级传输。
SAN和NAS的区别:1.SAN一般特指存储网络的构建方式,NAS一般特指产品。
2.SAN有单独的存储网络,NAS使用现有网络
家庭网络存储设备:FREENAS,用的是FREEBSD系统
iscsi的优点能快速提高网络环境,能节约企业30-40%的成本主要包括;
硬件成本低:构建iSCSI存储网络,除了存储设备外,交换机、线缆、接口卡都是标准的以太网配件,价格相对来说比较低廉。
同时,iSCSI还可以在现有的网络上直接安装,并不需要更改企业的网络体系,这样可以最大程度地节约投入。
操作简单,维护方便:对iSCSI存储网络的管理,实际上就是对以太网设备的管理,只需花费少量的资金去培训iSCSI存储网络管理员。
当iSCSI存储网络出现故障时,问题定位及解决也会因为以太网的普及而变得容易。
扩充性强:对于已经构建的iSCSI存储网络来说,增加iSCSI存储设备和服务器都将变得简单且无需改变网络的体系结构。
带宽和性能:iSCSI存储网络的访问带宽依赖以太网带宽。随着千兆以太网的普及和万兆以太网的应用,iSCSI存储网络会达到甚至超过FC
(FiberChannel,光纤通道)存储网络的带宽和性能。
突破距离限制:iSCSI存储网络使用的是以太网,因而在服务器和存储设备的空间布局上的限制就会少了很多,甚至可以跨越地区和国家。
iSCSI 在安全方面相关设定,iSCSI 在安全管理方面有着不错优势,可以使用"主机"和"使用者"来完成允许或拒绝存取的设定。
安装完会默认生成底下列出例子为“只允许 172.16.7.120 这台 Initiator”并“拒绝全部”设定
iscsi的安全配置
/etc/initiators.allow 内容,最后一行允许 172.16.7.120(其他三行被#注解) # Some exmaples
#iqn.-.com.example:storage.disk1.sys1.xyz 192.168.22.2, 192.168.3.8
#iqn.-.com.example:storage.disk1.sys4.xyz [3ffe:::::43ff:fe31:5ae2], [3ffe:::::]/
iqn.-.com.example:storage.disk2.sys1.xyz 172.16.7.120 /etc/initiators.deny 内容,最后一行拒绝全部(其他四行被#注解) # Some exmaples
#iqn.-.com.example:storage.disk1.sys1.xyz ALL
#iqn.-.com.example:storage.disk1.sys2.xyz 192.168.12.2, 192.168.3.0/, 192.167.1.16/
#iqn.-.com.example:storage.disk1.sys4.xyz [3ffe:::::43ff:fe31:5ae2], [3ffe:::::]/
iqn.-.com.example:storage.disk2.sys1.xyz ALL
注意到 iqn 需与 /etc/ietd.conf 内的 iqn 相同。
iSCSI性能瓶颈
iSCSI协议建立在传统的TCP/IP协议之上,在进行实际数据传输时,其传输系统性能受限于TCP/IP协议栈负载及以太网最大带宽,另外iSCSI协议层也会额外增加一些负载开销,在实际应用中,iSCSI数据传输性能仍然存在瓶颈。以发送端的写操作为例,一次完整的iSCSI协议数据传输包括数据封装、数据拷贝、数据传输.
优化:
1.优化网络传输
iSCSI协议利用通用的TCP/IP协议进行海量存储数据传输,传统的TCP/IP协议用于在不可靠的数据链路上实现可靠的数据传输,其性能必然受限于TCP/IP本身的传输性能,基于通用TCP/IP协议的网络存储面临的一个很重要的性能问题就是TCP/IP协议栈开销。目前已经出现了一些新的网络技术用于改善TCP/IP协议栈开销。
1)有些新型网卡可以分担过去由主机CPU完成的CRC校验和计算功能,利用这些网卡,可进一步释放主机CPU资源,进而降低CPU利用率。
2)一些新型网卡可以实现过去由主机TCP/IP软件协议栈完成的TCP包拆分功能,这样也可缓解主机CPU的压力。
3) iSCSI SAN网络绝不能与一般的以太网用户混合。如果混合不仅会削弱SAN的性能,还会使LAN的存储数据受到影响。正确的做法是将iSCSI SAN网络与日常的用户网络分开。最常见的分离方法是采用虚拟局域网( VLAN),限制iSCSI网络通向虚拟局域网,保持正常的网络通道。
2.避免数据挎贝
iSCSI协议层建立在传统的TCP/IP协议层之上,其PDU数据包必须通过内存拷贝的方式传递给TCP/IP协议栈的缓冲区进行网络传输。而内存拷贝要进行内存读写操作各一次,内存数据拷贝又必须依赖于CPU执行指令来完成,因此会消耗CPU资源并降低内存性能,最终影响iSCSI系统性能。为了避免数据拷贝操作,目前主要的方法是采用TOE硬件方案:TOE方案是将过去由操作系统完成的TCP/IP协议栈直接转移到TOE网卡上由硬件实现。这个方案有效她避免了TCP/IP协议栈对系统CPU资源的占用,优化了iSCSI系统性能。TOE卡可以从一些供应商处获得,如Alacritech、LeWiz Communications、
QLogic等。
3.数据校验的优化
CRC校验数据的生成或检测均是计算密集型操作,会消耗大量的CPU资源,因此如何优化数据校验性能成为优化iSCSI性能的关键。目前常用的优化方案有下面几种。
(l) iSCSI HBA硬件方案
为了进一步消除CRC校验运算对系统CPU资源的影响,工业界将iSCSI协议及TCP/IP协议全部集成到网卡上构成iSCSI的HBA适配卡,这种方式中的iSCSI HBA适配卡对主机来说就是一块SCSI卡,既不存在数据拷贝问题,也不存在数据校验问题。采用硬件方案虽然能进一步释放CPU资源,但iSCSI HBA硬件处理能力有限制,无法分享CPU日益提升的性能。
(2)优化数据校验
通过优化CRC校验算法来加快校验过程也是提高iSCSI性能的一个途径。
iscsi的工作原理与优化(2)的更多相关文章
- MySQL/MariaDB数据库的索引工作原理和优化
MySQL/MariaDB数据库的索引工作原理和优化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际工作中索引这个技术是影响服务器性能一个非常重要的指标,因此我们得花时间去了 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- memcached工作原理与优化建议
申明,本文为转载文:http://my.oschina.net/liuxd/blog/63129 工作原理 基本概念:slab,page,chunk. slab,是一个逻辑概念.它是在启动memcac ...
- Nginx工作原理和优化、漏洞
1. Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HT ...
- Nginx 工作原理和优化、漏洞
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...
- Nginx工作原理和优化、漏洞(转)
查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...
- 【转载】Nginx 的工作原理 和优化
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locati ...
- Nginx工作原理和优化
转自:http://blog.csdn.net/hguisu/article/details/8930668 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过 ...
- ElasticSearch工作原理与优化
elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的,通过倒排索引的方式快速查询.比如一本书的目录是索引,然后快速找到每一章的的文本内容这种叫正向索引:而如果一件衣服 ...
随机推荐
- Python——Matplotlib库入门
1.Matplotlib库简介 优秀的可视化第三方库 Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发 matplotlib.pyplot是绘制各类可视化图形的命令子库,相当 ...
- 用c#求一元二次方程
题目:编一个程序,输入a .b.c 的值,求出一元二次方程a*x*x+b*x+c=0的二个实数根. 我的思路: 我们都知道数学中求一元二次方程有很多方法:直接开方法.配方法.公式法.分解因式法等等,在 ...
- 快速创建Flask Restful API项目
前言 Python必学的两大web框架之一Flask,俗称微框架.它只需要一个文件,几行代码就可以完成一个简单的http请求服务. 但是我们需要用flask来提供中型甚至大型web restful a ...
- 使用内部枚举类作为外部类的参数的Mybatis的参数该如何判断
新写了一个接口,期望根据不同的参数来给数据库中不同的字段进行传值.这里使用了内部静态枚举类的方式进行传值,在写mybatis动态sql时,如果是普通对象,一般使用,那么使用枚举类,如何判断枚举类的值呢 ...
- springboot项目启动-自动创建数据表
很多时候,我们部署一个项目的时候,需要创建大量的数据表.例如mysql,一般的方法就是通过source命令完成数据表的移植,如:source /root/test.sql.如果我们需要一个项目启动后, ...
- springBoot集成zuul路由forward,设置setSendZuulResponse无效
正确书写方式如下: RequestContext ctx = RequestContext.getCurrentContext(); ctx.setSendZuulResponse(false); c ...
- node.js 实现接口-操作文件进行用户增删改查
首先安装npm,使用npm安装express npm install express -S /* * @Author: yinxin * @Date: 2020-03-27 10:18:41 * @L ...
- 《Three.js 入门指南》3.0 - 代码构建的最基本结构。
3.0 代码构建的最基本结构 说明: 我们必需首先知道,Three.js 的一些入门级概念: 我们需要知道,OpenGL 是一套三维实现的标准,为什么说是标准,因为它是跨平台,跨语言的.甚至CAD以及 ...
- 深浅clone
原型模式 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式是基于深复制和浅复制的,在Java里面有2种复制: 浅复制将一个对象复制之后,生成一个新的对象,新对象的所有成员变量( ...
- MyBatis 学习笔记(1)
MyBatis 的基本构成 SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成 SqlSessionFactory(工厂接口) SqlSessionFactor ...