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 PD
U不得携带立即数
据,发完首个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等等现象。
阅读(1469) | 评论(0) | 转发(0) |