2013.05.07 10:10

把整個作業系統放進記憶體裡,RAM OS 讓讀寫效能快10倍

ADVERTISEMENT

翻開多數的RAM Disk教學,大部分都會告訴你:把暫存檔放到記憶體、把置換檔放到記憶體、把龐大的遊戲資料檔放到記憶體。只是RAM Disk的應用也不是一日兩日了,還在搞這些玩法難免顯得八股。

快速瀏覽:

  • 淺談Windows記憶體管理機制

把系統碟放進RAM Disk

「把整個作業系統都搬到記憶體」這種形容有點模糊,更精準的說法是「把系統碟放進記憶體」,讓作業系統一開機就是從記憶體載入,甚至還能達成「零硬碟系統」,是不少電腦教室風行已久的佈署模式。

怎麼放?當然不是直接把C槽的內容都拷貝到RAM Disk裡,針對不同的應用,可以衍伸出幾種不同的作法。比如:藉由VMWare來執行作業系統、用FBWF來達成磁碟防寫、其至一開機就直接從記憶體裡完成作業系統的載入程序等,各自有不同的限制及效能差異。

ADVERTISEMENT

先買幾條RAM再說吧

既然是要把整個作業系統都放進RAM Disk,記憶體的使用量自然不能太小氣,即使你最後決定不這麼玩,還是會需要充足的記憶體來維持系統效能。很多人會錯估、或者說是小看了記憶體對於系統穩定性的影響,以為只要不超頻,就只需讓它達到夠用的容量就好,其實這是很要不得的觀念。

挑幾支穩定性佳的記憶體除了能避免當機,也能減少作業系統的除錯時間,減低了因為記憶體錯誤而造成的效能損失。讓作業系統在硬碟裡執行就是如此,更何況全部載入記憶體裡的風險會更大!一有閃失可是連存檔的機會都沒有。

ADVERTISEMENT

▲測試平台:筆者在進行本篇專題所需的測試時,使用的是Team(十銓)的DDR3-1333 8GB x 4。要提醒讀者的是,不必為了RAM Disk超頻或刻意買出廠時脈就較高(如1600、2100)的記憶體,因為你感受不到速度落差。

淺談Windows記憶體管理機制

電腦要裝多少記憶體才夠用?大家不妨可以馬上做個實驗:用2GB的記憶體來開機、以及用4GB的記憶體來開機,然後觀察其記憶體使用量及置換檔大小的增減情況,情況絕對會出乎原本意料。

彈性配置是管理精神

這裡直接說明答案:「你猜不透的」,Windows會彈性調配記憶體使用量來達到最佳使用效率及安全性,裝了4GB跟裝了2GB的模組,開機後剩下的可用容量可能不會相差多少,只是置換檔的負擔變小而已。系統效能可能會稍快一些,但能留給應用程式的空間仍然相當有限。

ADVERTISEMENT

光是一個瀏覽器開啟的入口網站分頁就可以用掉50MB的記憶體空間,加上其它不管是在前景或背景運行的應用程式、系統服務,真要耗盡4GB的記憶體是很簡單的。因為作業系統本身就會先佔用掉一大部分,再加上安全保留區,剩下的才是能讓使用者或一般程式肆意取用的空間。

當作業系統運行時,會從儲存裝置載入必要的資料到記憶體裡,一旦記憶體不足,就會需要先把部分資料回存到儲存裝置上。這裡的「回存」指的不是文件的存檔,而是程式的執行狀態,簡單的說就是把記憶體裡的內容傾印到硬碟上,以待下次呼叫,也就是比較狹義的虛擬記憶體。

Windows系統裡通常可以看到2個置換檔,1個是用來傾印整個程序的swapfile.sys,另一個則是保存部分程序的pagefile.sys,兩者在回存時的優先權不同,因為不是本文重點就不贅述。

ADVERTISEMENT

對於一般應用程式來說,它只會跟作業系統要記憶體,而不會、也無法自行管理。大家都知道主流作業系統會使用虛擬位址來管理記憶體,當虛擬位址所對應到的資料不是存放在真正的記憶體上時,會產生名為「pagefault」的錯誤,接著作業系統會再視情況到置換檔裡去取資料,於是就產生了頻繁而複雜的「應用程式」、「作業系統」、「記憶體」、「硬碟」之間兩兩的資料交換動作,確實是拖累存取效能的主因之一。

沒把握別動置換檔

所以了,擁有足夠的記憶體是避免存取效能低落的治本之道。部分情況下,可能會因為使用固態硬碟而感受不到置換記憶體所帶來的效能落差,其實是固態硬碟代為吸收了繁重的存取工作,對於讀寫次數敏感的玩家來說當然無法接受。

記憶體本就不足的系統,除了讓系統自動管理置換檔外,沒有其它更好的方法。前面已經提過了,畫出1塊RAM Disk來放置換檔是很蠢的行為,至於直接將置換檔關閉、或縮減其大小更是萬萬不得,一旦作業系統失去了這個緩衝機制,任何應用程式都可能隨時崩潰。

至於記憶體夠用的系統,筆者還是建議讓系統自行管理,由於Windows並不會等到實體記憶體真的全用完了才開啟虛擬記憶體,這代表只要置換檔是開啟的,Windows預設就不會把記憶體完全用完,因為善用記憶體比耗盡記憶體更重要。

虛擬記憶體的定址關係

虛擬記憶體的運作方式示意。應用程式透過作業系統創造的虛擬位址來存取實體與虛擬記憶體(Pagefile/Swapfile.sys),同時實體記憶體與虛擬記憶體之間也會不斷地交換資料(紫線)。

下圖則是將分頁檔放進實體記憶體後,資料的傳遞方式。紅線先透過虛擬位址去找實體記憶體裡的分頁檔的實際位置,找到以後再透過1次藍線虛擬位址去對應分頁檔裡的資料,光聽敘述就很複雜,實際運作起來更可能會產生一些問題。

虛擬機器:最簡單的RAM OS玩法

實作RAM OS,最簡單的作法就是透過虛擬機器,但透過虛擬機器運行的RAM OS、或放進RAM Disk執行的虛擬機器,效能真的有比較好嗎?

管理及掛卸載方便

透過虛擬機器最大的優勢是管理容易。我們可以準備多個映象檔,將映象檔丟進去就能讀取執行,在需要頻繁的測試軟體時非常好用。

比較麻煩的是回存問題,這就要牽扯到映象檔的種類。其實就連RAM Disk的建立軟體來說,部分即支援將整個RAM Disk磁碟區當成映象檔處理,至在有資料寫入RAM Disk時就同步回存至映象檔裡,攜牲一點即時寫入速度確保安全性。

大部分的虛擬機器都無法掛載RAM Disk建立的映象檔,就算是先掛載成磁碟機,也無法直接當成虛擬機裡的系統碟,這是RAM Disk的先天限制。

所以了,最保險的方法是不要把RAM Disk當成系統碟,而是在RAM Disk裡放1個系統碟映象檔,再開啟RAM Disk的即時回存功能,就能避免關機或當機時資料遺失、也不必每次在關機時都要先把系統碟映象檔回存至硬碟。

這代表虛擬機器寫至硬碟的資料要經過好幾層轉換,好在除了最後一層外,都是在記憶體上做處理,不致於嚴重延遲寫入工作。另外存放系統碟用的映象檔最好使用「固定尺寸」,對於效能的耗損會比較小。至於RAM Disk工具,筆者推薦「ImDisk」,因為它免費、又能即時回存資料。

顯示效能仍然受限

透過虛擬機執行的RAM OS,有以下幾點限制:

讀寫效能損耗嚴重

因為虛擬機器的轉換效率是1層屏障,本來可能高達數GB/s的循序讀寫速度,可能會掉到只有幾百MB/s,隨機4KB讀寫一樣只會剩1/10水準。雖然如此,這些數據還是跟主流SSD差不多。

▲虛擬機的讀寫效能明顯經過嚴重損耗,約是無虛擬化的1/10,儘管也夠快了。

周邊裝置無法完整支援

虛擬機器多會支援「USB Pass through」機能,讓外裝至電腦上的裝置可以跳過母系統、直接由虛擬機裡的客體作業系統來管理。這個方法不是萬能,有些比較刁鑽的裝置是怎樣都無法透過虛擬機來使用的,比如特定的無線網卡、或是一些電視棒,都將無法支援。

顯示機能落後

只要顯卡廠沒提供驅動程式,GTS240與GTX295對於虛擬機器來說都一樣。就算不玩遊戲,作業系統對於顯示卡的要求仍然非常吃重的,比如視窗的特效運算、優化視訊記憶體以提高視窗的切換速度等,進入了虛擬機總是會覺得反應頓頓的,這都是無法使用VGA硬體加速造成的結果。

以上提到的幾點,跟RAM OS都沒有關係,純粹是虛擬機效率問題。即使在硬碟上、SSD上使用虛擬機也會發生,差別在於第1點的落差異常大。

虛擬機的系統碟存取架構

上圖是讓虛擬機直接存取實體磁碟來當作系統碟的方式,因為RAM Disk的掛載方式與一般硬碟不同,實作上有一定難度。下圖則是將虛擬機的系統碟存成映象檔,再放進用來儲存RAM Disk的映象檔裡,犧牲一點效能來換取管理上的方便。

延伸閱讀:

(後面還有:Boot in RAM:直接從記憶體開機)

ADVERTISEMENT