日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)
- p (01/03)
- Thiramil (10/26)
- 久々にいまむらを食べたい通りすがり (09/28)
- Fluxadir (05/16)
- Antiprestin (11/08)
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/cache | x64/x86 |
---|---|---|---|---|
i386 | - | |||
i386 + α | - | |||
x86_64 | ||||
x86_64 + α |
※α = httpd + php + mod_perl + mod_python + postgresql-server + mysql-server + squid
Ubuntu 10.04 の場合
環境 | df (MB) | Mem used (MB) | -/+ buffers/cache | x64/x86 |
---|---|---|---|---|
i386 | - | |||
i386 + β | - | |||
amd64 | ||||
amd64 + β |
※β = 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 Values | x86 | x64 | x64/x86 |
---|---|---|---|
Dhrystone 2 using register variables | 3623.7 | 5393.6 | |
Double-Precision Whetstone | 1702.7 | 400.1 | |
Execl Throughput | 139.8 | 90.0 | |
File Copy 1024 bufsize 2000 maxblocks | 5638.6 | 8591.5 | |
File Copy 256 bufsize 500 maxblocks | 4393.7 | 8046.5 | |
File Copy 4096 bufsize 8000 maxblocks | 7409.6 | 8740.9 | |
Pipe Throughput | 3016.3 | 6817.6 | |
Pipe-based Context Switching | 126.4 | 63.7 | |
Process Creation | 105.7 | 63.2 | |
Shell Scripts (1 concurrent) | 409.8 | 276.1 | |
Shell Scripts (8 concurrent) | 401.0 | 263.9 | |
System Call Overhead | 2366.4 | 7483.1 | |
System Benchmarks Index Score | 1078.7 | 1048.0 |
…総合スコアとしては、ほとんど変わらないどころか64ビット版の方が僅かに悪い (誤差程度だが) という結果になってしまった。
内容によっては3倍も速くなっているものもあるし、用途によるのだろうが、いまいち釈然としない。
まあ例えば、unixbench の総合スコアの算出式が32ビット版に不当に有利なものになっているのだとか、VirtualBox が64ビット版ゲスト OS の扱いが苦手で、さくらが使っている KVM では断然64ビット版の方が速いのだとか、総合スコアは変わらなくても VPS の主な用途であるネットワークサーバとしての利用においては64ビット版の方が有利なのだとか、そんな可能性もあるわけだが、うーん。
これはやはり実際の VPS 上で、実利用に近い Web アプリ動かして測定してみた方が良さそうだな…。