SAS Expander的路由表概觀

    內容表格
    沒有標頭

    版本為 10:08, 20 Feb 2025

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    SAS Expander標準允許路由表的建立, 這個作用在於面臨路徑選擇的時候, 必須要依賴路由表的使用. 由於direct routing和subtractive routing無法應付這樣的情況.
    expander_routing.gif
    從上圖這個案例可以看到三種路由算法的使用, 一個Edge Expander Device Set可以看做是一個could. 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物件, 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, 因此他先記錄. 

      0 1 2
    0  A    

    這時已經獲取到A的entry物件 

    Powered by MindTouch Core