2010-08-09 53 views
14

在我的公司,我們目前正在研究加快CI構建的各種策略。我們分析了我們的構建,並確定我們受I/O瓶頸的限制。在不久的將來(〜1-2個月)我們有很多選擇來處理這個問題,但是我們真的希望看到一個改進現在在構建服務器上使用虛擬硬盤是否明智?

我建議使用ramdisk作爲checkout和buildfile的位置。構建輸出和日誌當然會存儲在物理磁盤上。

這是一個明智的做法還是有這種方法的重大缺陷?我不是在尋找關於事物的硬件方面的答案,而是尋求常見構建系統(例如MSBuild)和虛擬硬盤之間的交互會導致任何問題,以及是否還有其他風險,我需要注意。

+0

一個簡單的說明:我假設你正在談論夜間建造?在這種情況下,您需要從頭開始和測試中擠壓最大的構建。如果是每日構建,我建議將構建時間保持在最大5Mn,以便開發人員可以快速獲得有關潛在問題的反饋每次提交:在這種情況下,大多數情況下,執行* incremental *編譯是有用的,即只需執行svn(hg/git/etc)更新,並使用Make(或Ant,Nant等) - 編譯改變了什麼。使用一個良好的Makefile文件,它可能會顯着加快速度。只是我的0.02€:-) – 2010-08-10 05:28:40

+0

我在這裏談論CI(在每次提交後構建)。我們已經利用了增量構建,但謝謝。 – 2010-08-10 07:43:35

+1

@Christophe Muller,在不知道構建的環境,大小和要求的情況下做出一個總體應該是「最大值5Mn」的全面聲明是非常荒謬的。我們有一款產品可以在CI服務器上運行,並且可以在不到兩分鐘的時間內完成編譯和打包。我們有另一種產品,包括幾個.NET解決方案,幾個本地Windows服務,多個Adobe Flex項目,單元測試,代碼覆蓋,打包以及自動部署到測試機架。整個過程(並非所有過程都在每次入住時運行)超過兩個半小時*。 – 2010-08-10 14:02:43

回答

8

只要你有足夠的記憶,這是一個非常明智的做法。

唯一真正的缺點是,自然,您的構建會在關閉/電源故障時丟失,這通常不是CI構建的重大關注。

2

我剛剛在我的「構建服務器」(實際上是一個Powershell腳本)上運行了一些測試,它從Subversion檢出3600個文件,編譯它們(DOT.NET)並運行一些單元測試。

在我的正常(非超快)硬盤驅動器上,該過程需要35秒。

使用Dataram RamDisk工具與Windows 7上的默認FAT32安裝程序需要45秒。

用NTFS重新格式化它會降低到30秒。

但是使用SSD(在我的情況下是OCZ Vertex 2)只需要27秒。

我做了幾次測試,但時間總是一樣的。

我們可以從中學到什麼?

Ram磁盤並不總是更快,請確保您使用不同的 設置測試不同的產品。

固態驅動器甚至可能比RAM磁盤更快,這讓我感到驚訝。

+0

我有一個DataRam ram磁盤和一個ssd,並且運行磁盤速度更快。如果你看到ramdisk需要比ssd更多的時間,那麼看起來有點魚腥味。除此之外,這個版本已經非常快,大部分時間可能不是I/O限制。 35秒對於結帳/製作非常快速。我們的構建要大得多 - 在我們進行優化並將其降至10分鐘之前,使用單元測試花費了一個多小時。 – 2011-04-04 19:16:51

+0

有趣的是,我確實預計RamDisk比HD或SSD要快得多,所以我對我的結果感到失望。我仍然在爲構建過程添加更多項目和測試,並且稍後會再次重新運行測試。如果你已經擁有足夠的內存,那麼RAM盤也更便宜,並且不會磨損SSD。感謝您輸入Samuel。 – 2011-04-04 20:01:46

+5

這聽起來不對。緩存不足沒有比RAM更快的速度;甚至沒有SSD。你有沒有機會讓你的RAM磁盤如此之大以至於沒有足夠的內存讓構建過程真正完成它的工作?這可能導致將內存交換到文件系統,這顯然具有相反的效果。 – McKrassy 2011-08-11 05:33:35

相關問題