2012-11-21 98 views
5

我們切換到新的開發服務器,並體驗到我們的測試套件需要兩倍的時間。我們測試了數據庫,文件系統等,但這些東西速度相當快,甚至比以前更快。與OpenVZ的6S後根據虛擬化引擎,Ruby在虛擬機上運行緩慢

機:11,5

所以我們寫了一個小紅寶石基準測試(斐波那契),並執行了幾次(平均低於):

time_start = Time.now 
f = lambda { |x| x < 2 ? x : f.call(x-1) + f.call(x-2) } 
f.call(35) 
time = Time.now - time_start 

puts "#{time.round(4)}s needed" 

機之前,XEN

在兩臺機器上是Debian的擠壓安裝RVM( - >編譯)紅寶石1.9.3-P194。這些機器沒有高負載,內存也可以。

或多或少唯一的區別是虛擬化引擎。在生產中我們使用VMware ESXi。那裏的基準需要大約11s。 我們用KVM測試了另一臺服務器,那裏的基準需要2,5s


  • 機與XEN:6S
  • 機與OpenVZ的:11,5s
  • 機與VMware ESXi的:11S
  • 機與KVM:2,5s

那麼我們可以通過虛擬化改變我們的紅寶石速度?或者你有另一個想法是什麼問題?

+0

野趣的問題,但在我看來,這是很難在不同的虛擬化技術來比較的基準! – Robin

+0

@Sam:不幸的是,我們沒有其他想法可以解決什麼問題...... – MMore

+0

我會在所有系統上運行非Ruby的CPU基準測試,以確保問題與Ruby相關。所有機器都運行64位嗎? – claasz

回答

1

我剛剛在我們的ESXi 5系統上用Debian Squeeze和Ubuntu Precise(Server)進行了測試。在擠壓Ruby-1.9.3-p194必須進行編譯,而不是在Ubuntu上。但兩個系統的結果是一樣的:11.x秒。所以我認爲我們也可以忽略內核版本並專注於虛擬化層。

+0

我剛剛在Ubuntu下用KSH測試了相同的遞歸斐波那契計算。以0.01s運行。我發現「緩慢」的ruby必須通過rvm和/或由rvm編譯ruby本身來做些事情。我剛剛刪除了「rvm remove ruby​​-1.9.3-p194」後跟一個「rvm implode」的紅寶石。然後重新登錄並從Ubuntu Precise Repository安裝「apt-get install ruby​​1.9.3」,這基本上是一個ruby-1.9.3-p0。這跑了4,8秒。因此與我們的macbook在這裏幾乎相同。所以沒有人知道rvm如何編譯ruby。我很確定我們會在那裏找到聖盃! – martinseener

+0

即使通過安裝Squeeze,將apt源更改爲wheezy,執行apt-get更新和apt-get install ruby​​(現在從wheezy安裝1.9.3)時間應該是4.8秒。所以,不知怎麼rvm編譯它是「錯誤的」,我們必須看看這個。 – martinseener

+0

馬丁 - 見下面的答案,這可能有助於解釋你找到了什麼。 – Casper

0

也許@martinseener是一些東西。你可能想看看這個:
http://alisnic.net/blog/making-your-ruby-fly/

這:
https://gist.github.com/1688857?utm_source=rubyweekly&utm_medium=email

沒有優化標誌基本上RVM正在編制紅寶石。也許這是問題?然而,我發佈的鏈接使用補丁更深入到更多的加速,但基本的修復是在使用rvm編譯ruby時啓用優化標誌。

進一步討論在這裏:
http://www.reddit.com/r/ruby/comments/13mc3s/making_your_ruby_fly/