230 likes | 312 Views
在硬體中的作業系統及在 眾核 晶片中的動態資源管理. 黃 翔 Dept. of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C 2012.11.19. 摘要. 本文探索在 OS 問題上的討論支援當實行並行控制時設計給多核或眾核晶片處理器的指令集層級。 這裡介紹了 SVP 模型以及它在 DRISC 處理器中的成果。 本文的議題包含了工作排程、動態資源管理、記憶體保護與安全防護。 結論是在一個處理器的指令集中去作並行控制的成果是相當分裂的 (disrupt) 。.
E N D
在硬體中的作業系統及在眾核晶片中的動態資源管理在硬體中的作業系統及在眾核晶片中的動態資源管理 黃 翔 Dept. of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C 2012.11.19
摘要 • 本文探索在OS問題上的討論支援當實行並行控制時設計給多核或眾核晶片處理器的指令集層級。 • 這裡介紹了SVP模型以及它在DRISC處理器中的成果。 • 本文的議題包含了工作排程、動態資源管理、記憶體保護與安全防護。 • 結論是在一個處理器的指令集中去作並行控制的成果是相當分裂的(disrupt)。
引言-技術與架構 • 我們需要的是一個有系統的方法,它可以捕獲並行性作為一個抽象過程(程式設計)以及在它的處理器成果上能表現出映射與排程性(並行性工程)。 • 並行性需要去確認、捕獲、分配、同步以及規劃。 • 這是一個循環的問題,由於當需要再程式化時,底層的參數就要改變(例如: 處理器的數量、記憶體組織的形式、通訊的延遲率及並行性等等)。
引言-可程式性 • 針對這項工作的協會在這提出了在嶄新計算機架構上的研究。 • 主要的觀念是從通訊中分離指令的執行(包含從記憶體存取資料),因為這能從必須靜態的規劃每一個運算中去減輕程式設計者或是編譯器的工作。 • 在1996年中所提出的一個嶄新的處理器架構DRISC可以實現這個目標。 • DRISC的第一個模型相當受限,但是已經從一個處理器的模型到一個基於微執行緒的抽象程式化模型中精製(refine)出來。 • 這個模型已經在AETHER計畫中被採用作為SANE虛擬處理器(SVP),SANE從Self-Adaptive Network Entity取得。 • SVP模型標註議題像是並行程式的安全構成、死鎖的避免以及使通訊與局部性曝露在一個抽象的方法中去由編譯器所管理。 • 在限制通訊部分上使得問題變得靜態,甚至是在動態地排程並行性的時候。
引言-分裂 vs. 漸進主義 • 實現在一個指令集層級上的計算模型是分裂的,並且在系統層上呈現出許多難處。 • 其中一個最大的議題是如何程式化眾核系統。 • 並行性選取,是一個相當好的研究範圍,並且,語言的編譯像是C到SVP逐漸成為一個事實,它抽象了並行性且針對有效的分析提供了一個在局部的管理(handle)。
在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(1/4)在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(1/4) • SVP模型藉由捕捉在動態的並行創造(creation)上的反映來擴展微執行緒的模型。 • SVP捕捉並行性遍及在計算機系統中的所有級別,即OS、可程式化的模型、執行模式下的微結構模型。 • 藉由一個create動作來構成。 • 有鑑於在序向模型中我們有多個迴圈及多個函式呼叫,在SVP中它們藉由創造一個或是多個使用了一個這個動作的執行緒來完成。 • 這些執行緒與創造的執行緒一起並行執行並且會捕捉及重視在他們之間的資料相依。 • 這個在SVP中的構成是並行且動態的。 • 在模型中的一個程式可以看成是一個動態展開的並行樹,如圖1。
在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(2/4)在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(2/4) Fig. 1. 在SVP中,多個程式的並行構成,節點代表執行緒,分支代表並行構成。
在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(3/4)在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(3/4) • Create動作建立在一個單執行緒的定義上,並且它的事件被說明在圖二中。 • 創造的執行緒A執行一個create動作,這個動作非同步的創造一個有次序的執行緒集合,B0到Bn,並且受到資源的限制,即不是所有的執行緒會同時創造。 • 在創造的執行緒A中的第二個事件是當所有在家族中的執行緒已經終止,以及它們已經更新的分散式記憶體被明確定義。 • 這藉由一個sync動作來捕獲。 • 執行緒A與任何它所創造的家族並行且非同步的執行,但是A在使用任何家族在記憶體中產生的結果之前,必須等待與它所創造的家族相關聯的多個sync的動作。 • 未受限的家族代表著動態的迴圈將執行一個break動作,它會終止在任何被創造的執行緒中。
在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(4/4)在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的組成(4/4) Fig. 2. 數個事件的說明,他們發生在創造一個家族的多個執行緒中, 其中波浪線代表多個指令的一個執行緒的順序。
在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的通訊(1/2)在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的通訊(1/2) • 執行緒是等待的(blocking)且參與在使用一個等待讀取的同步通訊中。 • 這個在執行緒之間的細粒度通訊會謹慎地限制,以致於通訊被局部化且會曝露(expose)給編譯器。 • 通訊被限制在一個家族的索引順序中接續的執行緒之間。 • 創造的執行緒A,在圖二中,可能只寫入資料到家族中第一個被創造的執行緒B0,這執行緒將會去等待在第一個需要那筆資料的動作上。 • 執行緒B0可以依次寫入到下一個在索引順序中的執行緒等等,以至於每一個執行緒寫入到在索引順序中的下一個直到我們到達Bn。
在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的通訊(2/2)在處理器ISA中的並行性-微執行緒或是SVP模型-SVP中的通訊(2/2) • 在一個多核的SVP模型的實現中,最後一個通訊的形式是壓縮在create中的實現,這是發生在一個計算和多個它所用的處理器之間的一個結合。 • create確定性地(deterministically) 分配多個執行緒到一組處理器在一個place上。 • 兩個特別的place被定義在SVP中, • Defaultplace,在一個DRISC眾核晶片中,它分配多個執行緒到相同的處理器集合,作為創造的家族執行緒,然後 • Localplace,它放置所有被創造在相同處理器上的執行緒作為創造的執行緒。 • 最後SVP支援namedplace,它由place伺服器設置,隨後會使用在一個create的動作中,它分派家族執行緒執行到一組新的處理器。 • namedplace透過一個資源管理系統的呼叫動態地設置,即在一個使用這分派機制的多核DRISC處理器中的處理器(和記憶體)資源的管理。
在處理器ISA中的並行性-微執行緒或是SVP模型-並行性的反映(1/3)在處理器ISA中的並行性-微執行緒或是SVP模型-並行性的反映(1/3) • 為了在SVP模型中提供一個並行構成的終止,對於在反映(觀察及控制)上需要一些形式的並行管理。 • 這必須去實現從計算到資源的動態結合。 • create, sync和break動作已經被描述。除了這些,另外再加入兩個動作到執行緒的家族中,命名為kill和squeeze。 • kill終止一個遺失它的狀態的家族執行緒,以及 • squeeze藉由確認及捕獲一個中間的狀態來終止一個家族,以至於家族可以從那個點去重新執行在不同的資源上。 • 這兩個動作執行在一個獨立且非同步的控制執行緒,它監控一些計算的方面或著它的環境(見圖3)。家族在SVP中需要確認這些動作,並且對於這我們定義一個家族的確認器。
在處理器ISA中的並行性-微執行緒或是SVP模型-並行性的反映(2/3)在處理器ISA中的並行性-微執行緒或是SVP模型-並行性的反映(2/3) Fig. 3.使用了 named 多個家族的多個執行緒以及並行性控制的反映。
在處理器ISA中的並行性-微執行緒或是SVP模型-並行性的反映(3/3)在處理器ISA中的並行性-微執行緒或是SVP模型-並行性的反映(3/3) • 管理非同步的並行也需要觀察到這些動作。 • 舉例:root在圖3中需要去知道work是否由control 被squeeze或者它是否執行到結束,以至於如果需要它時可以從它的squeeze狀態重新創造工作來完成。 • 在SVP中,這藉由定義一個回傳碼來完成,並且有時候一個回傳的值會經由sync動作給創造的執行緒。 • 回傳值確認家族是如何終止(normal, break, kill, squeeze)以及一個回傳的值由break和squeeze設定。 • 在前者,接替在break執行後的執行緒設置”回傳”值(執行緒為這競爭)以及 • 在squeeze,它捕捉一個在索引順序中獨特的點,這順序的計算會適當的終止。 • 在一個傳統的處理器中,這些動作將由使用者在OS中控制,但在一個DRISC處理器中,這些動作被實現在它的ISA中作為多個指令,這表示安全的議題必須也處理在一個ISA中的指令層級之上。
針對Microgrids基於SVP的OS-一般原則 • 一個OS去支援軟體在非同步並行系統中的方法: • 核心將正常支援工作的提交/終止、同步和通訊,並且它可能也支援多任務的排程以提供在通訊及同步中長潛伏期的容忍。 • 我們考慮實現在一個DRISC處理器的SVP模型。 • SVP的實現也提供給任務的排程,在這模型中一個排程(或是我們所稱作的unit of work)是一個create動作的結果。 • 在SVP的DRISC實現中,潛伏期容忍在指令層級,由於等待在一個通訊或記憶體讀取上的任何指令將阻塞(block)並導致它的執行緒中止直到資料是可用的。 • 公平性建立在指令集中,因為沒有執行緒可以獨佔它正在執行的處理器。 • 在一個實現SVP的DRISC處理器中,工作優先權的概念可以藉由映射程式碼到一個數量的處理器上來完成在一個Microgrid中。
針對Microgrids基於SVP的OS-資源管理(1/4) • 一個SVP的創造採取它的主要參數當作一個執行緒定義。 • 家族的範圍定義三個參數為一組{啟動,極限,步驟},這定義了執行緒的數量以及每一個索引的值,以及最後,一個區塊的大小限制了分配至一個處理器的執行緒數量在任意的一個時間上。 • 此外,create有一個參數,它回傳一個家族的確認器去確認它以及一個place定義的家族將在哪執行。 • 於μTC語言的例子,創建一個家族的100個執行緒(index=0…99 by1)在default place 與不超過每個處理器10個執行緒一起。 family f1; ... create(f1; ; ; 0; 99; 1;10) thread_def(...); • 為了去討論資源管理,相互排斥的SVP的實現必須去定義。 • 在SVP中,互斥的實現遍及在多個位置。一個互斥位元在一個place的變數中,當設置時,保證不超過一個工作單位在一個時間上可以創造在exclusive的位置。
針對Microgrids基於SVP的OS-資源管理(2/4) • 我們假設一個系統環境位置(SEP),是一個互斥的位置,這place處理器使用的模型被維持與更新透過來自並行的執行緒的串接請求。 • 接下來的例子說明了一個執行緒如何取得一個新的place並且分派一個工作單位到那place。 family f1, f2; place new_place; intnum_proc=8; create (f1; SEP;; 0; 0;1;1) SEP_allocate(new_place, num_proc); sync (f1); if (num_proc >0 ){ create (f2; new_place; ; 0; 99; 1; 10) thread_def(...); ... sync (f2); create (f1; SEP; ; 0; 0;1;1) SEP_release(new_place); } else ...;
針對Microgrids基於SVP的OS-資源管理(3/4) • 以下我們說明對於任意的執行緒從一個最初的SEP取得的pool去設置一個新的SEP來配置資源是如何簡單。 • 在這例子中,創造一個新的SEP去控制處理器的配置在一些程式的子樹中。 • 去做這另外的非計算上的類型,使用了pool,以及一個請求被產生給使用了SEP_partition的處理器的一個pool配置,這配置了一組未組態的處理器。 • 一個新的SEP之後使用這pool去初始化。
針對Microgrids基於SVP的OS-資源管理(4/4) family f1, f2; place new_place; pool new_pool; intnum_proc=64; /*allocate pool of processors*/ create (f1; SEP;; 0;0;1;1) SEP_partition(new_pool, num_proc); sync (f1); if (num_proc >0 ){ /*initialise new SEP using that pool and redefine the SEP*/ create (f2;local;0;0; 1;1) SEP_init(new_place, new_pool); SEP = new_place; ... num_proc=8; create (f1; SEP; ; 0; 0) SEP_allocate_local(new_place, num_proc); sync (f1); if (num_proc >0 ){ create (f2; new_place; ; 0; 99; 1; 10) thread_def(...); ... sync (f2); create (f1; SEP; ; 0; 0;1;1) SEP_release(new_place); } else ...; }
針對Microgrids基於SVP的OS-記憶體保護(1/2) • 要使得並行系統成為主流,一些保護的形式是極重要的,因為我們將確定有多位使用者並行地執行工作在相同的晶片上,甚至他們可能執行在不同的處理器上。 • 在SVP中共用的記憶體模型將仍然允許他們去相互干涉。 • 一個給虛擬記憶體以及符合位址的轉譯的替代方法是一個單位址空間的概念。 • 一個單位址空間OS(SASOS)管理一個全系統的位址空間。 • 這方法預測在一個事實上,位址搜索(addressing)及記憶體保護是兩個不同的議題,他們可以藉由分開的機制去解決。 • 在一個SASOS中,記憶體保護會從位址搜索中分離。 • 在許多的SASOS系統中,程序運行在一個保護區域中(PD)。 • 因此,即使一個程序能夠尋址任何的資料項目遍及整個系統,OS也能夠去檢查是否一個記憶體的存取應該被允許,並且在一個無效存取的事件中,豎起一個保護的例外。 • 這方法的優點是使得安全性容易達成在程序間資料的共用,而這些程序互相不完全的信任。
針對Microgrids基於SVP的OS-記憶體保護(2/2) • 在SVP的DRISC成果中,我們研究SASOS方法。 • 我們定義了記憶體islands作為使用了base-rage pairs的記憶體鄰近的範圍,它們的存取權已經被設定(例如:讀、讀/寫、摧毀等等)。 • 一個記憶體保護domain之後定義為一個islands的清單,一個工作單位被允許存取的islands。 • 每一個家族關聯至一個保護區域,並且這個資訊使用在任意的指令上,這些在錯失了L1快取後會去存取保護的表單。 • 我們也使用一個小的快取在這表單上類似於一個傳統的TLB,它快取至保護表單上的項目。
針對Microgrids基於SVP的OS-安全性 • 在SVP中,我們所採取的方法建立在一個能力的概念上。 • 一個能力可以比作一把鑰匙,它必須被提出以為了獲得存取一個主要的目標、伺服器或是設備。 • 當一個家族被創造,創造了這家族的執行緒回傳一個家族的確認器,Fid。這個確認器必須呈現兩個功能。 • 第一個是去確認在它的情境中的家族。 • 這歸併至一個處理器的確認器中,Pid,並且把那處理器的家族表編進索引中,FTi。因此Fid包含變數值組:{Pid, FTi}。 • 第二個在Fid上需要的是提供一把鑰匙去分辨在相同的處理器上相同家族表的項目的不同情況。 • 在完成的kill和squeeze動作中,我們標記需要再使用的家族表單的項目,因為Fti並非一直是唯一的。 • 由於這些動作是非同步的,一些額外的確認需要去防護這些運算。 • 所以在執行一個create動作時,硬體隨機產生一把鑰匙,Cap,儲存著其他在家族表中的資訊。Fid現在變成變數值組{Pid, FTi, Cap} • 一個執行緒必須呈現完整的確認器,他們從哪一個Cap被選取以及與儲存在家族表中的項目相對應。
結論 • 在本文中,我們已經歸納出我們所用的方法在發展的DRISC微處理器中,它們支援了並行控制指令在它的ISA層級上。 • 這些處理器被明確的設計去提供一個一致性的硬體基礎架構給多個甚至眾核晶片。 • 由於我們繼續進行這些處理器的實現,我們已感到意外在於這些方法已經是如此的分裂了。