bitmap-markingパッチをPassengerを動かす為に1.8.6へ

色々ありまして、1.8.6パッチレベル111ように修正して、適用しました。
http://github.com/authorNari/ruby/tree/master/patch/gc_bitmap_by_align_to_1-8-6_p111.patch
これでPassenger動くかなーっと思ったら、二点はまり。

  • rubygemsをlibのsite-rubyに入れる。もしくは、$:に追加。
  • GC.copy_on_write_friendly?でtrueで無ければ全然違う動きをしまっせーというPassengerの謎仕様を見つける
    • Ruby側で再定義してやった

何の事は無く、動いて、省メモリ化を試しておったのですが、
Performance and memory usage comparisons — Ruby Enterprise Edition
こんなに差がでないよー。
 

普通のRuby

nari@nari-laptop ~/s/ruby> sudo passenger-memory-stats
-------------- Apache processes --------------
PID    PPID   Threads  VMSize   Private  Name
----------------------------------------------
27148  1      1        11.6 MB  0.4 MB   /usr/sbin/apache2 -k start
27149  27148  1        11.4 MB  0.4 MB   /usr/sbin/apache2 -k start
27154  27148  27       37.5 MB  0.5 MB   /usr/sbin/apache2 -k start
### Processes: 3
### Total private dirty RSS: 1.34 MB

--------- Passenger processes ---------
PID    Threads  VMSize   Private  Name
---------------------------------------
27153  4        3.5 MB   0.1 MB   /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/ApplicationPoolServerExecutable 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/bin/passenger-spawn-server  /usr/bin/ruby1.8  /tmp/passenger_status.27148.fifo
27155  2        13.2 MB  2.4 MB   Passenger spawn server
### Processes: 2
### Total private dirty RSS: 2.59 MB

 

ruby enter prise

nari@nari-laptop ~/s/ruby> sudo passenger-memory-stats
-------------- Apache processes --------------
PID    PPID   Threads  VMSize   Private  Name
----------------------------------------------
23492  1      1        11.6 MB  0.4 MB   /usr/sbin/apache2 -k start
23493  23492  1        11.4 MB  0.5 MB   /usr/sbin/apache2 -k start
23499  23492  27       37.5 MB  0.5 MB   /usr/sbin/apache2 -k start
### Processes: 3
### Total private dirty RSS: 1.38 MB

-------- Passenger processes ---------
PID    Threads  VMSize  Private  Name
--------------------------------------
23495  4        3.5 MB  0.2 MB   /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/ApplicationPoolServerExecutable 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/bin/passenger-spawn-server  /opt/ruby-enterprise-1.8.6-20080624/bin/ruby  /tmp/passenger_status.23492.fifo
23496  1        5.3 MB  0.8 MB   Passenger spawn server
### Processes: 2
### Total private dirty RSS: 0.97 MB

 

自分のパッチ

nari@nari-laptop ~/s/ruby> sudo passenger-memory-stats
-------------- Apache processes --------------
PID    PPID   Threads  VMSize   Private  Name
----------------------------------------------
26743  1      1        11.6 MB  0.4 MB   /usr/sbin/apache2 -k start
26744  26743  1        11.4 MB  0.4 MB   /usr/sbin/apache2 -k start
26748  26743  27       37.5 MB  0.5 MB   /usr/sbin/apache2 -k start
### Processes: 3
### Total private dirty RSS: 1.36 MB

-------- Passenger processes ---------
PID    Threads  VMSize  Private  Name
--------------------------------------
26746  4        3.5 MB  0.2 MB   /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/ApplicationPoolServerExecutable 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/bin/passenger-spawn-server  /home/nari/bin/rubys/ruby1.8-bitmap-align/bin/ruby  /tmp/passenger_status.26743.fifo
26749  1        3.0 MB  0.5 MB   Passenger spawn server
### Processes: 2
### Total private dirty RSS: 0.68 MB

 
もうちょっと計測の仕方を考えないといけないなーと思っていますが、さて、どうしましょうか。
などと、考えていると、いつもお世話になっているRubyHackerの方々が試していただいて、するどい指摘をしてもらえる予感。
 
と書いていたら、Passenger processes が何か少ない事に気づく。むーー。
rails sample で作っただけのハリボテアプリがダメなんだろうかー。
 

追記

ちゃんと構築したアプリだと、しっかり差がでた。
ハリボテアプリはダメなのかー。