Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133513
  • 博文数量: 38
  • 博客积分: 1277
  • 博客等级: 中尉
  • 技术积分: 450
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-11 23:24
文章分类

全部博文(38)

文章存档

2012年(2)

2011年(7)

2010年(24)

2009年(5)

分类: 服务器与存储

2009-10-12 01:22:54

iscsi几个关键字的协商与实现

1.ErrorRecoveryLevel
  错误恢复级别, 目前好像只有微软Initiator/Target能支持ERL=2级,其它的都是0,至少我没遇到过。
2.MaxConnections
  准确来说应该时单个Session内最大连接数, 也就是允许单个Session内部最大能建几个
  Connection(MC/s)
3.InitialR2T  是否允许非请求类数据(solicited)。No表求允许,Yes表示不允许。
  比如,当双方协商为No时,Initiator发写指令时,发完首个PDU后,可以接着再发DataOut;
  但如果为Yes时,就必须等Target的R2T,再接着发DataOut。但对于首个PDU来说,得跟ImmediateData结
  合起来进行控制,下面说明。
4.ImmediateData  是否允许Initiator携带立即数据。Yes时,允许Initiator发SCSI写指令,再带一小段
  数据做为立即数据。No时,Initiator SCSI指令PDU不允许携带数据。跟InitialR2T配合如下:
   +----------+-------------+------------------+--------------+
   |InitialR2T|ImmediateData|    Unsolicited   |Immediate Data|
   |          |             |   Data Out PDUs  |              |
   +----------+-------------+------------------+--------------+
   | No       | No          | Yes              | No           |
   +----------+-------------+------------------+--------------+
   | No       | Yes         | Yes              | Yes          |
   +----------+-------------+------------------+--------------+
   | Yes      | No          | No               | No           |
   +----------+-------------+------------------+--------------+
   | Yes      | Yes         | No               | Yes          |
   +----------+-------------+------------------+--------------+
   比如:
   ImmediateData=No, InitialR2T=Yes, 则Initiator发出SCSI Write PDU不得携带立即数
   据,发完首个PDU后,得等Target返回R2T,再根据R2T范围,发送写数据的DataOut.
   ImmediateData=Yes, InitialR2T=Yes, 则Initiator发出SCSI Write PDU可以携带立即数
   据,发完首个PDU后,得等Target返回R2T,再根据R2T范围,发送写数据的DataOut.
   ImmediateData=Yes, InitialR2T=No, 则Initiator发出SCSI Write PDU可以携带立即数
   据,发完首个PDU后,如果数据长度未达到FirstBurstLength上限值,可接着发DataOut,达到
   FirstBurstLength上限后,得等Target返回R2T,再根据R2T范围,发送写数据的DataOut.
   ImmediateData=No, InitialR2T=No, 则Initiator发出SCSI Write PDU不得携带立即数
   据,发完首个PDU后,可直接发送DataOut,如果数据长度未达到MaxBurstLength上限值,可接着发
   DataOut,达到
MaxBurstLength上限值以后,得等Target返回R2T,再根据R2T范围,发送写数据的
   DataOut.
5.MaxRecvDataSegmentLength
  PDU中数据段的数据最大长度。这个字段Initiator与Target相互独立,即协商时,各自表明自己能接收最大
  长度的PDU。发送PDU时,也按照这个长度进行数据分包发送。
6.FirstBurstLength
  非请求类数据的最大长度,结合上面例子看看
7.MaxBurstLength
  请求类数据的最大长度,这个值控制了Data-In以及Data-Out; Initiator的SCSI Read请求的所有
  Data-In数据长度不得超过该值,即Initiator每次SCSI_Read的长度不得超过该值;同时Target返回的
  R2T指定范围数据范围也不得超过该值,当然该R2T的所有Data-Out数据总长度也不能超过该值。
8.MaxOutstandingR2T
  每个任务可用R2T的上限值
 
  从上面这几个值,应该可以得出Initiator每次SCSI读写的最大长度来,但实际应用中,iSCSI是为OS中  的SCSI服务的,如果把上面几个协商值设得BT一点,就会看到iSCSI中的SCSI请求违返协商规定,或违背协商范围等。比如,Open-iscsi连接,格盘时,那几个SCSI_Write写长度都是1M的,还有MS nitiator超时MaxOutstandingR2T等等现象。
阅读(2298) | 评论(0) | 转发(1) |
0

上一篇:没有了

下一篇:pyTarget

给主人留下些什么吧!~~