故障排除

MircoSoft Pagefile 的存在與否? Part 2

之前LEO發表過 MircoSoft PageFile.sys 存在與否的迷思 — Part 1之後就不斷的閱讀相關的資料,經過幾天的K書與請教朋友得到的一個結論是  Pagefile 確實有存在的必要,有興趣的朋友可以去看看恐龍書了解整個作業系統的原理,雖然不是針對Windows作業系統來講的,卻可以了解到一般的作業系統對於記憶體管理的方式為何?雖然講的很抽象,但可了解到基本的觀念與知識(難怪是本科系必讀的聖經呀!!!!)
為什麼LEO會說  Pagefile 確實有存在的必要,這是為什麼呢??????舉個例來說明
A程式大小假設為 50MB,當A程式被使用者執行的時候,會連附屬功能都被掛入有可能會吃到100MB,但是這100MB的功能並不會完全被使用者使用到,此時系統會將使用者用不到的功能推到SWAP上面降低RAM使用量,增加更多RAM SPACE方便系統載入更多的東西,這也是OS多工能力的基礎。這也是Pagefile存在的主要因素。
MS在Windows 3.0的時代開始引用了Virtual memory,的技術,當時是因為硬體昂貴因此衍生了拿硬碟空間來當作隨機存取記憶體(詳見註一)使用的技術,試圖在有限的資源裡面發揮最大的功用,這時候也奠定了各家軟體設計的基礎,當程式設計的時候核心的部分是指定OS保留在RAM當中,其餘非必要功能是交給OS管哩,OS要推入到Virtual memory上面那是OS的權限,程式設計人員能指定核心部分保留在RAM上,也可以將剩下的資料保存在RAM裡面,也可以將剩下的部分交給OS去管理,因此使用者根本不知道程式設計者是如何去分配的規則,更無法得知程是在什麼時間點會去動用Virtual memory。LEO開始找MS的相關管理文件發現MS並沒有公開相關資料的文件與資料,也因此無法得知MS在這部分管理的規則為何?也無法得知MS的核心在什麼情況之下會去判斷與處理。
經過時間的演變直到現在,大部分的程式設計邏輯,除了程式本身的記憶體分配法則其餘就是交給MS去做管理,換個角度來看MS會任意去存取隨機存取記憶體這部分。因此在所有MS所公開的文件幾乎都強調不可將隨機存取記憶體的值設定為0否則將會造成系統的不穩定(詳見註二)。況且程式在跑的時候用到許多資源, 這些資源屬性蠻多的, 不容易用一個數字表示吃了多少RAM,像是開檔讀取資料, OS管理一個 Handle 需要使用Ram, 讀取時其實它有預讀並 cache, 這些容量要算在誰身上呢?,因此隨機存取記憶體才會有存在的意義。
也如上所敘如果關閉隨機存取記憶體的話,誰也不能保證MS一定會去存取實體記憶體(因為根本沒有任何資料說明MS如何去管理與分配),或許這就是MS在公開的文件資料上不斷的強調不建議去關閉隨機存取記憶體(或許是因為不想公開相關資訊的另類說詞),也為何網路上有人會說就算關閉隨機存取記憶體,MS也會去偷偷開啟使用(因為沒人知道MS的系統核心怎麼去設計)。總而言之在無法得知MS系統核心運作的模式之下,真的不建議完全關閉隨機存取記憶體,除非MS公佈相關的資料才能知道其運作原理,不過我想有得等了。
至於隨機存取記憶體,是否要放置在RAMDISK之上,我想這個部分見人見智了,隨機存取記憶體放在RAMDISK的確可以提升系統處理的速度(詳見註三),但是因此被限制了可使用空間的大小,當隨機存取記憶體的使用量超過RAMDISK設定的大小,就會產生隨機存取記憶體不足的問題,因此就看每個人的使用軟體與習慣來自行決定了RAMDIISK與隨機存取記憶體的分配了。不過RAMDISK拿來放一些暫存檔是絕對能提升系統效能的,例如IE的暫存檔來說都是大量的圖檔,其實系統要存取這些資料還蠻消耗IO來存取這些資料,如果可以放置RAMDISK當中,的確可以改善許多(詳見註三),最明顯的感覺就是IE開啟網頁與切換網頁的速度大為提升。
以上只是LEO嘗試用比較白話方式來做的一個結論,由於LEO非本科系畢業的,只是透過閱讀之後與朋友討論所得到的一些結論,當然還有許多高深的專有名詞與解釋,但是這不在LEO想討論的範圍內,如果有小弟敘述錯誤的部分也歡迎各位批評與指教,這樣LEO才能知道自己的盲點在哪哩,也不希望因為這篇文章誤人子弟,那就不是LEO的本意了。
實驗一
關閉Pagefile之後,記憶體滿載之後仍然會跳出虛擬記憶體用完之訊息。

點我看大圖
實驗二
關閉Pagefile之後,記憶體滿載之後無法開啟 Photo Shop之訊息。

點我看大圖

註解

  1. 分頁檔 (Pagefile.sys) 是您電腦硬碟上的隱藏檔案,Windows XP 將其視為隨機存取記憶體 (RAM) 使用。出處 http://support.microsoft.com/default.aspx?scid=kb;zh-tw;314482
  2. 分頁檔完全關閉可能衍生出的問題
    如果您從開機磁碟分割完全移除分頁檔,Windows 會無法建立傾印檔案 (Memory.dmp),以致於無法在發生核心模式中斷 (STOP) 錯誤訊息時,寫入偵錯資訊。如果您必須偵錯以排解中斷 (STOP) 錯誤訊息的問題,這還會導致延長停機時間。出處http://support.microsoft.com/default.aspx?scid=kb;zh-tw;314482
  3. 如果要提昇效能,將分頁檔放到不同的實體硬碟上、不同的磁碟分割,會是個好方法。如此一來,Windows 能夠更快速地處理多重的 I/O 要求。當分頁檔在開機磁碟分割時,Windows 必須同時在系統資料夾與分頁檔上執行磁碟讀取與寫入要求。當分頁檔移到不同的磁碟分割後,便會減少讀取與寫入要求之間的競爭。出處http://support.microsoft.com/default.aspx?scid=kb;zh-tw;314482

延伸閱讀
3C軟體文章一覽表

關於作者

Leo

Leo

喜愛旅遊並沉迷科技應用數十年無法自拔的重度 3C 上癮者!

5 回應

  • 如果要提昇效能,將分頁檔放到不同的實體硬碟上、不同的磁碟分割,會是個好方法。如此一來,Windows 能夠更快速地處理多重的 I/O 要求。當分頁檔在開機磁碟分割時,Windows 必須同時在系統資料夾與分頁檔上執行磁碟讀取與寫入要求。當分頁檔移到不同的磁碟分割後,便會減少讀取與寫入要求之間的競爭。出處http://support.microsoft.com/default.aspx?scid=kb;zh-tw;314482
    那麼這是說用ramdisk 分成2個drive 效果會更好嗎?
    如:R:256mb+S:256mb 的pagefiles
    版主回覆:(11/22/2009 03:48:55 PM)
    不會更好。
    你看完微軟的解釋之後去想想RAMDISK與硬碟,是一樣的嗎?????

  • 請教:
    依註解3,若在nb的pcmcia增加一個ASKA CF32F的轉卡,並加一張233X的CF記憶卡,而將分頁檔指定至此記憶卡,那不知這樣能提效效能嗎?!
    另,若在開機前此指定的記憶卡壞掉或未安置,這樣會造成無法順利開機嗎?!
    作業系統為 XP
    版主回覆:(11/22/2009 03:48:54 PM)
    1. 只要讀取速率比硬碟來的快都可以增加讀取效率。
    2. 不會造成無法開機,依然可以進入系統
    PS
    1. PCMCIA本身採用PCI匯流排設計,乃是共享頻寬的概念(有興趣可以去研究PCI架構)因此如果大量資料在存取的時候可能會影響到其他設備喔。
    2. 要注意CF 高倍速的記憶卡是否可以在轉卡與NB的搭配下發揮最佳的效能喔

  • 版主你好:
    請問一下,到底該不該把pagefile放到ramdisk呢?
    版主回覆:(11/22/2009 03:48:54 PM)
    至於效果如何,可以自行測試看看
    就知道該不該放過去了

  • 對不起
    我的意思是把pagefile放到ramdisk後
    windows就完全不會用到硬碟來儲存分頁檔了嗎?
    版主回覆:(11/22/2009 03:48:54 PM)
    理論上是這樣的,不過也要確定您的記憶體要夠大,才不會有記憶體不足的狀況發生喔

  • 我想請問一下,如果ramdisk的空間不夠大,另外在硬體上也設定虛擬記憶體,這樣行得通嗎??虛擬記憶體使用空間的優先順序可以設定嗎??
    版主回覆:(11/22/2009 03:48:54 PM)
    如果記憶體不夠大那就別拿來當ramdisk了~~~
    雖然也可以在硬碟上設定虛擬記憶體,但是卻無法調整使用順序喔

發表評論