gravatar

Move swap files to a single partition in Mac OS X

Tags: Mac OS X, Apple, swap, page file, partition, HFS.

Mac OS X 底下的 pagefiles 跟 windows 一樣, 是以檔案的形式存在, 放在 /private/var/vm/swapfile[0-9]. 對於系統預設安裝的一整個 partition, swap files 跟系統還有個人資料皆放於同一個 journaled HFS. 除此之外, Mac OS X 的 swap files 並不是固定大小, 他隨著記憶體使用需求來增減. 預設大小是 64MB, 第二次也是 64MB, 再來就會變成 128MB, 接著是 256MB, 如此增長下去.

64MB swapfile0 64MB swapfile1 128MB swapfile2 256MB swapfile3 ...
因此對於整個 file system 和效能來說可能不是最好的方法. 在此提供一個把 swap files 放到獨立的 partition 的方法.
  • step 1: 首先需要有一個獨立的 partition, 因為無法動態調整 HFS partition size, 因此可能就需要重新安裝系統. 在安裝系統前使用 Disk Utility 來分割硬碟. 大概預估會使用多大的 swap, 可以從先前跑程式時所製造出來的 swapfiles 總和為參考. 不過像我是 768MB RAM, 大概預估是給他 1G. 再來 swap files 增長是以 double 為單位, 因此最好以這種方式估計一下, 不是隨便說 600M or 700M. 結果可能到時候要用也無法用到, 多餘的空間也不好給其他地方用. 計算方式為 1n+1n+2n+4n+8n... 而我是以 128MB 為開始單位, 預估 swap files 在跑很多程式下也差不多用到跟記憶體差不多. 所以 128+128+256+512 加起來是 1G, 所以就分割 1G 的空間. 另外 swap 可能因為 double 增加會浪費不少空間, 例如增加到 512M 之後, 1024M 的 swap file 可能只會用到一點點, 但卻浪費了不少空間當 swap. 所以假設要切割 1.5G, 那麼可以用剛剛的規則算一下一開始的 swap size 大概多少比較好. ps. 對於 swap 的 partition file system 可以使用 Unix or HFS 就好, 應該需要 journaled file. 且為了避免之後系統會把 swap 的 partition 一起列出來, 所以在命名上最好在前面加個 "." 也就是系統會把 "." 開頭的當作隱藏目錄.
  • step 2: 安裝系統完畢後, 開機進入系統, 系統會以 /private/var/vm 當作 swap 的存放地點. 這時候要修改 swap file 的目錄, 需要把先前的 swap partition mount 到特定的目錄. 首先使用 Disk Utility 來觀察 swap partition 的 information, 把 UUID copy 下來. 建立一個目錄例如 /swap 然後編輯 /etc/fstab, 格式如下.
    UUID=剛才複製的UUID /swap hfs rw 1 2
    這樣下次開機, 就會把 swap partition mount 到 /swap 而非 /Volumes
  • step 3: 修改 /etc/rc. search swapdir, 把他原本是 /private/var/vm 改成 /swap. 接著下面有 dynamic_pager 的地方, 可以照 step 1 提到如果需要修改預設的大小就可以在這修改. 加上 -S byte1 -H byte2 -L byte3, -S 是開始固定的大小 -H 是高水位的 bytes, 如果剩下的 swap byte < byte2 就會 allocate 新的 swap file. -L 是低水位, 當 swap 剩餘 byte > byte3, 就會把該 swap 刪除. 而系統規定 byte3 要大於 byte1+byte2. 因此以我的設定是 byte1=128M, byte2=64M, byte3=196M. 所以要改為 dynamic_pager -S 134217728 -H 67108864 -L 205520896. 這樣 swap file 一開機就是 128MB, 接著需要會在分配 128M, 第三次為 256M, 以此類推.
  • step 4: 接著就可以重新開機, 系統就會把 swapfiles 擺到 /swap 裡面. 而 /private/var/vm 舊的 swap files 就可以把他刪除掉把空間還給系統. 這樣 swap files 就會全部都擺在獨立的 swap partition 裡面.至於效能可以提升多少, 可以自己試試看開機速度和程式執行的速度比較看看. 我的感覺是開機速度到 login 畫面, 然後進入後載入 finder/dock 和 startup 程式的速度快多了 :)