我想知道我们是否可以用一些等效的基于 ARM 的设备(我们喜欢无风扇设置、功耗等)来替换运行 Rails(ruby 1.8.6...)web 应用程序的基于 Atom N270 的上网本。
ARM 设备是 XScale-PXA270 @ 520、128MB(可能还有一些较慢的 SDRAM),运行 Linux,总是有足够的可用内存,性能与越狱的 iPhone 相当。
对生产数据库 (SQLite) 进行基准测试给了我们可喜的结果(ARM 只是 慢 20-30%),所以我尝试构建 ruby (1.9.2p0)。
Rails 应用程序在 ARM 上运行非常慢(从 sql 获取和生成模板慢 10-20 倍)。我决定运行一些基准测试来寻找瓶颈。
同样,有些结果还不错(与我们现在使用的旧版 ruby 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 ruby 1.9.2p0 (2010-08-18) [arm-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
最佳答案
您似乎在提示 Ruby 1.9.2 中的新优化(与 1.8.x 相比)是特定于 x86 的。 Atom 和 ARM 的性能与 Ruby 1.8.x 相当。也许您可以询问特定于 ruby 的邮件列表。快速搜索显示,是的,Ruby 1.9.x 中有很多变化:
Ruby 1.9.2 brings [...] major speed improvements to Ruby by way of the Yet Another Ruby VM (YARV) interpreter
也许正确的问题是“YARV 是否有特定于 x86 的优化?这些优化可以在 ARM 端口中复制吗?”
关于ruby-on-rails - Ruby on Rails 在 ARM 上的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033337/