スペースモラトリアムノカミサマ

日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)

最近の TrackBack:
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|06|07|08|09|10|
2011|01|02|03|07|10|11|
2012|02|03|04|07|08|09|
2013|01|06|07|
2014|02|08|09|11|
2015|09|
2016|01|05|
2017|07|

2010/10/27 編集

_ [Web制作][JavaScript] jQuery Cycle のフレームレートを下げるには

昨日リニューアルした某サイトトップページに導入された jQuery Cycle が、貧弱 CPU だと CPU 100% 消費して重くなってしまう問題について調査した。

jQuery Cycle では jQuery.animate を呼んで透明度を変化させている。ではこの jQuery.animate のフレームレートを下げれば良いのでは、と思ったのだが、JSTweenerと、jQuery.animateのフレームレートによると、これは 77fps (13ms/f) でハードコーディングされているらしい…。何その中途半端に高いレート。

jQuery はここでしか使っていないので、ハードコーディングされている値をとりあえず 12fps (83ms/f) に変更して改善。

Celeron 420 で90%以上使用していた CPU 使用率が20%以下に、Pentium 4 2.4GHz で100%に張り付いていた CPU 使用率70%程度まで軽減された。(それでも Atom だとまだ100%行くかもしれない…)

とはいえ jQuery 本体にアドホックな変更を加えるのは気持ち悪く、いつかデグレする日が来るので、誰かもっとスマートな対応方法があったら教えてください。


2010/10/31 編集

_ [Linux][システム運用] さくらの VPS で Linux の32ビット版と64ビット版のメモリ消費量を比較してみる

さくらの VPS がめでたく10種類の OS をサポートしてくれたので、32ビット版と64ビット版でどれくらいメモリ消費量が違うのか試してみた。

各種条件

  • CentOS 5.5 と Ubuntu 10.04 とそれぞれでテスト
  • 素の状態と、Apache や MySQL 等のパッケージをいくつかインストールした状態とそれぞれでテスト
  • インストール作業後は yum clean all や apt-get clean 実行しパッケージキャッシュクリア
  • OS 再起動し数十秒後の値を取得

CentOS 5.5 の場合

環境df (MB)Mem used (MB)-/+ buffers/cachex64/x86
i386
1,257
135
15
-
i386 + α
1,496
262
47
-
x86_64
1,468
148
24
161%
x86_64 + α
1,625
295
74
157%

※α = httpd + php + mod_perl + mod_python + postgresql-server + mysql-server + squid

Ubuntu 10.04 の場合

環境df (MB)Mem used (MB)-/+ buffers/cachex64/x86
i386
789
44
19
-
i386 + β
968
134
62
-
amd64
827
64
32
171%
amd64 + β
1,013
176
98
158%

※β = apache2 + php5 + libapache2-mod-perl2 + libapache2-mod-python + libapache2-mod-ruby + libapache2-mod-jk + postgresql + mysql-server + squid3

まとめ

-/+ buffers/cache を見ると、64ビット版は32ビット版と比べておおむね1.6倍メモリ喰いであることがわかる。

これはほとんどデータの入っていないコード中心のメモリ利用における比較なので、実運用においてはより差が縮まるとは思われるが、それでも 512MB という少ないメモリ環境では無視できない差。

極端な言い方をすれば、メモリ 512MB の環境を64ビット版 OS で使うという行為は、32ビット版 OS をメモリ 320MB の環境で使うようなもので、実にもったいない。

さくらの VPS はなぜかデフォルトで64ビット版 CentOS が導入されているが、カスタムインストールで32ビット版に入れ替えた方が良いのではなかろうか。(社長の田中さん自身もが「メモリの少ない環境(2GB以下)の場合には32bit版の活用も検討すると良い」と言及している) 中の人はなぜ64ビット版を選んだのだろうか。

_ [Linux][システム運用] VirtualBox での unixbench 実行結果を32ビット版と64ビット版それぞれで比較してみる

と、x86 版 Linux は x64 版に比べてメモリ消費量において無視できないアドバンテージがある一方、64ビット版は (メモリ不足さえ起こさない限り) 速度面で強みがあるという説もある。(社長の田中さんも「64bitのOSは高速ですがメモリを多く消費する」と言及している)

では実際どれぐらい速いのだろうか、ということで unixbench も行ってみた。

ただし、VPS 上では他の利用者の影響を受けてしまうことと、迷惑をかけてしまう可能性を考え、このテストについては自宅 PC の VirtualBox 上で、他のアプリを極力終了させた状態で行った。

32ビット版

   BYTE UNIX Benchmarks (Version 5.1.2)
 
   System: localhost.localdomain: GNU/Linux
   OS: GNU/Linux -- 2.6.18-194.el5 -- #1 SMP Fri Apr 2 14:58:35 EDT 2010
   Machine: i686 (i386)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Pentium(R) Dual-Core CPU E6500 @ 2.93GHz (7313.7 bogomips)
          MMX, Physical Address Ext
   11:22:35 up 2 min,  1 user,  load average: 0.08, 0.08, 0.03; runlevel 3
 
------------------------------------------------------------------------
Benchmark Run: Tue Oct 05 2010 11:22:35 - 11:50:30
1 CPU in system; running 1 parallel copy of tests
 
Dhrystone 2 using register variables       42288516.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     9365.1 MWIPS (9.9 s, 7 samples)
Execl Throughput                                600.9 lps   (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       2232871.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          727158.2 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       4297575.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                             3752216.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  50579.5 lps   (10.0 s, 7 samples)
Process Creation                               1331.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1737.4 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    240.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        3549632.4 lps   (10.0 s, 7 samples)
 
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   42288516.5   3623.7
Double-Precision Whetstone                       55.0       9365.1   1702.7
Execl Throughput                                 43.0        600.9    139.8
File Copy 1024 bufsize 2000 maxblocks          3960.0    2232871.8   5638.6
File Copy 256 bufsize 500 maxblocks            1655.0     727158.2   4393.7
File Copy 4096 bufsize 8000 maxblocks          5800.0    4297575.5   7409.6
Pipe Throughput                               12440.0    3752216.1   3016.3
Pipe-based Context Switching                   4000.0      50579.5    126.4
Process Creation                                126.0       1331.4    105.7
Shell Scripts (1 concurrent)                     42.4       1737.4    409.8
Shell Scripts (8 concurrent)                      6.0        240.6    401.0
System Call Overhead                          15000.0    3549632.4   2366.4
                                                                   ========
System Benchmarks Index Score                                        1078.7

64ビット版

   BYTE UNIX Benchmarks (Version 5.1.2)
 
   System: localhost.localdomain: GNU/Linux
   OS: GNU/Linux -- 2.6.18-194.el5 -- #1 SMP Fri Apr 2 14:58:14 EDT 2010
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Pentium(R) Dual-Core CPU E6500 @ 2.93GHz (7315.4 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
   11:25:09 up 4 min,  1 user,  load average: 0.10, 0.27, 0.13; runlevel 3
 
------------------------------------------------------------------------
Benchmark Run: Tue Oct 05 2010 11:25:09 - 12:01:07
1 CPU in system; running 1 parallel copy of tests
 
Dhrystone 2 using register variables       62943296.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2200.7 MWIPS (43.7 s, 7 samples)
Execl Throughput                                387.2 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       3402235.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks         1331695.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       5069693.6 KBps  (30.0 s, 2 samples)
Pipe Throughput                             8481144.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  25466.7 lps   (10.0 s, 7 samples)
Process Creation                                796.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1170.5 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    158.3 lpm   (60.3 s, 2 samples)
System Call Overhead                       11224664.6 lps   (10.0 s, 7 samples)
 
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   62943296.9   5393.6
Double-Precision Whetstone                       55.0       2200.7    400.1
Execl Throughput                                 43.0        387.2     90.0
File Copy 1024 bufsize 2000 maxblocks          3960.0    3402235.8   8591.5
File Copy 256 bufsize 500 maxblocks            1655.0    1331695.5   8046.5
File Copy 4096 bufsize 8000 maxblocks          5800.0    5069693.6   8740.9
Pipe Throughput                               12440.0    8481144.3   6817.6
Pipe-based Context Switching                   4000.0      25466.7     63.7
Process Creation                                126.0        796.4     63.2
Shell Scripts (1 concurrent)                     42.4       1170.5    276.1
Shell Scripts (8 concurrent)                      6.0        158.3    263.9
System Call Overhead                          15000.0   11224664.6   7483.1
                                                                   ========
System Benchmarks Index Score                                        1048.0

比較

System Benchmarks Index Valuesx86x64x64/x86
Dhrystone 2 using register variables3623.75393.6
149%
Double-Precision Whetstone1702.7400.1
23%
Execl Throughput139.890.0
64%
File Copy 1024 bufsize 2000 maxblocks5638.68591.5
152%
File Copy 256 bufsize 500 maxblocks4393.78046.5
183%
File Copy 4096 bufsize 8000 maxblocks7409.68740.9
118%
Pipe Throughput3016.36817.6
226%
Pipe-based Context Switching126.463.7
50%
Process Creation105.763.2
60%
Shell Scripts (1 concurrent)409.8276.1
67%
Shell Scripts (8 concurrent)401.0263.9
66%
System Call Overhead2366.47483.1
316%
System Benchmarks Index Score1078.71048.0
97%

…総合スコアとしては、ほとんど変わらないどころか64ビット版の方が僅かに悪い (誤差程度だが) という結果になってしまった。

内容によっては3倍も速くなっているものもあるし、用途によるのだろうが、いまいち釈然としない。

まあ例えば、unixbench の総合スコアの算出式が32ビット版に不当に有利なものになっているのだとか、VirtualBox が64ビット版ゲスト OS の扱いが苦手で、さくらが使っている KVM では断然64ビット版の方が速いのだとか、総合スコアは変わらなくても VPS の主な用途であるネットワークサーバとしての利用においては64ビット版の方が有利なのだとか、そんな可能性もあるわけだが、うーん。

これはやはり実際の VPS 上で、実利用に近い Web アプリ動かして測定してみた方が良さそうだな…。