我想知道是否可以用基於ARM的一些等效設備替代基於Atom N270的nettops,這些nettops運行Rails(ruby 1.8.6 ...)webapp(我們喜歡無風扇設置,功耗消費等)。ARM上的Ruby on Rails性能
ARM設備是XScale-PXA270 @ 520,128MB(可能還有一些速度較慢的SDRAM),運行linux時,總是有足夠的可用內存,性能與越獄版iPhone相當。對於生產數據庫(SQLite)的基準測試給了我們有希望的結果(ARM僅僅是 慢了20-30%),所以我嘗試構建ruby(1.9.2p0)。
ARM應用程序在ARM上運行速度非常慢(從sql中獲取並生成模板慢10-20倍)。我決定運行一些基準來尋找瓶頸。 (與我們現在使用的較老的紅寶石1.8.6相比,比ruby 1.9.2慢6倍),有些非常慢(慢20-30倍)。鐵。它看起來散列方法在ARM上慢了40倍。運行Ruby Benchmark Suite顯示出更多的瓶頸,字符串,線程,數組...
我知道ARM比Atom慢,我只是沒有預料到如此巨大的差異,特別是在SQLite運行良好之後。
ARM上有沒有Ruby的缺陷,我是否需要應用一些補丁,這是無望的,如果我想使用ARM設備或只是設備沒有足夠的計算能力,應該用C重寫整個應用程序?
實例
def fib(n)
return 1 if n < 2
fib(n-1)+fib(n-2)
end
Benchmark.bm do |x|
x.report { fib(32) }
x.report { fib(36) }
x.report { h = {}; (0..10**3).each {|i| h[i] = i} }
x.report { h = {}; (0..10**4).each {|i| h[i] = i} }
x.report { h = {}; (0..10**5).each {|i| h[i] = i} }
end
ruby -rbenchmark bench.rb
原子N270,1GB
ruby 1.9.2p0 (2010-08-18) [i686-linux] user system total real 2.440000 0.000000 2.440000 ( 2.459400) 16.780000 0.030000 16.810000 (17.293015) 0.000000 0.000000 0.000000 ( 0.001180) 0.020000 0.000000 0.020000 ( 0.012180) 0.160000 0.000000 0.160000 ( 0.161803) ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux] user system total real 12.500000 0.020000 12.520000 (12.628106) 84.450000 0.170000 84.620000 (85.879380) 0.010000 0.000000 0.010000 ( 0.002216) 0.040000 0.000000 0.040000 ( 0.032939) 0.240000 0.010000 0.250000 ( 0.255756)
的XScale-PXA270 @ 520,128MB 紅寶石1.9.2p0(2010-08-18)[掰linux]
user system total real 12.470000 0.000000 12.470000 (12.526507) 85.480000 0.000000 85.480000 (85.939294) 0.060000 0.000000 0.060000 ( 0.060643) 0.640000 0.000000 0.640000 ( 0.642136) 6.460000 0.130000 6.590000 ( 6.605553)
建設有:
./configure --host=arm-linux --without-X11 --disable-largefile \ --enable-socket=yes --without-Win32API --disable-ipv6 \ --disable-install-doc --prefix=/opt --with-openssl-include=/opt/include/ \ --with-openssl-lib=/opt/include/lib ENV: PFX=arm-iwmmxt-linux-gnueabi export DISCIMAGE="/opt" export CROSS_COMPILE="arm-linux-" export HOST="arm-linux" export TARGET="arm-linux" export CROSS_COMPILING=1 export CC=$PFX-gcc export CFLAGS="-O3 -I/opt/include" export LDFLAGS="-O3 -L/opt/lib/" #LIBS= #CPPFLAGS= export CXX=$PFX-g++ #CXXFLAGS= export CPP=$PFX-cpp export OBJCOPY="$PFX-objcopy" export LD="$PFX-ld" export AR="$PFX-ar" export RANLIB="$PFX-ranlib" export NM="$PFX-nm" export STRIP="$PFX-strip" export ac_cv_func_setpgrp_void=yes export ac_cv_func_isinf=no export ac_cv_func_isnan=no export ac_cv_func_finite=no
爲什麼你運行nettops作爲生產服務器?你應該有一個真正的服務器和nettops **連接**來瀏覽webapps,你不應該在nettops **本地運行web應用程序**如果你正在討論開發機器,請參考[the程序員的權利法案](http://www.codinghorror.com/blog/2006/08/the-programmers-bill-of-rights.html) – Jimmy 2010-10-27 12:50:43
我注意到「ruby」標記的問題通常只有10-20個視圖,所以SO上的Ruby社區很小。正如在我的「答案」中,我建議去一個郵件列表。 – 2010-10-27 16:06:45