2010-09-12 189 views
8

我每隔十分鐘就會構建一個webkit(2百萬行代碼),以查看其中的更改輸出,並且我的計算機上的webkit鏈接需要處理600-700在我的硬盤上有MB的目標文件。這需要大約1.5分鐘。我想加快這個鏈接過程。加速鏈接速度/ linux上的快速鏈接

有沒有任何機會,我可以告訴os只保留所有的目標文件在RAM(我有4 GB的RAM)。有沒有其他的方法來加快鏈接?

任何想法或幫助表示讚賞!

這是一個命令,它需要1.5分鐘,

http://pastebin.com/GtaggkSc

+0

您能否確認使用例如:頂部還是vmstat?數據應該放在緩存中,但鏈接器也需要一些時間來處理它 - 所以你可能會受到CPU的限制。 – 2010-09-16 13:03:47

+0

@Turbo J,我發現在我的處理器中,只有一個內核正在使用22-25%。 – SunnyShah 2010-09-16 14:48:27

回答

11

我使用tempfsgold linker解決了這個問題。

1)。 tmpfs:將包含所有目標文件的目錄掛載爲tmpfs。

2)。 gold linker:使用gold鏈接器可以使鏈接速度提高5-6倍,而tmpfs的優勢將比普通鏈接提高7-8倍。在ubuntu上使用以下命令,您的普通鏈接器將被Gold Linker替換。

sudo apt-get install binutils-gold 

你可以找到一些鏈接錯誤使用黃金鍊接器,下面的線程是一個很好的幫助。

Replacing ld with gold - any experience?

2

嘗試使用ramdisk

+5

或者,在現代Linux系統上,tmpfs通常更好。 – MarkR 2010-09-12 16:16:39

+1

我在一個虛擬磁盤上的VMWare映像中運行我的linux。用一個特殊的最低限度的linux配置來編譯。這是非常非常困難的,否則確保任何東西都在RAM中。但這需要4GB以上,最低16GB。 – Lothar 2010-09-15 16:33:37

1

說實話我不知道我理解的問題,但會像ramfs是有用的,以您?

+0

感謝您的評論,我現在澄清我的問題。 – SunnyShah 2010-09-12 15:22:01

+0

好吧,看起來像使用ramfs(或者ramdisk作爲建議的mmonem)對你來說是有用的,只要它們允許你創建足夠大的「磁盤」(免責聲明:我從來沒有使用任何一個程序,聽說過它們的用處)。將需要的對象文件複製到「磁盤」,並將鏈接器指向這些文件而不是硬盤上的文件。希望這可以幫助。 – 2010-09-12 15:52:31

+0

謝謝Matt,我正在檢查您的解決方案。 – SunnyShah 2010-09-12 16:36:23

1

獲取您的Linux機器的SSD磁盤。 如果寫入性能仍然存在問題,請將輸出路徑配置爲位於RAM磁盤中。

您是否測量了1.5分鐘內有多少IO真正被綁定? Webkit太大意味着您可能會遇到內存緩存垃圾。你應該試着找出你有多少L1/L2緩存未命中。我會建議這是一個問題。 在這種情況下,您唯一的希望就是GCC團隊中的某個人正在研究這個問題。順便說一下:微軟在極端鏈接器時代也有同樣的問題。

+0

只看着你的粘貼垃圾箱。您應該真的嘗試將單個.o文件捆綁到.lib中 - 這可能是一個問題。並嘗試使用ReiserFS,它比其他文件系統更適合於小文件。 – Lothar 2010-09-16 16:55:42