Was this page helpful?

SAS Expander的路由表概觀

    內容表格
    沒有標頭

    SAS Expander標準允許路由表的建立, 這個作用在於面臨路徑選擇的時候, 必須要依賴路由表的使用. 由於direct routing和subtractive routing無法應付這樣的情況.
    expander_routing.gif
    從上圖這個案例可以看到三種路由算法的使用, 一個Edge Expander Device Set可以看做是一個cloud. Expander B和C的downstream直接銜接end devices, 所以使用no routing的direct routing建立通訊即可. 當Expander B和C往upstream通訊的時候, 由於這並非存在於本身的既有目的端位址集合, 也就是說他必須要跨Expander通訊, 例如一個來自Expander C的請求發送至Expander B的目的端-某個target port對應, 由於Expander B上某個target port的SAS Address是不可能存在於Expander C上, 因此使用Subtractive routing來轉發送到Expander C.

    No routing的direct routing和Subtractive routing都可以看出一種共通的情況, 那就是他們都不會面臨路徑選擇, 也就是只會有1對1的情況下, 當遇到路徑選擇的時候, 前面兩個路由算法就不適合使用了. 在SAS Expander標準下便改使用一種routing table紀錄的方式來提供更大範圍的裝置數量存取. 上圖的案例, 在Expander A轉發送請求, 面對downstream發生了路徑選擇的情況, 這時候無法去判別請求的目的端是屬於哪一個Expander(B or C???). 改用routing table記錄每個downstream的SAS Address便可解決這個問題, 也就是使用table routing算法. 下面另一個不太好看的HP案例可以看到使用了routing table進行downstream的SAS Address紀錄.
    hp_table_routing.gif
    在說明這個案例的routing table應用以前, 必須要先知道routing table的綱要是如何定義的, 也就是table的metadata. 來自HP的一份SAS標準文件提供這方面的紀載, 如下所示:
     routing_table_definition.gif
    首先說明table上的row與column的header定義, 在每個column的header定義了在Expander上每個實體輸出的對應端口賦予的唯一識別代碼. N<=number of phys -1, 由於索引(index)是從0開始計算, 所以必須減1; 而row的header就是對於每個的路由索引(route index), 路由索引值集終值會是索引值集合數量去減1得出, 因為索引值要從0開始計算.Expander route entry代表抵達的路由位址, 由column與row定址過後取得, entry包含了被蒐集的SAS Address以及開關位元資訊.
    1. column header: 對於Expander上每個實體輸出賦予唯一的識別碼
    2. row header: 對應到expander route entry所在位址的Expander路由索引(route index)
    3. expander route entry: 透過column和row定址的每個Expander路由個體(route entry). 包含SAS Address和開關位元.

    說明了table的綱要以後, 或許概念上可能還迷迷糊糊, 還是有很多疑問, 這邊將透過一個範例來說明table如何做routing, 使得在概念上更為清晰. 自製的一個範例圖如下所示, 這個範例圖比HP的案例較為簡單:
    table_routing_sample1.gif
    看到這張範例圖或許會有一個疑問, Es1-M是甚麼意思呢? T0-L是甚麼? Mf又是做甚麼意思? 一整個就是可能完全看不懂! 沒關係, 分別來解釋這些代號的意義.
    expander_phy.gif
    在上圖這個橢圓圖案代表expander或著end device對應的合法輸出(eligible output PHY), 裡面的關鍵詞彙有不同的意義存在. 來分別列舉說明這些詞彙.
    1. type: 表示合法輸出的類型, 例如T表示Terminal, 終端設備, 也就是end device; 而E就是Expander了
    2. routing: 中括號刮起來表示optional, 這個意指所使用的routing method. 例如s表示使用subtractive routing; t則是table routing. 如果不存在為連接end device, 使用no routing的direct routing.
    3. index: 這個就是table上記載的expander route index
    4. entry: 同樣表示table上的expander route entry. 這個entry必定是合法的, 且他是目的端的entry別名.
    了解PHY物件所代表的含意以後, 在看方框圖案所代表的涵義.

    expander_entry.gif
    方框圖案本身就代表這個entry, 也就是硬體的實體, 他可能是end device或著Expander, 是抽象化的觀點. 這個entry物件的重點在於有包含SAS Address和開關位元的資訊, 用來對應table的expander route entry. entry物件本身可以包含多個PHY物件, 表示這個entry存在的PHY輸出. 接下來分別說明entry物件裡代表的詞彙意義.
    1. entry: 表示這個對應到expander route entry的別名. 他會與合法的PHY物件有關聯性.
    2. ext_type: 這是optional, 代表對這個entry物件所描述的Expander類型, 如果這個值存在, 那他會是Expander物件. e表示edge expadner; 而f表示fanout expander.

    說明完這兩個物件的涵義後, 來看上面的範例圖. 會看到有存在指向性的箭頭圖案, 這表示一個entry物件連接到另一個enrty不同流向請求會使用的路由方法. 這裡不說明這些路由方法, 只要記住幾個要點即可:
    1. fanout expander: 如果在downstream面對的是Expander, 則使用table routing; 否則面對的是end device, 會改用direct routing. fanout expander不允許使用subtractive routing, 這點要注意.
    2. edge expander: 在1對1情況下面對expander會使用subtractive routing, 否則存在路徑選擇的情況下改使用table routing, 當面對的是end device的時候, 則直接使用direct routing.
    3. end device: 面對expander時都是使用direct routing.

    接下來我們就要說明上面的範例圖了. 在其中我們知道Mf的entry物件表示為fanout expander, 不允許使用subtractive routing, 只能使用table routing, 因此會創建一份routing table來定址, 這張table就是這邊主要說明的部分. 首先, Mf物件包含3個PHY物件, 其中兩個分別與對向的expander物件連接, 先說明Et1-M的PHY物件.

    Et0-K表示為expander M的PHY物件, route index為0, 使用table routing, 流向目標為名稱K的entry物件. 根據route index的順序, 先優先紀錄K物件存在的PHY物件. 可以發現expander K物件存在兩個PHY物件, 一個為Es1-M; 另一個為E0-A. 已經發現了兩個PHY物件要記錄在Mf物件的routing table上, 要如何紀錄呢? 先按照route index的順位, E0-A物件的route index為0, 因此他先記錄. 
    route_step1.gif

    這時已經獲取到A的entry物件, 再來expander K物件便剩下一個PHY物件尚未記錄, Es1-M表示expander K的PHY物件, route index為1, 流向目標為返回的expander M物件, 由於他對向expander, 而且又是1對1的情況, 因此使用subtractive routing. 將這個PHY記錄在Mf物件的routing table上.
    route_step2.gif

    Mf物件已經完成對expander K的資訊收集, 接下來換expander L物件的資訊獲取. Et1-L為Expander M的PHY物件, route index為1, 使用table routing, 流向L的entry物件. 可以看到expander L有兩個PHY物件, 一個為Es0-M; 另一個為E1-B. 首先紀錄Es0-M, Es0-M表示為expander L的PHY物件, route index為0, 使用subtractive routing, 流向目標為返回的expander M物件.
    route_step3.gif

    紀錄Es0-M物件之後, 剩下E1-B物件尚未被記錄. E1-B物件可以看出為expander L的PHY物件, route index為1, 沒有使用任何routing method, 因此可以判定它流向的entry物件為end device- B. 把他將其紀錄至Mf的routing table.
    route_step4.gif

    在這些獲取操作之後, 已經完成Mf物件的routing table建立, 不過可以發現有一個比較特殊的Et2-?物件, 由於他沒有與外界做任何溝通, 因此這個PHY可以略過不考慮. 之後Mf物件便可依據該table使用table routing來操作某個請求(request)的尋址. 到這裡已經說明了前面範例圖上的routing table建立與方法, 各位可以休息一下並且稍微思考與組織, 因為接下來前面之前提到的HP案例會稍微複雜許多, 因為它會使用好幾個expander物件並且有更多的PHY物件存在, 所以在理解上需要更多時間.

    因為HP的這個案例比較複雜一些, 所以在另一子頁面進行說明. 可以從以下連結點擊.
    http://www.osslab.com.tw/Storage/Enterprise/SAS%E8%88%87RAID/Protocol/SAS_Expander%E6%8A%80%E8%A1%93/SAS_Expander%E7%9A%84%E8%B7%AF%E7%94%B1%E8%A1%A8%E6%A6%82%E8%A7%80/HP%E7%9A%84%E8%B7%AF%E7%94%B1%E8%A1%A8%E6%A1%88%E4%BE%8B

    Was this page helpful?
    標籤 (Edit tags)
    • No tags
    查看第1個(總1個)評論: 查看所有
    Thank you!
    發佈時間 15:34, 17 Jan 2012 ()
    查看第1個(總1個)評論: 查看所有
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core