三.SCSI協(xié)議在SNIA共享存儲模型中,SCSI負責從上層接收請求并轉發(fā),或者從并行設備獲取數據并轉發(fā)。
本文引用地址:http://www.ex-cimer.com/article/201612/330386.htm例如:有一個應用程序向操作系統(tǒng)發(fā)出對磁盤設備的寫請求。在SCSI協(xié)議層,這個寫請求被看成是特定數量的數據塊以協(xié)議的形式傳遞到指定位置的命令。作為操作系統(tǒng)和存儲設備之間的一個中介,SCSI協(xié)議既不規(guī)定數據塊如何組織,也不規(guī)定怎樣把數據塊放到磁盤上。在SCSI把數據塊發(fā)送到目的地時,目標方可能是單個物理磁盤,也可能是把數據塊在多個物理盤上分條存放的RAID控制器。SCSI協(xié)議的責任,就是在確認寫操作已經正確完成后向操作系統(tǒng)報告成功,而不管在磁盤上物理存儲是如何配置以及寫操作是如何執(zhí)行的。
3.1SCSI域
SCSI設備是在一定的環(huán)境中運行的。通常需要有多個SCSI設備才能形成這樣的環(huán)境。SCSI設備間的運行環(huán)境也稱為SCSI域。在這個域內,生成和發(fā)送SCSI命令和任務管理請求的SCSI端口稱為SCSI發(fā)起方,接收和處理SCSI命令,根據請求執(zhí)行任務管理的端口稱為SCSI目標方。
SCSI域的組成包括SCSI設備,設備內的SCSI發(fā)起方和目標方以及提供數據交接的總線。SCSI總線連接了掛在它上面的所有SCSI設備。我們可以把一個實際的SCSI應用系統(tǒng)抽象為一個SCSI域,域中有多個SCSI設備,而且?guī)CSI驅動器的計算機也可以被看成是一個SCSI設備。
盡管可以允許有多個SCSI設備接在同一條總線上,SCSI協(xié)議實際定義的是設備間一對一的數據交換,即同一時刻在SCSI總線上只允許有兩個設備互相交換數據。因為,SCSI上的各個設備是以分時共享的方式使用總線的。
在一個實際的SCSI域中,必須至少有一個發(fā)起方和1個目標方,考慮到主機對數據存儲的需求,配置了SCSI控制器的主機至少有1個SCSI發(fā)起方。而磁盤設備主要是提供存儲和數據服務,一般都有目標發(fā)。
3.2SCSI協(xié)議模型
為了便于實現和理解SCSI的各個協(xié)議,SCSI采取了分層結構。SCSI大致可分為三層,即SCSI應用層,SCSI傳輸層和SCSI互連層。SCSI中的各個具體協(xié)議一般都位于其中的某一層,可以可能跨越兩層。
在應用層,SCSI體系結構把發(fā)起方(主機)和目標方(如磁盤)的通信定義為客戶/服務器交換。SCSI客戶位于主機中,代表上層應用程序,文件系統(tǒng)和操作系統(tǒng)I/O請求。SCSI設備服務器位于目標設備中,對請求做出響應。客戶/服務器請求和響應通過某種形式的底層協(xié)議進行傳輸。
在傳輸協(xié)議層,SCSI設備之間通過一系列的命令實現數據的傳送,大致分成三個階段:命令的執(zhí)行,數據的傳送和命令的確認。
SCSI互聯(lián)層完成SCSI設備對總線的連接以及發(fā)送方和目標方的選擇等功能。
3.3尋址機制
為了對連接在總線上的設備尋址,SCSI協(xié)議引入了SCSI設備ID和邏輯單元號LUN.在SCSI總線上的每個設備都必須有一個唯一的ID,其中包括服務器中的主機總線適配器也擁有設備ID.取決域SCSI標準的版本,每條總線最多可允許有8個或者16個設備ID。
諸如RAID磁盤子系統(tǒng)和磁帶庫這樣的存儲設備可能包括若干個子設備,如虛擬磁盤,磁帶驅動器和介質更換器等。因此SCSI引入了邏輯單元號,以便于對大的設備中的子設備進行尋址。另外一個服務器可能配置了多個SCSI控制器,從而就可能有多條SCSI總線。因此,操作系統(tǒng)用一個三元描述標識一個SCSI目標:總線/目標設備/邏輯單元號
傳統(tǒng)的SCSI適配卡連接單個總線,相應的只具有一個總線號。在引入存儲網絡之后,每個光纖通道HBA(Host Bus Adapter)或iSCSI(Internet SCSI)網卡也都連接一條總線,分配一個總線號,在他們之間依靠不同的總線號加以區(qū)分。
目標設備標識在一條總線菊花鏈上的單個設備,邏輯單元號則表示一個目標設備中的一個子設備。通常,單個物理磁盤只具有一個邏輯單元號,而RAID磁盤陣列雖然也只有一個目標設備,但卻有多個邏輯單元號。
在一條總線上各個設備具有不同的優(yōu)先級。起初的SCSI協(xié)議只允許有8個目標設備ID,規(guī)定ID7具有最高權限。后來版本的SCSI協(xié)議允許有16個不同的目標設備ID。出于兼容性的考慮,從7到0的目標設備依然具有高優(yōu)先級,而從15到8的設備ID具有較低優(yōu)先級。
設備(服務器和存儲設備)在可以通過SCSI總線發(fā)送數據之前必須預定總線(仲裁)。在總線的仲裁期間,具有最高優(yōu)先權的目標設備總能獲勝。在總線負載重的情況下,這可能導致具有較低優(yōu)先級的設備總是不被允許發(fā)送數據,因此,SCSI的仲裁過程是不平等的。
出于配置和管理的需要,操作系統(tǒng)使用總線號/目標設備ID/邏輯單元號三元組來標識一個SCSI目標,然而用戶和應用程序所看到的只是一個邏輯標識符,如D盤。因此在總線號/目標設備ID/邏輯單元號和邏輯盤符之間存在著一個映射,提供在物理設備和上層文件系統(tǒng)之間不同表示形式的轉換。
3.4交互方式
SCSI協(xié)議把發(fā)起方(主機)和目標方(例如磁盤)之間的交互定義為客戶/服務器方式。應用客戶位于主機中,代表上層應用程序、文件系統(tǒng)和操作系統(tǒng)的I/0請求。設備服務器位于目標設備中,它響應客戶的請求。請求和響應通過某種形式的下層分布設施進行傳輸,該分布設施稱作分布子系統(tǒng),可以是并行電纜,也可以是光纖通道協(xié)議或iSCSI。
一個發(fā)起方可能會有多個請求同時發(fā)給目標方。多個請求產生應用客戶的多個實例,從而在設備服務器上產生多個事務。
發(fā)起方在其發(fā)往一個或多個目標的多個請求正在被相關的設備服務器處理的時候,需要能夠執(zhí)行上下文交換(ContextSwitching),即具有從一個任務快速切換到另一個任務的能力。例如,作為一個發(fā)起方的文件服務器可以向一個目標方發(fā)送一個寫請求。‘當該文件服務器在等待這個目標方準備好緩沖區(qū)以接收數據的那段時間內,可以切換到另一個掛起的任務,例如處理已經到達的對先前的另一個請求的響應,從而提高運行效率,最大化吞吐量。如果SCSI任務只能依次串行地執(zhí)行,那么等待每個寫或讀請求完成的時間就都被白白地浪費了。一般來說,上下文交換是由主機適配卡完成的,可以是并行SCSI,也可以是光纖通道或iSCSI。
由于SCSI體系結構模型是層次化的,因此它對主機I/0請求的處理可以獨立于底層的分發(fā)子系統(tǒng)。一個應用客戶主機可以處理涉及不同種類的目標設備的I/0操作,例如一個應用服務器可以有直接附接的SCSI目標方,也可以有通過千兆位速率接口連接的串行SCSI目標方。
在SCSI發(fā)起方和目標方之間讀寫數據是通過SCSI命令、分發(fā)請求、分發(fā)操作和響應來完成的。SCSI命令和參數在CDB(CommandDescriptorBlock,命令描述塊)中指定。作為交互示例,在執(zhí)行對磁盤的SCSI寫過程時,在發(fā)起方(例如主機總線適配器)創(chuàng)建一個應用客戶,該客戶發(fā)送SCSI命令請求給目標方,令其準備緩沖區(qū)以接收數據。目標設備服務器在其緩沖區(qū)準備好之后,發(fā)送一個數據分發(fā)操作請求進行響應。接著,發(fā)送方就執(zhí)行分發(fā)操作,開始發(fā)送數據塊。依賴于底層的分發(fā)子系統(tǒng),數據塊可能按字節(jié)并行傳輸(例如并行SCSI總線),也可能以分段成幀的形式串行傳輸(例如光纖通道或iSCSI)。
從應用程序或操作系統(tǒng)的角度看,寫操作只是一個事務。但實際上,對應一個寫操作,發(fā)送方和目標方可能要進行多次的分發(fā)請求和分發(fā)操作的交互,才能把命令請求的所有數據都發(fā)送給目標方。
在一次讀操作中,SCSI命令塊遵循相反的數據分發(fā)請求和確認序列,然而由于是發(fā)起方發(fā)出讀命令,所以命令就假定自己已經準備好了緩沖區(qū)以接收第1批數據塊。在讀寫事務的每個階段所發(fā)送的數據塊數量,由發(fā)起方和目標方根據對方的緩沖區(qū)容量協(xié)商決定。例如,高性能磁盤陣列一般都能提供較大的緩沖區(qū),可以完成大規(guī)模的數據傳送,從而提高了產品性能。
3.5SCSI總線信號
SCSI在物理信號的基礎上定義了一組總線信號。這些信號可劃分為數據信號和控制信號兩類。它們都是二進制信號,并且只有“真”和“偽”兩個穩(wěn)定狀態(tài)。其中有指示總線已經被占用的“BSY”信號,有清除并重新設置SCSI總線的“RST”信號等。
下面對這些信號的名稱和功能逐一進行介紹。
1.BSY(Busy,忙)信號
該信號是“或態(tài)”信號,表示已經有設備占用總線。
2.SEL(Select,選擇)信號
該信號是“或態(tài)”信號,由發(fā)起方用以選擇目標方,或者由目標方用以重新選擇發(fā)起方。
3.C/D(Control/Data,控制/數據)信號
該信號由目標方驅動,表示在數據總線上傳送的是數據信號還是控制信號。該信號處于真狀態(tài)時表示控制信號。
4.I/O(Input/Output,輸入輸出)信號
該信號由目標方驅動,控制數據在數據總線上的移動方向。當I/0信號為“真”時表示是對發(fā)起方的輸入,數據由目標方向發(fā)起方傳送;若I/0信號為“偽”,則表示數據由發(fā)起方向目標方傳送。該信號也被用來區(qū)分選擇和重選階段。
5.MSG(Message,通信)信號
該信號由目標方驅動,表示總線處于信息傳送的通信階段。
6.REQ(Request,請求)信號
該信號由目標方驅動,表示有信息傳輸請求,請求一個REQ/ACK數據傳送握手過程。
7.ACK(Acknowledge,應答)信號
該信號由發(fā)起方驅動,表示對REQ信號的應答。
8.ATN(Attention,提醒)信號
該信號由發(fā)起方驅動,指示一個提醒信息,表明發(fā)起方有一個消息要給目標方發(fā)送。
9.RST(Reset,重置)信號
該信號是“或態(tài)”信號,表示一個硬件重置狀態(tài),指示總線進入重新設置階段,清除所有使用總線的SCSI設備。
10.DB(DataBus,數據總線)信號
DB信號有兩種,分別是用于8位數據總線的DB(7-0,P)和用于16位數據總線的DB(l5~O,P)。這些信號都用于傳送信息的值,它們包括數據比特信號,加上奇偶檢驗比特信號。
由于在SCSI總線上掛有多個設備,一些控制信號可能同時被多個SCSI設備驅動。這些信號被稱作“或態(tài)”信號。對于“或態(tài)”信號,SCSI設備不會主動將其驅動成“偽”,而是依賴總線終接器,在總線上的所有設備都沒有驅動該信號時將其設置成“偽。”只要有1個或多個設備驅動該信號,該信號就是“真”。與“或態(tài)”信號相對照的是“非或態(tài)”信號。對于“非或態(tài)”信號,SCSI設備可以將其驅動成“偽”。
3.6SCSI總線的使用階段
根據對總線不同的使用,可以把SCSI總線狀態(tài)劃分成8個不同的階段:空閑階段,仲裁階段,選擇階段,重選階段,命令階段,數據階段,狀態(tài)階段和通信階段。
其中命令階段,數據階段,狀態(tài)階段和通信階段都設計信息在總線的傳送,所以又稱為:信息傳送階段。
除了空閑階段外,其他階段的總線都被SCSI設備占用。
3.6.1.總線空閑階段
總線空閑表明沒有一個設備在使用SCSI總線,也表示在此狀態(tài)下,SCSI設備如果需要,可以使用總線。SCSI設備需要在總線上的SEL信號和BSY信號都是“偽”之后,才可以檢測總線是否處于空閑狀態(tài)。
作為例子,SCSI總線可能在下列情況下進入空閑狀態(tài):
1.RST信號被設置;
2.不成功的總線選擇或重選;
3.目標設備解除連接;
4.目標設備命令完成。
一旦一個SCSI設備確定總線處于空閑階段,它就可以申請總線仲裁,從而進入仲裁階段。
3.6.2.總線仲裁階段
在SCSI總線上的設備必須先獲得總線連接權,然后才可以進行其他的操作。在默認條件下,看似掛在總線上的設備在邏輯上是與總線斷開的,沒有參與總線上的活動。SCSI設備只有在需要進行數據傳輸和設備狀態(tài)報告時才會申請總線連接權。SCSI設備一旦得到了總線連接權,就將在發(fā)起方和目標方之間形成一個物理連接的通道,然后就可以進行數據傳輸。
一般情況下,總線的獲取與對目標方的選擇都由發(fā)起方完成。為了更加高效地使用總線,在某些情況下,例如在有較長時間的CPU處理等待或設備存取等待時,需要釋放總線以供其他設備使用。在等待的相關任務完成后,再重新進行總線仲裁和連接權獲取操作,以繼續(xù)進行暫停的工作。因此,有時目標方也可以執(zhí)行總線操作和連接權獲取操作,準確地講,是再獲取操作。
SCSI總線上的設備的優(yōu)先級是由它的地址即SCSI ID決定的。在窄SCSI中的ID范圍是0-7,對應的優(yōu)先級是從1到8。在寬SCSI中的ID范圍是O~l5,其中對應IDO~7的優(yōu)先級是從9到16遞增,而對應ID8~l5的優(yōu)先級是從1到8遞增。在這里,我們用較大的數值表示較高的優(yōu)先級,因此,ID7具有最高優(yōu)先級。在窄SCSI中,ID 0具有最低優(yōu)先級;在寬SCSI中,ID8具有最低優(yōu)先級。
SCSI總線上的ID數目是與SCSI數據總線寬度一致的,因此,窄SCSI有8個ID,寬SCSI有16個ID。在窄SCSI中的8根數據線的編號是從0到7,在寬SCSI中的16根數據線的編號是從0到15。有趣的是,具有某個編號的數據線上的信號,還被用來表示具有對應號碼ID的SCSI設備是否在執(zhí)行選擇或相關操作。例如當數據總線中的數據線DB(2)在某個特定的階段被驅動成真時,就可以表示其ID為2的設備已經在總線上執(zhí)行了選擇或相關操作。
在SCSI域中,主機是存儲設備的主要使用者,且對存儲的響應要求較高,因此通常主機的優(yōu)先級最高,其分配的ID值也最大,在窄SCSI中是ID7,在寬SCSI中是IDl5。
總線仲裁就是在可能同時有多個設備請求的情況下,最終只給予其中的一個SCSI設備總線控制權的過程。SCSI設備在檢測到“總線空閑”并等待一個時延后即可以把總線置成BSY,并把與它的SCSIID對應的數據線信號置為“真”,開始總線仲裁申請。
在等待1個時延后,該SCSI設備需檢測在數據總線上是否有更高優(yōu)先級的SCSIID也為“真”。如果總線上確有更高優(yōu)先級的設備在進行總線申請,則該SCSI設備不再置BSY和對應的數據線為“真”。放棄總線仲裁申請,直到下一次“總線空閑”;否則,該設備就獲得了總線控制權,并由該設備把SEL信號置為“真”。同時,總線上的其他SCSI設備則檢測到SEL信號為“真”后,不再置BSY信號和對應的數據線為“真”,放棄總線仲裁申請。為了保證確實已經獲得了總線控制權,該設備在置SEL信號為“真”后、傳送其他信號前,需要有一定的時延。
在總線仲裁階段結束時,總線上有BSY、SEL和與獲得總線的SCSI設備的ID,其對應的數據線的信號為“真”。
3.6.3.選擇階段
在選擇階段,得到總線使用權的SCSI設備在總線上選擇目標設備,以便隨后可以向該目標設各發(fā)送諸如讀和寫這樣的命令。這個階段主要是完成對具有特定SCSIID的設備的選擇,其相關協(xié)議的定義主要是在SCSI體系結構的互連層。需要注意的是,邏輯單元號LUN的尋址是邏輯單元通過SCSI傳輸層協(xié)議完成的,不在互連層。與LUN編址相關的協(xié)議在傳輸協(xié)議層描述。
贏得仲裁的SCSI設備在把BSY和SEL信號置成“真”,經過一小段時延后,即可進入選擇階段。作為發(fā)起方,贏得仲裁的SCSI設備不可以把1/0信號置成“真”。在此階段,發(fā)起方需要把與自己的SCSIID對應的數據線的信號和對應所要選擇的目標設備的SCSIID的數據線的信號置成“真”,經過一小段時延,再把BSY信號置成“偽”,然后等待目標方的響應。
例如,SCSI ID為6的主機把對應自己的ID的數據線DB(6)和對應目標設備的ID(=6)的數據線DB(0)置成“真”后,數據總線上信號值的狀態(tài)將如下所示。
DS(0)DS(1)DS(2)DS(3)DS(4)DS(5)DS(6)DS(7)
10000010
此時,只有兩個數據線的信號值是“真”。如果有多于兩個的數據線為“真”,則目標方認為有誤。目標方在SEL和對應它的ID的數據線的信號為“真”并且BSY和I/0信號為“偽”的情況下,就可以確定它自己已經被選為目標設備。此時,目標方設備應該重新把BSY信號置成“真”。發(fā)起方在檢測到BSY為“真”的信號后,就把SEL信號置成“偽”。特別需要注意的是,在該階段結束時,BSY信號是由目標方置位的。
3.6.4.重選階段
在SCSI目標設備忙于處理其內部事務(通常是對于執(zhí)行對存儲數據的讀或寫操作)期間,它可以在等待操作(比如把存儲在設備中的數據讀入緩沖區(qū)或把暫存在緩沖區(qū)的數據寫入緩沖區(qū))完成時釋放總線供其他設備使用,并在操作完成后重新申請對總線的使用權。因此,重選階段也發(fā)生在“總線仲裁階段”之后。但與選擇階段不同,重選階段由目標方啟動,重新建立由發(fā)送方啟動成功但被目標方掛斷的連接。
在目標設備釋放了總線之后,BSY和SEL信號處于被置成“真”的狀態(tài)。此時日標設備通過把I/0信號置成“真”使自己成為贏得對總線使用權的一方。在重選階段,目標方也需要把與自已的SCSIID對應的數據線的信號和對應發(fā)送方設備的SCSIID的數據線的信號置成“真”,經過一段短的時延,再把BSY信號置成“偽”,然后等待發(fā)起方的響應。
發(fā)起方在SEL、I/0和對應它的ID的數據線的信號為“真”并且BSY為“偽”的情況下,就可以確定它自己已經被重選。被重選的發(fā)起方可以通過查看數據總線來驗證重迭的目標方的SCSIID。然后,發(fā)起方設各重新把BSY信號置成“真”。目標方在檢測到BSY為“真”的信號后,它也執(zhí)行把BSY驅動成“真”的操作,并把SEL信號置成“偽”。
被重選的發(fā)起方在檢測到SEL信號為“偽”后,它就把BSY置成“偽”,而目標設備則繼續(xù)把BSY設置成“真”,直到它放棄對總線的使用權為止。這樣,在該階段結束時,信號的狀態(tài)與選擇階段一樣,也是由目標方設置的BSY信號。
評論