最近看到這篇文章 用 ramdisk 加速 freebsd 編譯 ports 的速度

因此就來研究一下該如何在 FreeBSD 啟用 ramdisk 的功能,找了一些文章目前有二種方式可以建立 ramdisk

一種是 tmpmfs,另一種是 tmpfs

tmpmfs 在 FreeBSD 5 導進來的,而 tmpfs 是從 FreeBSD 7 才放進來的

整體來看這二個功能面都蠻像的,都可以有效達到加速存取的效果

不過仔細比較二者的運作方式,引用一下 FreeBSD China 這篇文章所說的

tmpfs是一個直接使用VM(以swap為後端存儲)的FS,tmpmfs是透過md配合ufs的一種用法,並不是一個FS。

還有 FreeBSD Forum 討論的這篇 [Solved] tmpfs little help

Before people get confused: if you read this thread, be sure to distinguish between tmpmfs ("old and trusted") and tmpfs ("new and experimental"). They perform the same function, but they are very different.

"理論上"來說,tmpfs 或許在效能上會比 tmpmfs 快,這部份我還沒有仔細去測,但透過 tmpfs 或 tmpmfs 來編某個 ports 的套件時,速度是差不多快的

接下來說明如何啟用這二種 ramdisk


[ tmpmfs ]

首先記得要把 /tmp 權限設為可寫

然後很簡單,只要在 /etc/rc.conf 加入這三行

tmpmfs="YES"
tmpsize="512m"
tmpmfs_flags="-m 0 -o async,noatime -S -p 1777"

重開機之後下 df -h 就可以看到建立出來的樣子

/dev/md0   496M   12K   496M   0%  /tmp

然後我們要去設定 ports 編繹檔案時指定的目錄,去編輯 /etc/make.conf 加入這行

WRKDIRPREFIX=/tmp

[ tmpfs ]

例子:在/etc/fstab加入一行

tmpfs    /tmp    tmpfs    rw,size=422424424    0    0

首先記得要把 /tmp 權限設為可寫

這個就更簡單了,只要在 /etc/fstab 加入一行

tmpfs    /tmp   tmpfs   rw   0   0

重開機之後下 df -h 就可以看到

tmpfs   6.8G   4.0K   6.8G   0%

這個 6.8G 是怎麼來的呢,實際上它是把沒有用到的 Free RAM + Free Swap 算出來的

而這個空間也是會變動的,不像 tmpmfs 所建立出來的空間是固定的

最後我們要去設定 ports 編繹檔案時指定的目錄,去編輯 /etc/make.conf 加入這行

WRKDIRPREFIX=/tmp

[ 哪個比較好 ]

誠如一開始所說,tmpfs 是 FreeBSD 7.0 後才帶進來的,而在我目前所用的 FreeBSD 8.1 開機時依舊會顯示這行資訊

WARNING: TMPFS is considered to be a highly experimental feature in FreeBSD.

看起來還是先乖乖用 tmpmfs 比較不會出問題 !!!

參考資料

餅乾隨筆 - 用 ramdisk 加速 freebsd 編譯 ports 的速度

The FreeBSD Forums - [Solved] tmpfs little help ( 建議看完它 )

FreeBSD China - tmpfs和tmpmfs区别?

FreeBSD - FreeBSD File Formats Manual