• 沒有找到結果。

作業系統的記憶體分頁管理機制對 BODAR 的影響

第四章 討論與改進

4.2 作業系統的記憶體分頁管理機制對 BODAR 的影響

由於記憶體管理與作業系統和硬體緊密相關,而BODAR 一改過去的 記憶體配置方式,故在這節中我們討論一些作業系統設計上對BODAR 效 能所造成影響的因素。

4.2.1 Page Reclaim 對效能的影響

由於虛擬位址空間大小通常大於實體位址大小,再加上每個程序都有 自己的虛擬位址空間,所以虛擬位址空間無法ㄧ對ㄧ的分配到實體位址空 間中,所以需透過一個轉換與置換機制,以保證每個程序都能正常使用所 有的虛擬位址。

當程序想要存取某個虛擬位址時,若該位址所屬的虛擬分頁沒有對應 實體分頁,作業系統會試著從實體記憶體中選取未被配置出的實體分頁並 分配給該程序,成功的話由於該分頁被重新配置,故稱做page reclaim;若 失敗則表示記憶體中無法找到未被配置出的實體分頁,發生page fault,則 作業系統必須將部分的分頁置換到硬碟中,以空出實體記憶體的空間。

比較BODAR 與原來的記憶體分配方式。原來的 malloc函式中以 first-fit 原則將一個分頁中會存放許多小型的緩衝區,即是說要配置好幾個 緩衝區才會發生一次page reclaim。但在 BODAR 中,如之前提過的,一個 緩衝區不論大小都至少會需要配置一個實體分頁,每次新配置一個實體分 頁都是一次page reclaim。故應用程式中配置的小型緩衝區多時,page reclaim 會對受 BODAR 保護的程式的效能造成不小影響。

0 100 200 300 400 500

Normalized execution time

Page reclaim times

Original SPA CRED

圖4-2 不同版本 gawk 在執行過程中的 page reclaim 次數統計

圖4-2 顯示三種不同版本的 gawk 執行 S 腳本程式對 30 萬行紀錄檔統 計的結果。縱軸為page reclaim 的次數,橫軸為程式的正規化執行時間 (normalized execution time)。可見到 CRED 與原來版本的 page reclaim 次數 相當低,而BODAR 版本不斷的發生 page reclaim。總計 gawk-BODAR 的 page reclaim 次數約為 68780 次,而程式約配置了 67325 個分頁,故我們可 以合理推測幾乎每次配置緩衝區時就會發生page reclaim。

受BODAR 保護的程式亦有可能發生 page fault,當實體記憶體不足以 提供程式的需求時就會發生,因為它會進行硬碟存取,這對受BODAR 保 護的程式的效能影響將更為嚴重。不過在我們的實驗中並沒有發生此一狀 況。

4.2.2 TLB(Translation Look-aside Buffer)對效能的影響

圖4-3 虛擬位址對應實體位址的轉換機制

資料來源:Intel Architecture Software Developer's Manual vol.3

圖4-3 顯示在 IA-32 架構 CPU 中作業系統的虛擬位址轉換機制,通常 為兩階層分頁模式,第一層稱為分頁目錄(page directory),第二層稱為分頁 表。兩階層的目的是避免把全部的分頁表連續的放在記憶體中而浪費記憶 體。當虛擬記憶體位址要轉換為實體記憶體位址時,先從分頁目錄中得到

所屬的分頁表位址,再向分頁表查詢所屬分頁,最後加上位移量。為了要 加速此一過程,通常硬體會提供關聯式記憶體TLB 做為快取,把最近使用 的分頁目錄和分頁表的項目存放在其中。

當緩衝區以原來連續且緊密的方式配置時,小於2048 的緩衝區通常以 chunk 的方式分配到各個分頁中,而 1024 個分頁才會使用到下一個分頁目 錄項目,所以分頁目錄與分頁表中使用的項目會很少並且較為頻繁,較能 長時間置於TLB 中而加速位址轉換。相反的 BODAR 卻以離散的方式配 置,一開始的1024 個緩衝區幾乎都位於不同的分頁目錄上,分頁表的情形 也一樣,造成分頁目錄與分頁表中使用的項目增加許多,越多的項目會使 得快取的效果降低。結果就是只能靠作業系統作位址轉換,降低了程式執 行的效能。

相關文件