亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于SAS的管理調(diào)度裝置、系統(tǒng)及方法與流程

文檔序號(hào):12824286閱讀:640來(lái)源:國(guó)知局
一種基于SAS的管理調(diào)度裝置、系統(tǒng)及方法與流程

本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及sas(serialattachedscsi,串行小型計(jì)算機(jī)系統(tǒng)接口)技術(shù)。



背景技術(shù):

隨著sas(serialattachedscsi,串行小型計(jì)算機(jī)系統(tǒng)接口)在服務(wù)器以及陣列中的廣泛應(yīng)用,通過(guò)sasdomain(sas域)組網(wǎng)的設(shè)備越來(lái)越多。

在sashost/target(sas主機(jī)/目標(biāo))應(yīng)用中,host/target(主機(jī)/目標(biāo))需要通過(guò)sasexpander(sas擴(kuò)展設(shè)備)與遠(yuǎn)端的target/host(目標(biāo)/主機(jī))進(jìn)行互聯(lián)通信。也就是說(shuō),無(wú)論host(主機(jī))與target(目標(biāo))通信,還是target與host通信,都不在是簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)直連模式,往往需要通過(guò)expander(擴(kuò)展設(shè)備)進(jìn)行擴(kuò)展。sas控制器內(nèi)部會(huì)包含多個(gè)port(端口),有些port(端口)直連遠(yuǎn)端設(shè)備,有些port(端口)通過(guò)expander(擴(kuò)展設(shè)備)與遠(yuǎn)端設(shè)備互聯(lián)。

例如,一種自研host側(cè)的sas控制器支持2kdevice(設(shè)備)和4kio(輸入輸出)并發(fā),target側(cè)sas控制器支持64個(gè)主機(jī)和256個(gè)io并發(fā)。因此,sas控制器內(nèi)部如何高效管理多port(端口)、多device(設(shè)備),以及各device(設(shè)備)多io并發(fā),是必須解決的一個(gè)技術(shù)問(wèn)題。

按照sas標(biāo)準(zhǔn)協(xié)議分層,各port相互獨(dú)立,由portlayer(接口層)的pl_oc狀態(tài)機(jī)來(lái)管理待發(fā)送請(qǐng)求,該機(jī)制存有一個(gè)嚴(yán)重的問(wèn)題:一個(gè)sas控制器所支持的device數(shù)以及io并發(fā)數(shù)與port沒(méi)有嚴(yán)格的映射關(guān)系,如果各port下device和io分開(kāi)管理,則每個(gè)port必須按照所支持的最大規(guī)格對(duì)device 和io進(jìn)行管理,這樣所需資源開(kāi)銷與控制器內(nèi)部port個(gè)數(shù)成正比,數(shù)目龐大,不易管理。

現(xiàn)有技術(shù)方案通常是通過(guò)軟件層面進(jìn)行待發(fā)送任務(wù)管理,由軟件調(diào)度選擇一個(gè)發(fā)送請(qǐng)求來(lái)知會(huì)hardware(硬件)進(jìn)行幀處理。此種方案存在以下問(wèn)題:

(1)軟件與邏輯之間每個(gè)io存在多次交互,包括:任務(wù)下發(fā)配置邏輯寄存器、邏輯完成中斷上報(bào)、軟件查詢完成狀態(tài)等,因此處理時(shí)延大;

(2)軟件內(nèi)部需要維護(hù)任務(wù)隊(duì)列,其訪問(wèn)隊(duì)列緩存空間開(kāi)銷大;

(3)各port獨(dú)立管理資源開(kāi)銷巨大。



技術(shù)實(shí)現(xiàn)要素:

本文描述了一種基于sas的管理調(diào)度裝置、系統(tǒng)及方法,以實(shí)現(xiàn)對(duì)多端口、多設(shè)備、多io的統(tǒng)一管理和調(diào)度。

在一方面,本申請(qǐng)實(shí)施例提供一種基于sas的管理調(diào)度裝置。該裝置基于上層協(xié)議請(qǐng)求與相應(yīng)sas域進(jìn)行通信。該裝置包括鏈表管理模塊、調(diào)度器、sas通路中的dmac(directmemoryaccesscontroller,直接內(nèi)存訪問(wèn)控制器)直接內(nèi)存訪問(wèn)控制器。該鏈表管理模塊通過(guò)鏈表的方式管理基于上層協(xié)議請(qǐng)求而得到的待處理io信息、設(shè)備信息。該調(diào)度器在有空閑的sas通路后,通過(guò)索引該鏈表的方式獲取該鏈表中的待處理io信息、設(shè)備信息。該sas中的dmac,基于該待處理輸入輸出信息、設(shè)備信息,將與sas域中的相應(yīng)設(shè)備進(jìn)行幀交互。

另一方面,本申請(qǐng)實(shí)施例提供了一種基于sas控制器,該控制器包括上述方面的裝置。

另一方面,本申請(qǐng)實(shí)施例提供了一種基于sas的管理調(diào)度系統(tǒng),該系統(tǒng)包括上述方面的裝置及相應(yīng)sas域,且該sas域中包括多個(gè)設(shè)備。

又一方面,本申請(qǐng)實(shí)施例提供了一種基于sas的管理調(diào)度方法。sas控制 器基于上層協(xié)議請(qǐng)求與相應(yīng)sas域中的設(shè)備進(jìn)行通信。該方法包括,sas控制器查看相應(yīng)sas通路狀態(tài),并在所述sas通路空閑時(shí),通過(guò)索引鏈表的方式獲取待處理輸入輸出信息、設(shè)備信息。其中,該待處理輸入輸出信息、設(shè)備信息是通過(guò)解析上層協(xié)議請(qǐng)求而獲得,并通過(guò)鏈表方式對(duì)該輸入輸出信息、設(shè)備信息進(jìn)行管理。該sas控制器基于該待處理輸入輸出信息、設(shè)備信息,將與sas域中的相應(yīng)設(shè)備進(jìn)行幀交互。

本申請(qǐng)實(shí)施例通過(guò)硬件方式(如sas控制器)實(shí)現(xiàn)對(duì)鏈表的管理及調(diào)度,并通過(guò)鏈表對(duì)多io并發(fā)進(jìn)行統(tǒng)一管理。本申請(qǐng)實(shí)施例能夠高效管理并調(diào)度多端口、多設(shè)備、多io并發(fā),降低了內(nèi)部資源開(kāi)銷。此外,本申請(qǐng)實(shí)施例通過(guò)sas控制器感知sas通路狀態(tài)以及查看鏈表管理模塊中是否有待處理任務(wù),降低處理時(shí)延。

在一個(gè)可能設(shè)計(jì)中,待處理io信息為待處理ioid(標(biāo)識(shí)),目標(biāo)設(shè)備信息為目標(biāo)設(shè)備id(標(biāo)識(shí))。

在一個(gè)可能設(shè)計(jì)中,在上述鏈表中還包括與設(shè)備進(jìn)行幀交互的端口信息,且該端口信息為端口下是否有待處理設(shè)備信息。調(diào)度器在查看到該端口信息為端口下有待處理設(shè)備信息時(shí),獲取該端口下的設(shè)備信息,根據(jù)得到的該設(shè)備信息獲取待處理io信息。

在一個(gè)可能設(shè)計(jì)中,待處理io信息、設(shè)備信息、端口信息以數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ)于上述鏈表中。

io結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)包括以下字段中的一個(gè)或多個(gè):用于指示當(dāng)前io的前驅(qū)io標(biāo)識(shí)、用于指示當(dāng)前io的后繼io標(biāo)識(shí)。

設(shè)備結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)包括以下字段中的一個(gè)或多個(gè):用于指示當(dāng)前設(shè)備下是否存在待處理命令io、用于指示當(dāng)前設(shè)備下待處理命令io鏈表尾結(jié)點(diǎn)對(duì)應(yīng)io標(biāo)識(shí)、用于指示當(dāng)前設(shè)備下待處理命令io鏈表頭結(jié)點(diǎn)對(duì)應(yīng)io標(biāo)識(shí)、用于指示當(dāng)前設(shè)備下是否存在待處理數(shù)據(jù)io、用于指示當(dāng)前設(shè)備下待處理數(shù)據(jù)io鏈表尾結(jié)點(diǎn)對(duì)應(yīng)io標(biāo)識(shí)、用于指示當(dāng)前設(shè)備下待處理數(shù)據(jù)io鏈表頭結(jié)點(diǎn)對(duì) 應(yīng)io標(biāo)識(shí)、用于指示當(dāng)前結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)設(shè)備標(biāo)識(shí)、用于指示當(dāng)前結(jié)點(diǎn)的后繼結(jié)點(diǎn)設(shè)備標(biāo)識(shí)。

端口結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)包括以下字段中的一個(gè)或多個(gè):用于指示當(dāng)前端口下是否有待處理設(shè)備、用于指示當(dāng)前端口下待處理設(shè)備鏈表表頭結(jié)點(diǎn)標(biāo)識(shí)、用于指示當(dāng)前端口下待處理設(shè)備鏈表表尾結(jié)點(diǎn)標(biāo)識(shí)。

由于端口、設(shè)備、io數(shù)據(jù)結(jié)構(gòu)分開(kāi),由端口結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)、設(shè)備鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)、io鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)共同組成鏈表。因此,當(dāng)出現(xiàn)異常時(shí),方便了sas控制器將設(shè)備下的所有待處理io取消,或者將端口下的所有待處理io取消。而在設(shè)備鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中,由于命令和數(shù)據(jù)分開(kāi),即以不同字段形式表示出來(lái),因此,可實(shí)現(xiàn)命令調(diào)度優(yōu)先、數(shù)據(jù)調(diào)度優(yōu)先或rr等調(diào)度優(yōu)先策略。

在一個(gè)可能設(shè)計(jì)中,sas域中的設(shè)備為主機(jī)或盤(pán)片。

本發(fā)明通過(guò)sas控制器感知sas通路狀態(tài),并通過(guò)檢索sas控制器中鏈表,將待處理任務(wù)通過(guò)空閑sas通路發(fā)送出去,實(shí)現(xiàn)了sas域中設(shè)備的盡可能輪轉(zhuǎn),同時(shí)防止了高負(fù)荷及餓死現(xiàn)象的產(chǎn)生。

附圖說(shuō)明

為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹。

圖1為本發(fā)明實(shí)施例提供的主機(jī)通過(guò)sas控制器組網(wǎng)的示意圖;

圖2為本發(fā)明實(shí)施例提供的盤(pán)片通過(guò)sas控制器組網(wǎng)的示意圖;

圖3為本發(fā)明實(shí)施例提供的基于sas的管理調(diào)度系統(tǒng)示意圖;

圖4是本發(fā)明實(shí)施例提供的調(diào)度器實(shí)現(xiàn)調(diào)度的示意圖;

圖5是本發(fā)明實(shí)施例提供的lm模塊統(tǒng)一管理鏈表的示意圖;

圖6是本發(fā)明實(shí)施例提供的基于sas的管理調(diào)度方法流程圖。

具體實(shí)施方式

下面結(jié)合附圖,對(duì)本發(fā)明的實(shí)施例進(jìn)行描述。

圖1是sas主機(jī)通過(guò)sas控制器組網(wǎng)示意圖。圖1中,sas主機(jī)(sashost)通過(guò)該主機(jī)中的sas控制器組網(wǎng)。此時(shí),在sas域(sasdomain)中包含多個(gè)盤(pán)片和擴(kuò)展設(shè)備(expander)。該擴(kuò)展設(shè)備用于連接sas控制器與盤(pán)片,和/或連接sas控制器與另一擴(kuò)展設(shè)備,和/或連接盤(pán)片與盤(pán)片等,目的是使在sas域中能夠連接更多的盤(pán)片。該盤(pán)片可以為sashdd(機(jī)械硬盤(pán))/ssd(固態(tài)硬盤(pán))、sata(接口類型硬盤(pán))等任意一種或多種盤(pán)片類型。因此,sas主機(jī)通過(guò)sas控制器組網(wǎng),使得sas主機(jī)能夠與盤(pán)片通信,此種情況下,sas域包含多個(gè)盤(pán)片。

圖2為盤(pán)片通過(guò)sas控制器組網(wǎng)示意圖。圖2中,sas盤(pán)片(如sasssd)通過(guò)盤(pán)片側(cè)中的sas控制器組網(wǎng)。此種情況下,sas域(sasdomain)中包含多個(gè)sas主機(jī)(sashost)和擴(kuò)展設(shè)備(expander)。該擴(kuò)展設(shè)備用于連接sas控制器與sas主機(jī),和/或連接sas控制器與另一擴(kuò)展設(shè)備,和/或連接sas主機(jī)與sas主機(jī)等,目的是使sas域中能夠連接更多的sas主機(jī)。因此,盤(pán)片通過(guò)sas控制器組網(wǎng),使得盤(pán)片能夠與sas主機(jī)通信,此種情況下,sas域包含多個(gè)sas主機(jī)。

圖3為本發(fā)明一個(gè)實(shí)施例的基于sas的管理調(diào)度系統(tǒng)示意圖。該系統(tǒng)是通過(guò)硬件sas控制器來(lái)實(shí)現(xiàn)多端口(port)下的各設(shè)備(device,簡(jiǎn)稱dev)以及各設(shè)備多io(輸入輸出)并發(fā)的管理和調(diào)度,且該管理是通過(guò)鏈表來(lái)實(shí)現(xiàn)的。

在詳述圖3中各裝置、模塊作用功能之前,先解釋下io(輸入輸出,如ssp/smp/stp命令)并發(fā)。在數(shù)據(jù)處理過(guò)程中,數(shù)據(jù)從一個(gè)設(shè)備到另一個(gè)設(shè)備之間的交互稱之為數(shù)據(jù)流(stream),此交互過(guò)程即為io。通常io都是排序進(jìn)行的,如硬盤(pán)的數(shù)據(jù)io、cpu和內(nèi)存的io。而網(wǎng)絡(luò)之間的io則逐漸趨于并發(fā)處理,即io并發(fā)。io并發(fā)是指兩個(gè)設(shè)備之間同時(shí)可有多個(gè)命令并行執(zhí)行,即 多個(gè)io分時(shí)復(fù)用sas鏈路以進(jìn)行io幀交互。為了能夠高效管理多io并發(fā),本發(fā)明實(shí)施例通過(guò)鏈表對(duì)多io并發(fā)進(jìn)行統(tǒng)一管理,將待處理(pending)io的id(標(biāo)識(shí))、設(shè)備(目標(biāo)設(shè)備,且屬于sas域中的設(shè)備)的id、與該設(shè)備進(jìn)行幀交互的端口(port)id等信息以鏈表方式進(jìn)行統(tǒng)一管理。當(dāng)sas控制器中的調(diào)度器在發(fā)現(xiàn)有空閑的sas通路(saschanel,簡(jiǎn)稱saschnl)后,通過(guò)索引該鏈表得到待處理ioid(標(biāo)識(shí))、設(shè)備id、端口id等信息。然后該調(diào)度器或者該空閑sas通路中的dmac(directmemoryaccesscontroller,直接內(nèi)存訪問(wèn)控制器)根據(jù)該待處理ioid(即所選中的ioid),得到io上下文內(nèi)容(iocontext),例如,得到io對(duì)應(yīng)幀在存儲(chǔ)空間的地址、io對(duì)應(yīng)幀長(zhǎng)度等內(nèi)容;以及根據(jù)該設(shè)備id(即所選中的設(shè)備id)得到該設(shè)備相關(guān)信息,例如,得到目標(biāo)設(shè)備在sas域中地址、與目標(biāo)設(shè)備進(jìn)行幀交互的端口id等。該dmac根據(jù)得到的io上下文內(nèi)容在存儲(chǔ)空間中獲取幀數(shù)據(jù)(命令幀或者數(shù)據(jù)幀),并根據(jù)得到的目標(biāo)設(shè)備相關(guān)信息與目標(biāo)設(shè)備完成數(shù)據(jù)幀交互。

下面詳述圖3中各裝置、模塊功能作用。

圖3中,該基于sas的管理調(diào)度系統(tǒng)包括基于sas的管理調(diào)度裝置和sas域(sasdomain)200。

sas域200中包含有多個(gè)設(shè)備220及一個(gè)或多個(gè)擴(kuò)展器210,該擴(kuò)展器210用于使該sas域中連接更多的設(shè)備220。該設(shè)備220可以是盤(pán)片,如該盤(pán)片機(jī)械硬盤(pán)、固態(tài)硬盤(pán)等;該設(shè)備220也可以是sas主機(jī)(sashost),如服務(wù)器等。在host組網(wǎng)情況下,該設(shè)備220為盤(pán)片;在由盤(pán)片組網(wǎng)情況下,該設(shè)備220為sas主機(jī)。

該基于sas的管理調(diào)度裝置包括存儲(chǔ)器100、cpu400、sas控制器300。

存儲(chǔ)器100用于存儲(chǔ)io交互過(guò)程中的相關(guān)幀,包括數(shù)據(jù)幀、命令幀、響應(yīng)幀;例如,存儲(chǔ)器100存儲(chǔ)讀命令幀、寫(xiě)命令幀、查詢?cè)O(shè)備相關(guān)內(nèi)容(如查詢主機(jī)日志文本)命令幀、寫(xiě)入sas域中設(shè)備的數(shù)據(jù)幀、sas域中設(shè)備(如 盤(pán)片)在命令執(zhí)行完后作出的響應(yīng)幀等。

在一個(gè)示例中,存儲(chǔ)器100用于存儲(chǔ)記錄io上下文內(nèi)容(iocontext)的表項(xiàng)(參見(jiàn)下表4)以及存儲(chǔ)記錄sas域(sasdomain)中掃描到的所有設(shè)備(sas域中設(shè)備)信息的表項(xiàng)(參見(jiàn)下表5)。需要說(shuō)明的是,該用于記錄io內(nèi)容的表項(xiàng)以及掃描到設(shè)備相關(guān)內(nèi)容的表項(xiàng)也可以由sas控制器中的存儲(chǔ)模塊存儲(chǔ);或者由存儲(chǔ)器100及sas控制器中的存儲(chǔ)模塊共同存儲(chǔ)。

在一個(gè)示例中,存儲(chǔ)器100為主存或內(nèi)存,如存儲(chǔ)器100為片外ddr(doubledatarate,雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器)或者片內(nèi)ram(randomaccessmemory,隨機(jī)存取存儲(chǔ)器)。

cpu400用于將由上層協(xié)議(如應(yīng)用層軟件)中得到的相關(guān)幀存儲(chǔ)于存儲(chǔ)器100中。例如,應(yīng)用層軟件需要將一個(gè)文件(如電影文件)下發(fā)至sas域的某個(gè)設(shè)備(如某盤(pán)片)中,則cpu400先將該文件以數(shù)據(jù)幀形式存儲(chǔ)于存儲(chǔ)器100中。

在一個(gè)示例中,cpu400還用于掃描sas域200中所有設(shè)備,以獲取sas域中各設(shè)備相關(guān)內(nèi)容(參見(jiàn)下表5),并將得到的該所有設(shè)備相關(guān)內(nèi)容存儲(chǔ)于存儲(chǔ)器100或者存儲(chǔ)模塊313中。

在一個(gè)示例中,將cpu400掃描得到的內(nèi)容以數(shù)據(jù)結(jié)構(gòu)(自定義數(shù)據(jù)結(jié)構(gòu))形式存儲(chǔ),參見(jiàn)下表5。進(jìn)一步地,該設(shè)備相關(guān)內(nèi)容包括該設(shè)備是否有效、該設(shè)備類型、與該設(shè)備進(jìn)行交互端口的id(標(biāo)識(shí))、該設(shè)備id(標(biāo)識(shí))等信息,具體參見(jiàn)下表5。需要說(shuō)明的是,該掃描得到的sas域中各設(shè)備相關(guān)內(nèi)容不限于此,即不限于下表5所示。

下面詳述sas控制器300。

該sas控制器300包括硬件加速器310、多個(gè)sas通路320、多個(gè)端口330;其中,該多個(gè)端口為邏輯端口,不具有物理實(shí)體結(jié)構(gòu)。

該硬件加速器310包括lm(listmanager,鏈表管理)模塊311、調(diào)度器(dispatch)312、存儲(chǔ)模塊313、解析模塊314;其中,每個(gè)sas通路包 括相應(yīng)dmac(directmemoryaccesscontroller,直接內(nèi)存訪問(wèn)控制器)321。

存儲(chǔ)模塊313為可選模塊,即該硬件加速器310中也可以不包含該存儲(chǔ)模塊313,該存儲(chǔ)模塊313用于存儲(chǔ)記錄io上下文內(nèi)容的表項(xiàng)(參見(jiàn)下表4)以及存儲(chǔ)記錄sas域中掃描到的所有設(shè)備相關(guān)內(nèi)容的表項(xiàng)(參見(jiàn)下表5)。

下面將以上述記錄io上下文內(nèi)容的表項(xiàng)、sas域中掃描到的各設(shè)備相關(guān)內(nèi)容表項(xiàng)存儲(chǔ)于存儲(chǔ)模塊313為例進(jìn)行闡述。

解析模塊314為可選模塊,其用于接收上層協(xié)議(如應(yīng)用層軟件)下發(fā)的請(qǐng)求,即接收來(lái)自上層軟件的用于記錄數(shù)據(jù)或者命令信息的的數(shù)據(jù)結(jié)構(gòu),并進(jìn)行解析,將解析出的io上下文內(nèi)容以新的數(shù)據(jù)結(jié)構(gòu)形式(參見(jiàn)下表5)存儲(chǔ)于存儲(chǔ)模塊313中;將解析出的ioid、設(shè)備id、與設(shè)備交互的端口id等信息加至lm模塊311的鏈表中。也就是說(shuō),待處理ioid、設(shè)備id、與設(shè)備交互的端口id等id信息是通過(guò)解析上層軟件下發(fā)的數(shù)據(jù)結(jié)構(gòu)而得到。

在一個(gè)示例中,存儲(chǔ)于存儲(chǔ)模塊313的io上下文內(nèi)容包括io對(duì)應(yīng)的ioid、io對(duì)應(yīng)幀在存儲(chǔ)空間(存儲(chǔ)器100、或者存儲(chǔ)模塊313)中的地址、幀長(zhǎng)度(數(shù)據(jù)幀或命令幀長(zhǎng)度)等信息。而存儲(chǔ)于lm模塊311中的信息僅是ioid、設(shè)備id、與設(shè)備交互的端口id等id信息,且是以鏈表形式存儲(chǔ)于lm模塊311中,目的是便于索引。

lm模塊311通過(guò)鏈表方式管理基于上層協(xié)議請(qǐng)求(即通過(guò)解析上層軟件下發(fā)的數(shù)據(jù)結(jié)構(gòu))而得到的待處理io信息、設(shè)備信息。在一個(gè)示例中,該待處理io信息為待處理ioid,該設(shè)備信息為設(shè)備id。進(jìn)一步地,在該鏈表中還包括與該設(shè)備進(jìn)行幀交互的端口信息,且該端口信息為該端口下是否有待處理設(shè)備id。

在一個(gè)示例中,該待處理io信息、設(shè)備信息、端口信息是以數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ)于lm模塊311的鏈表中,具體包括端口結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)、設(shè)備鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)、io鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)。

在一個(gè)示例中,lm模塊311以鏈表方式對(duì)端口結(jié)點(diǎn)、設(shè)備鏈表結(jié)點(diǎn)、io 鏈表結(jié)點(diǎn)進(jìn)行統(tǒng)一管理(參見(jiàn)下圖5及相關(guān)內(nèi)容表述),包括對(duì)結(jié)點(diǎn)內(nèi)容刷新、加鏈、刪鏈、結(jié)點(diǎn)位置調(diào)整等。例如,當(dāng)lm模塊311接收到來(lái)自解析模塊314的加鏈請(qǐng)求后,該lm模塊311將該解析模塊314解析出的待處理ioid、設(shè)備id、與該設(shè)備交互的端口id等信息加到該鏈表中的各結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中。

下面將對(duì)上述端口結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)、設(shè)備鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)、io結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)分別做闡述。

下表1示出的是某端口下是否有與其進(jìn)行信息交互的設(shè)備,如果有則可得到與該端口進(jìn)行信息交互的第一個(gè)設(shè)備(即首設(shè)備)的設(shè)備id(標(biāo)識(shí))以及最后一個(gè)設(shè)備(即尾設(shè)備)的設(shè)備id(標(biāo)識(shí))。根據(jù)表1中的首設(shè)備id通過(guò)查找表2,得到該設(shè)備下的第一個(gè)待處理io的id,以及最后一個(gè)待處理io的id。表3中的當(dāng)前待處理io的前驅(qū)待處理ioid、后繼待處理ioid,以及表2中的當(dāng)前設(shè)備的前驅(qū)設(shè)備的設(shè)備id、后繼設(shè)備的設(shè)備id,還可以用于加鏈、取鏈中。

該端口結(jié)點(diǎn)(portnote)數(shù)據(jù)結(jié)構(gòu)參見(jiàn)下表1:

表1

其中,port_have_pending:用來(lái)指示當(dāng)前端口下是否有待處理設(shè)備(pendingdevice),該待處理設(shè)備是指在該設(shè)備下有待處理io的設(shè)備;該待處理設(shè)備亦指目標(biāo)設(shè)備,,也就是接收數(shù)據(jù)的設(shè)備,該數(shù)據(jù)是根據(jù)該待處理ioid得到的該io相應(yīng)存儲(chǔ)地址中的數(shù)據(jù)。在有待處理設(shè)備時(shí)必然在該設(shè)備下會(huì)有待處理的io,也就是說(shuō),有待處理設(shè)備必然會(huì)有向該待處理設(shè)備發(fā)送的io。

dev_list_hder:用來(lái)指示當(dāng)前端口下設(shè)備鏈表(參見(jiàn)下表2)的首設(shè)備id(標(biāo)識(shí)),即當(dāng)前端口下的第一個(gè)設(shè)備的設(shè)備id。

dev_list_tail:用來(lái)指示當(dāng)前端口下設(shè)備鏈表(參見(jiàn)下表2)的尾設(shè)備id(標(biāo)識(shí)),即當(dāng)前端口下的最后一個(gè)設(shè)備的設(shè)備id。

表1中,數(shù)值y與sas控制器所支持sas域中的設(shè)備數(shù)量有關(guān);并且在port_have_pending無(wú)效時(shí),即在當(dāng)前端口下沒(méi)有待處理設(shè)備時(shí),dev_list_hder、dev_list_tail無(wú)效,即該端口所對(duì)應(yīng)的首設(shè)備id和尾設(shè)備id無(wú)效,也即不存在目標(biāo)設(shè)備。

該設(shè)備鏈表結(jié)點(diǎn)(dev_listnote)數(shù)據(jù)結(jié)構(gòu)參見(jiàn)下表2:

表2

其中,in_list:用來(lái)指示當(dāng)前設(shè)備的設(shè)備id是否在該dev_listnote數(shù)據(jù)結(jié)構(gòu)中,且當(dāng)in_list無(wú)效時(shí)該dev_listnote中其他信息無(wú)效。

在某些情況下,例如,對(duì)端設(shè)備請(qǐng)求與sas控制器300進(jìn)行信息交互時(shí),即sas控制器300被動(dòng)接收數(shù)據(jù)時(shí),解析模塊314解析出的首設(shè)備id、尾設(shè)備id有時(shí)會(huì)出現(xiàn)偏差。因此,可通過(guò)表2中的in_list字段進(jìn)一步確定設(shè)備id是否在設(shè)備鏈表(dev_list)中。

pending_cmd:用來(lái)指示當(dāng)前設(shè)備下是否存在待處理的命令(cmd)任務(wù),即用來(lái)指示當(dāng)前設(shè)備下是否存在待處理io,且該待處理io是待處理命令(cmd)io。

cmd_list_tail[x:0]:用來(lái)指示當(dāng)前設(shè)備下的待處理cmd任務(wù)尾待處理ioid。

cmd_list_hder[x:0]:用來(lái)指示當(dāng)前設(shè)備下待處理的cmd任務(wù)首待處理ioid。

prev_dev_id[y:0]:用來(lái)指示當(dāng)前設(shè)備的前驅(qū)設(shè)備的設(shè)備id。

pending_data:用來(lái)指示當(dāng)前設(shè)備下是否存在待處理的數(shù)據(jù)(data)任務(wù),即用來(lái)指示當(dāng)前設(shè)備下是否存在待處理io,且該待處理io是待處理數(shù)據(jù)(data)io。

data_list_tail[x:0]:用來(lái)指示當(dāng)前設(shè)備下待處理數(shù)據(jù)(data)任務(wù)鏈表的首待處理ioid。

data_list_hder[x:0]:用來(lái)指示當(dāng)前設(shè)備下待處理數(shù)據(jù)(data)任務(wù)鏈表的尾待處理ioid。

next_dev_id[y:0]:用來(lái)指示當(dāng)前設(shè)備的后繼設(shè)備的設(shè)備id;

rsv:保留域。

其中,x值與sas控制器所支持的io并發(fā)數(shù)目有關(guān);y值與sas控制器所支持的sas域中設(shè)備數(shù)量有關(guān)。

io鏈表結(jié)點(diǎn)(io_list_note)數(shù)據(jù)結(jié)構(gòu)參見(jiàn)下表3:

表3

其中,in_data_list:用來(lái)指示當(dāng)前待處理io是否為一個(gè)數(shù)據(jù)任務(wù)io,即用來(lái)指示當(dāng)前待處理io是否是待處理數(shù)據(jù)io。

in_cmd_list:用來(lái)指示當(dāng)前待處理io是否為一個(gè)命令任務(wù)io,即用來(lái)指示當(dāng)前待處理io是否是待處理命令io。

prev_io_id[x:0]:用來(lái)指示當(dāng)前待處理io的前驅(qū)待處理ioid。

next_io_id[x:0]:用來(lái)指示當(dāng)前待處理io的后繼待處理ioid。其中,x數(shù)值與sas控制器所支持io并發(fā)數(shù)有關(guān)。

需要說(shuō)明的是,表1、表2、表3數(shù)據(jù)結(jié)構(gòu)僅是一個(gè)示例,本發(fā)明實(shí)施例的數(shù)據(jù)結(jié)構(gòu)并不限于此。

本實(shí)施例通過(guò)將待處理(pending)io,即需要發(fā)送而尚未發(fā)送的io,以id形式通過(guò)鏈表方式管理起來(lái),便于索引。由于端口、設(shè)備、io的數(shù)據(jù)結(jié)構(gòu)分開(kāi)存儲(chǔ),因此,當(dāng)出現(xiàn)異常時(shí),方便了sas控制器將設(shè)備下的所有待處理io取消,或者將端口下的所有待處理io取消。而在設(shè)備鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中,由于命令和數(shù)據(jù)分開(kāi),即以不同字段形式表示出來(lái),

下面繼續(xù)詳述圖3中的調(diào)度器312如何通過(guò)索引lm模塊311中鏈表而獲得待處理ioid、設(shè)備id,以及如何對(duì)待處理io進(jìn)行調(diào)度。

圖4是本發(fā)明實(shí)施例提供的調(diào)度器實(shí)現(xiàn)調(diào)度的示意圖。

圖4中,調(diào)度器312在查看到有空閑的sas通路后,通過(guò)索引的方式獲取lm模塊的鏈表中的待處理ioid、設(shè)備id、端口id等信息。

在一個(gè)示例中,調(diào)度器312通過(guò)索引lm模塊311中鏈表得到待處理ioid,根據(jù)該待處理ioid通過(guò)查表方式(參見(jiàn)下表4)獲取相應(yīng)io上下文內(nèi)容;以及通過(guò)索引lm模塊311中鏈表得到設(shè)備id,根據(jù)該設(shè)備id通過(guò)查表方式(參見(jiàn)下表5)獲取相應(yīng)設(shè)備相關(guān)內(nèi)容。

具體地,表1、表2、表3存儲(chǔ)的是id信息,包括設(shè)備id、ioid。通過(guò)表1能夠得到與端口進(jìn)行信息交互的設(shè)備id。根據(jù)該表1的設(shè)備id,例如首設(shè)備的設(shè)備id,通過(guò)查找表2得到該設(shè)備下的待處理ioid。根據(jù)該待處理ioid并通過(guò)查找表4可以得到該待處理ioid對(duì)應(yīng)的io上下文內(nèi)容,包括該io在存儲(chǔ)空間的存儲(chǔ)地址、存儲(chǔ)數(shù)據(jù)的長(zhǎng)度等,并且根據(jù)表2得到的該設(shè)備id通過(guò)查表5可以得到該設(shè)備id對(duì)應(yīng)的目標(biāo)設(shè)備地址等信息,以便將得到的該數(shù)據(jù)發(fā)送至該目標(biāo)設(shè)備中。

在另一個(gè)示例中,調(diào)度器312通過(guò)索引lm模塊311的鏈表得到待處理ioid、設(shè)備id等信息,并將該信息發(fā)送至空閑的sas通路由該sas通路中的dmac根據(jù)該待處理ioid過(guò)查表方式(參見(jiàn)下表4)得到相應(yīng)io上下文內(nèi)容;以及根據(jù)該設(shè)備id通過(guò)查表方式(參見(jiàn)下表5)得到相應(yīng)設(shè)備相關(guān)內(nèi)容。

具體地,調(diào)度器312實(shí)時(shí)查看各sas通路(sas通路0、sas通路1……sas通 路n)的狀態(tài),即查看是否有空閑的sas通路,如果有空閑sas通路,則調(diào)度器查看lm模塊中是否有待處理io。首先調(diào)度器查看各端口(port)(端口0、端口1)下是否有待處理設(shè)備(該待處理設(shè)備指目標(biāo)設(shè)備,也是指在該設(shè)備下有待處理io的設(shè)備)。如果端口0下有待處理設(shè)備,則選中端口0下的設(shè)備鏈表。通過(guò)該設(shè)備鏈表查看該端口0下維護(hù)的設(shè)備1(即設(shè)備鏈表鏈頭設(shè)備),選中該設(shè)備1下維護(hù)的待處理io鏈的鏈頭io。查看該io是待處理命令(cmd)任務(wù)還是待處理數(shù)據(jù)(data)任務(wù),即查看是待處理命令io還是待處理數(shù)據(jù)io。如果有待處理數(shù)據(jù)(data)任務(wù),則獲取相應(yīng)待處理數(shù)據(jù)io;如果有待處理命令(cmd)任務(wù),則獲取相應(yīng)待處理命令io。而后再通過(guò)查詢待處理io上下文內(nèi)容表項(xiàng)(存儲(chǔ)于存儲(chǔ)模塊313中的下表5),得到待處理數(shù)據(jù)io內(nèi)容,如得到該io對(duì)應(yīng)幀在存儲(chǔ)空間地址、io對(duì)應(yīng)幀(數(shù)據(jù)幀或命令幀)長(zhǎng)度等信息。

下面結(jié)合表1、表2、表3對(duì)圖4調(diào)度器如何實(shí)現(xiàn)調(diào)度進(jìn)行更詳細(xì)的闡述。該調(diào)度器在探測(cè)到有空閑的sas通路后,該調(diào)度器查看該lm模塊所存儲(chǔ)的鏈表中各端口結(jié)點(diǎn)(port0、port1)數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)表1),并在某端口(如端口0)中的字段port_have_pending有效時(shí),得知該端口0下有待處理設(shè)備。該調(diào)度器再通過(guò)端口結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)表1)得到該端口0下的首待處理設(shè)備id如設(shè)備1,尾待處理設(shè)備id如設(shè)備3。然后該調(diào)度器依據(jù)得到的該首待處理設(shè)備id,查詢?cè)O(shè)備鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)表2)。如果設(shè)備鏈表結(jié)點(diǎn)(dev_list結(jié)點(diǎn))數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)表2)中字段in_list有效,則該設(shè)備id在該dev_list結(jié)點(diǎn)中。然后調(diào)度器繼續(xù)查看該dev_list結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中是否有待處理的命令任務(wù)(通過(guò)pending_cmd字段得到)或待處理的數(shù)據(jù)任務(wù)(通過(guò)penging_data字段得到)。如果既有待處理命令任務(wù),又有待處理數(shù)據(jù)任務(wù),則根據(jù)命令/數(shù)據(jù)調(diào)度優(yōu)先策略選中相應(yīng)任務(wù);如果僅有命令任務(wù)或數(shù)據(jù)任務(wù),則直接選擇相應(yīng)任務(wù)。一旦選擇本次發(fā)送命令還是數(shù)據(jù),則直接獲取相應(yīng)任務(wù)鏈表的頭結(jié)點(diǎn)對(duì)應(yīng)的ioid(通過(guò)cmd_list_hder字段得到),至此該待處理ioid被選中。該調(diào)度器從該lm模塊中取出該待處理ioid。該lm模塊更新鏈表,包括 更新端口結(jié)點(diǎn)、設(shè)備鏈表結(jié)點(diǎn)、io鏈表結(jié)點(diǎn)。該調(diào)度器根據(jù)上述索引鏈表得到的該待處理ioid,查詢記錄io上下文內(nèi)容的表項(xiàng)(參見(jiàn)下表4),得到與該待處理ioid相對(duì)應(yīng)的io上下文內(nèi)容,包括io對(duì)應(yīng)幀在存儲(chǔ)空間地址、io對(duì)應(yīng)幀長(zhǎng)度、偏移(offset)等信息。以及該調(diào)度器根據(jù)上述索引鏈表得到的設(shè)備id,查詢記錄sas域中掃描到的所以設(shè)備相關(guān)內(nèi)容的表項(xiàng)(參見(jiàn)下表5),從而得到與該設(shè)備交互的端口id、該設(shè)備在sas域中地址(如64bit的sasaddress)等信息。

下表4中的io上下文內(nèi)容通過(guò)解析上層協(xié)議下發(fā)的數(shù)據(jù)結(jié)構(gòu)而得到,下表5中的設(shè)備相關(guān)內(nèi)容通過(guò)cpu掃描sas域中所有設(shè)備信息表項(xiàng)二得到。表4是用于記錄多個(gè)io內(nèi)容的表項(xiàng)(iost),即io上下文內(nèi)容數(shù)據(jù)結(jié)構(gòu)。

表4

表4中,在iost數(shù)據(jù)結(jié)構(gòu)中,每個(gè)io上下文內(nèi)容(ioid0內(nèi)容、ioid1內(nèi)容……ioidm內(nèi)容)對(duì)應(yīng)一個(gè)io上下文信息,包括當(dāng)前io是否有效、io對(duì)應(yīng)的ioid、io對(duì)應(yīng)幀在存儲(chǔ)空間的地址、io對(duì)應(yīng)幀(數(shù)據(jù)幀或命令幀)長(zhǎng)度、數(shù)據(jù)偏移等信息。

需要說(shuō)明的是,如果待處理io是順次記錄于表4的iost數(shù)據(jù)結(jié)構(gòu)中,則io標(biāo)識(shí)(id)即為表4的索引號(hào),因此,表4中也可以不包括ioid。此種情況下,調(diào)度器312可通過(guò)該索引號(hào)得到待處理io上下文內(nèi)容。

表5是用于記錄sas域中所掃描到的所有設(shè)備相關(guān)內(nèi)容的表項(xiàng),即設(shè)備相 關(guān)內(nèi)容的數(shù)據(jù)結(jié)構(gòu)。

表5

表5中,在itct數(shù)據(jù)結(jié)構(gòu)中,每個(gè)設(shè)備內(nèi)容(設(shè)備0內(nèi)容、設(shè)備1內(nèi)容……設(shè)備n內(nèi)容)記錄了一個(gè)設(shè)備信息,包括:設(shè)備是否有效、設(shè)備類型、設(shè)備下面的命令和數(shù)據(jù)調(diào)度的優(yōu)先級(jí)、與設(shè)備進(jìn)行幀交互的端口id、設(shè)備在sas域地址等信息。

需要說(shuō)明的是,表5中該記錄sas域中掃描到的所有設(shè)備相關(guān)內(nèi)容表項(xiàng),在sas控制器組網(wǎng)后,由cpu掃描sas域得到。一旦掃描完成后,該記錄sas域中掃描到的所有設(shè)備相關(guān)內(nèi)容(表5)不變,僅在sas網(wǎng)發(fā)生變化之后才會(huì)重新掃描,得到新的sas域中所有設(shè)備相關(guān)內(nèi)容表項(xiàng)。

此外,如果cpu掃描的設(shè)備是順次記錄于表5的itct數(shù)據(jù)結(jié)構(gòu)中,則設(shè)備id即為表5的索引號(hào),因此,表5中也可以不包括設(shè)備id。此種情況下,調(diào)度器312可通過(guò)該索引號(hào)得到設(shè)備相關(guān)內(nèi)容。

由此可見(jiàn),lm模塊311將多個(gè)io并發(fā)以待處理io的方式通過(guò)鏈表管理起來(lái),實(shí)現(xiàn)了多端口、多設(shè)備、多并發(fā)的統(tǒng)一管理。且該lm模塊中鏈表維護(hù)的是io、設(shè)備及端口的id(標(biāo)識(shí)),也即索引號(hào)。而后調(diào)度器312通過(guò)索引的方式,獲取該鏈表中的ioid、設(shè)備id、端口id。然后sas通路中的dmac,基于該待處理ioid、目標(biāo)設(shè)備id,將與sas域中的目標(biāo)設(shè)備進(jìn)行幀交互。由此可見(jiàn),sas域中每個(gè)設(shè)備發(fā)送并發(fā)io個(gè)數(shù)可控,實(shí)現(xiàn)了端口與設(shè)備盡可能輪轉(zhuǎn), 防止了一部分設(shè)備出現(xiàn)高負(fù)載而另一部設(shè)備出現(xiàn)餓死的現(xiàn)象發(fā)生。參見(jiàn)圖5。

圖5是本發(fā)明實(shí)施例提供的lm模塊統(tǒng)一管理鏈表的示意圖。

圖5中,prot0(端口0)、port1(端口1)有待處理設(shè)備。與該port0交互設(shè)備的id,包括設(shè)備id1、設(shè)備id4……設(shè)備id2y-2;以及與該port1交互設(shè)備的id,包括設(shè)備id0、設(shè)備id2、設(shè)備id3、設(shè)備id5……設(shè)備id2y-1。對(duì)于設(shè)備id0,在該設(shè)備id0下的待處理io的id包括ioid0、ioid1、ioid5……ioid2x-3、ioid2x-1。對(duì)于設(shè)備id1,在該設(shè)備id1下的待處理io的id包括ioid2、ioid3、ioid4……ioid2x-4、ioid2x-2。圖5中,設(shè)備鏈表的深度為sas控制器所支持設(shè)備的個(gè)數(shù),io鏈表深度為sas控制器所支持最大io并發(fā)數(shù)。由此可見(jiàn),該lm模塊通過(guò)鏈表存儲(chǔ)待處理io,并通過(guò)鏈表將端口、待處理設(shè)備、待處理io相互關(guān)聯(lián),便于管理,使得sas控制器能夠支持更多的io并發(fā)數(shù)并更大限度地接入更多設(shè)備。該調(diào)度器通過(guò)索引鏈表方式獲取待處理io的id,從而實(shí)現(xiàn)了對(duì)待處理io的統(tǒng)一調(diào)度。

下面繼續(xù)闡述圖3中sas通路中各模塊功能與作用。

圖3中,sas控制器300包括多個(gè)sas通路。sas通路320包括dmac321。

dmac321用于對(duì)數(shù)據(jù)幀或命令幀進(jìn)行搬移。

具體地,調(diào)度器在發(fā)現(xiàn)有空閑的sas通路后,將io上下文內(nèi)容、設(shè)備相關(guān)內(nèi)容發(fā)送至該空閑的sas通路(調(diào)度器也可以發(fā)送待處理處理ioid、設(shè)備id等信息,再由該sas通路中的dmac通過(guò)查表得到io上下文內(nèi)容、設(shè)備相關(guān)內(nèi)容)。該sas通路中的dmac321接收來(lái)自調(diào)度器312中待處理io上下文內(nèi)容,如包括ioid、io對(duì)應(yīng)幀在存儲(chǔ)空間地址、幀長(zhǎng)度(數(shù)據(jù)幀或命令幀長(zhǎng)度)等;以及接收該目標(biāo)設(shè)備相關(guān)內(nèi)容,包括設(shè)備id、設(shè)備類型、與設(shè)備交互的端口id、設(shè)備在sas域中地址等。dmac312根據(jù)其接收到的待處理io上下文內(nèi)容,從存儲(chǔ)器100中獲得相應(yīng)幀數(shù)據(jù),包括數(shù)據(jù)幀或命令幀。dmac312根據(jù)其接收到的目標(biāo)設(shè)備相關(guān)內(nèi)容,啟動(dòng)數(shù)據(jù)幀或命令幀的搬移,并經(jīng)由傳輸層、接口層、數(shù)據(jù)鏈路層、物理層等底層鏈路與目標(biāo)設(shè)備完成幀交互。

綜上,本實(shí)施例通過(guò)將待處理(pending)io,即通過(guò)將需要發(fā)送而尚未發(fā)送的io,以及目標(biāo)設(shè)備,以id形式通過(guò)鏈表方式暫存并管理起來(lái)。調(diào)度器312在感知到有空閑通路后通過(guò)索引鏈表方式獲取到待處理ioid、目標(biāo)設(shè)備id,并將該待處理ioid、目標(biāo)設(shè)備id或者由該待處理ioid、目標(biāo)設(shè)備id得到的io上下文內(nèi)容、設(shè)備相關(guān)內(nèi)容發(fā)送至空閑sas通路。該sas通路中的dmac根據(jù)該io上下文內(nèi)容從存儲(chǔ)器中獲取命令幀或數(shù)據(jù)幀,以及根據(jù)該設(shè)備相關(guān)內(nèi)容與目標(biāo)設(shè)備實(shí)現(xiàn)幀數(shù)據(jù)交互。因此,本發(fā)明實(shí)施例防止了有部分設(shè)備高負(fù)載而另外部分設(shè)備出現(xiàn)餓死的現(xiàn)象發(fā)生。

圖6是本發(fā)明實(shí)施例提供的一種基于sas的管理調(diào)度方法流程圖。sas控制器基于上層協(xié)議請(qǐng)求與sas域中的設(shè)備進(jìn)行通信。

在步驟601,該sas控制器接收上層協(xié)議(如應(yīng)用層軟件)下發(fā)的請(qǐng)求,即接收來(lái)自上層軟件的用于記錄數(shù)據(jù)或命令信息的數(shù)據(jù)結(jié)構(gòu),并進(jìn)行解析,從而得到ioid(標(biāo)識(shí))、io是否有效、io對(duì)應(yīng)幀在存儲(chǔ)空間的地址、io對(duì)應(yīng)幀長(zhǎng)度等io上下文內(nèi)容;以及得到ioid、設(shè)備id、與設(shè)備交互端口id等id信息。

在步驟602,該sas控制器將該io上下文內(nèi)容以數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ)至該io上下文內(nèi)容的表項(xiàng)中(參見(jiàn)表4)。且該sas控制器將該ioid、設(shè)備id、與設(shè)備交互端口id等id信息加至sas控制器中的鏈表中,即該sas控制器執(zhí)行加鏈操作。其中,該鏈表包括端口結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)表1)、設(shè)備鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)表2)、io結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)表3)。

在步驟603,該sas控制器查看sas通路狀態(tài),并在該sas通路空閑時(shí),通過(guò)索引該鏈表的方式獲取該鏈表中的該待處理ioid、設(shè)備id、端口id等信息,即執(zhí)行取鏈操作。

在步驟604,該sas控制器根據(jù)該待處理ioid并通過(guò)查表(如表4)方式得到io上下文內(nèi)容,包括待處理io對(duì)應(yīng)幀在存儲(chǔ)空間地址、io對(duì)應(yīng)幀長(zhǎng)度、偏移(offset)等信息。該sas控制器根據(jù)該設(shè)備id并通過(guò)查表(如表 5)方式得到設(shè)備相關(guān)內(nèi)容,包括與該設(shè)備交互的端口id、該設(shè)備在sas域中地址等信息。

在一個(gè)示例中,該sas控制器在查看到有sas通路空閑時(shí),該sas控制器將待處理ioid、設(shè)備id發(fā)送至sas通路的dmac中。dmac通過(guò)查詢記錄io上下文內(nèi)容的表項(xiàng)(參見(jiàn)表4),得相應(yīng)io上下文內(nèi)容。dmac根據(jù)該設(shè)備id,查詢記錄sas域中掃描到的所以設(shè)備相關(guān)內(nèi)容的表項(xiàng)(參見(jiàn)表5),得到目標(biāo)設(shè)備相關(guān)內(nèi)容。

在另一個(gè)示例中,sas控制器通過(guò)查詢記錄io上下文內(nèi)容的表項(xiàng)(參見(jiàn)表4),得相應(yīng)io上下文內(nèi)容;以及根據(jù)該設(shè)備id,查詢記錄sas域中掃描到的所以設(shè)備相關(guān)內(nèi)容的表項(xiàng)(參見(jiàn)表5),得到目標(biāo)設(shè)備相關(guān)內(nèi)容。該sas控制器在查看到有sas通路空閑時(shí),將該io上下文內(nèi)容、設(shè)備相關(guān)內(nèi)容發(fā)送至sas通路。

在步驟605,該sas控制器根據(jù)該io上下文內(nèi)容,包括待處理ioid、io對(duì)應(yīng)幀在存儲(chǔ)器中的地址、幀長(zhǎng)度等信息,得到存儲(chǔ)空間中的相應(yīng)數(shù)據(jù)幀或命令幀。此外,該存儲(chǔ)空間的數(shù)據(jù)幀、命令幀是上層軟件寫(xiě)入至該存儲(chǔ)空間中的。

在步驟606,該sas控制器將該數(shù)據(jù)幀或命令幀通過(guò)其檢測(cè)到的空閑sas通路經(jīng)由該sas控制器的端口搬移至目標(biāo)設(shè)備中;其中,該端口id即為步驟605得到的與該設(shè)備交互的端口id,該目標(biāo)設(shè)備地址即為步驟605得到的該設(shè)備在sas域中地址。

以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1