前陣子工作單位進了一台版本控管用的主機 (svn),目前由我管理
剛剛聊到了 ramdisk make world 的速度,索性來測一下。
測試環境
CPU:Intel Core 2 Quad Q9550 @ 3.4G Hz
Memory:4G DDR2-800
HD:WD 5000AACS
測試用指令分別為:
建立 ramdisk
# mdconfig -a -t swap -s 4096M -u 0 # newfs /dev/md0 # mkdir /mnt/memdisk;mount /dev/md0 /mnt/memdisk
make buildworld
# time make -j5 buildworld
make kernel
# time make -j5 kernel KERNCONF=NETSEC-SVN
結果前者時間為 16:39.48,後者時間為 6:39.80。
補充說明:
後來又以同樣的 source tree 在一般硬碟測試
發現 buildworld 及 kernel 的 make 時間都比 ramdisk 少。
因為有把 /usr/src 及 /usr/obj 砍掉,所以不考慮 cache 的影響。
個人推測可能是 make -j5 時,對 ramdisk 的 concurrent access 就有五個
故多少增加了 CPU utilization,導致 ramdisk 上編譯比一般硬碟來的慢。
如果用 tmpfs 的情況呢?
btw, 加上 -s (Do not echo any commands as they are executed.) 的話, 也可以節省一些花在 IO 的時間。
不錯的建議,今天晚上就來試試看 tmpfs。
關於 make -j 的參數設定,有沒有 optimization guide?
我通常習慣設為 CPU+1,理由是一個 make buildworld 指令若能利用所有 CPU,會再 fork 出與 CPU 等量的 child process。
不過 jnlin 習慣 CPU*2,這樣明顯會讓 CPU 更接近滿檔;但我認為缺點是 concurrent I/O 可能會更凸顯傳統硬碟的 random access 效能不彰。