ruby-on-rails - Ruby on Rails 在 ARM 上的性能

标签 ruby-on-rails ruby performance arm

我想知道我们是否可以用一些等效的基于 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/

相关文章:

ruby-on-rails - 为什么初始化变量如此重要?

ruby-on-rails - Rails 3 可评级模型 - 如何创建 ajax 评级?

ruby-on-rails - 我在我的 Rails 应用程序中设置了 CORS,但我仍然收到错误

类方法中的 Ruby 实例引用?

ruby - 许多客户端连接 Ruby

python - 高效的数组连接

performance - Tomcat性能调优

ruby-on-rails - 如何调试 cron 不执行给定脚本或其他脚本的问题?

使用 webkit 驱动程序下载 ruby​​ 文件

javascript - jQuery 函数循环遍历元素并根据与具有特定类名的元素相比的顺序设置类名