vm swap file 的產生會因為實體記憶體大小不同而有差異?

本區專門提供 Mac OS X 使用者交換使用心得

版主: ross_ttbryanchangdigdogchester

回覆文章
內容
發表人
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

vm swap file 的產生會因為實體記憶體大小不同而有差異?

#1 文章 bryanchang »

昨天朋友傳給我 mobile01 上的一篇留言,看起來台灣的朋友們現在也可以買到 Mac mini 與 iPod shuffle 了:

http://www.mobile01.com/topicdetail.php ... 60024&p=10

因為圖多,正當我在等照片完全載入的時候,恰好瞄到這一段話:
「吉米吉米,你的小白RAM有加超過1G的門檻嗎?

因為OS X的設計關係,若你的記憶體超過1G,他的SWAP FILE就只會開六個,若低於這個記憶體數字,那他就拼命的開,死命的開,讓你的效能都被硬碟拖垮~」
我瞪著這段文字半天,覺得滿肚子狐疑,因為在印象中 Mac OS X 的 dynamic pager 應該不會因為機器 Physical RAM 的大小而有行為上的差異。跑到 OpenDarwin 的 Web CVS 去調出 dynamic pager 的原始碼瞧瞧,果然證實了我的疑問:

http://cvs.opendarwin.org/cgi-bin/cvswe ... ev=1.1.1.2

研讀過上面的這份原始碼後可知,Darwin 的 dynamic pager 會根據系統需要,自動產生 swap file。這些檔案的大小除了頭先的兩個檔案是一樣大的(64MB)之外,之後的每個 swap file 都是前面的兩倍大,其上限為 1GB。

按照這個邏輯,Mac OS X 系統上 swap file 大小的產生序列將會是:

64MB, 64MB, 128MB, 256MB, 512MB, 1GB, 1GB, 1GB, 1GB...

由於 Mac OS X 是 32-bit 的作業系統,每個 process 可定址記憶體的最大範圍是 4GB,不過由於每個 process 的 memory space 是各自獨立,因此 swap file 的總數絕對有可能超過 8 個(即 4GB 總和)。也是因為這緣故,除了每個 swap file 最大 1GB 的上限以外,dynamic pager 在開啟新的 swap file 時也會注意到硬碟的剩餘空間,保持 swap file 不要超過硬碟剩餘容量的 1/4,以免影響一般檔案的存取。

最後 dynamic pager 也會監控系統虛擬記憶體的使用狀況,若是一個 swap file 中絕大部份的內容都已經不再需要,dynamic pager 也會視情況把剩餘的虛擬記憶體區塊合併,寫回另一個 swap file 後,把不需要的 swap file 刪除。
最後由 bryanchang 於 02/03/2005 5:13 am 編輯,總共編輯了 4 次。
圖檔
頭像
the real unknown
冰果室打手
文章: 2610
註冊時間: 04/26/2001 1:01 am
來自: GMT-5
聯繫:

#2 文章 the real unknown »

那篇留言應該叫「半桶水傳奇」。
Eat well. Exercise. And die anyway.
頭像
謝孟叡
討論區管理員
文章: 960
註冊時間: 05/01/2001 1:01 am
來自: 邪教組織 #osxchat
聯繫:

Re: vm swap file 的產生會因為實體記憶體大小不同而有差異?

#3 文章 謝孟叡 »

void
sched_init(void){
printf("standard timeslicing quantum is %d us\n", std_quantum_us);
}
頭像
bryanchang
討論區管理員
文章: 7057
註冊時間: 04/19/2001 1:01 am
來自: The '60s
聯繫:

#4 文章 bryanchang »

感謝 OpenDarwin 上 kvv 的指正,我修正了一些之前所寫對於 swap file 數目上限敘述的邏輯錯誤。原來 swap file 最大有八個的假設是適用在 per process 而不是整個系統,否則根據我原本假設的理論,Dual 2.5GHz PowerMac G5 裝了 8GB 的記憶體後,vm 可能就要自毀了。

這點當初沒想到確實是有點 orz。 :badgrin:
圖檔
回覆文章