2011-10-17 30 views
1

任何人都可以解釋爲什麼在Linux啓動gcc或javac後,一段時間的不活動,他們需要一段時間才能啓動。隨後的調用速度更快。有沒有辦法確保始終快速啓動? (這個要求可能看起來很奇怪,但在我的情況下是必要的)。順便說一句。gcc或javac在第一次啓動時很慢

回答

2

最有可能的情況是代碼頁出錯的時間。如果您真的需要,有幾種方法可以避免這種延遲。最簡單的方法是定期運行gcc。另一種方法是將gcc安裝到RAM磁盤上。

另一種方法是列出涉及哪些文件,然後編寫一個簡單的程序將所有這些文件鎖定到內存中。你可以使用類似的東西:
strace -f gcc *rest of gcc command* 2>&1 | grep open | grep -v -- -1
使用GCC命令行,這是你如何使用GCC的典型。

你會發現在那裏打開庫和二進制文件。在文件中製作完整列表。然後編寫一個程序,調用mlockall(MCL_FUTURE)然後從文件中讀取文件名。對於每個文件,mmap它進入內存並讀取每個字節。然後讓程序永久睡眠(或直到死亡)。

這會強制每個文件在內存中的每個頁面的作用。您應該檢查所有這些文件的總大小,並確保它不是您實際擁有的內存量的重要部分!

順便說一下,曾經有一種叫做sticky bit的東西做了這樣的事情。如果您的平臺支持它,只需在所有使用的文件上進行設置即可。 (雖然它傳統上導致文件被保存爲交換,這在現代系統上不會使事情變得更快)。