32bitホストOS上で64bitゲストOSが走るという話

VirtualBoxVMwareは、ホストマシンのCPUがIntelVTかAMD-Vに対応している場合には32bitホストOS上で64bitゲストOSが走るらしい。
この事をまったくしらなくて、単純に凄いなっておもった。

けど、実際性能はどうなんだろうって思ったのでとりあえずベンチマーク

テスト環境

  • ゲストOS
    • VirtualBox上のLubuntu 11.04を32bitと64bitで構成
    • CPUコアは1で、メモリは1024MB。

ベンチマーク手段

Linux用の良いベンチマーキングソフトを知らなかったので、C言語再帰的にフィボナッチ数列を求めるプログラムを適当に書いてこれを使った。

#include <stdio.h>

int fib(int n) {
        if (n < 2) {
                return n;
        }else{
                return fib(n-1) + fib(n-2);
        }
}

int main() {
        printf("%d",fib(40));
        return 0;
}

こいつをgccコンパイルして(最適化オプション無し)、timeコマンドをつけて実行、userCPUの時間を測ってやる方針。

結果

とりあえず3回測って、その平均辺りで評価しようと思った。

回数 32bitゲスト 64bitゲスト
1回目 8.829[s] 10.06[s]
2回目 8.805[s] 10.09[s]
3回目 8.845[s] 10.05[s]
平均 8.826[s] 10.07[s]

評価

  • 32bitホストOS上では64bitゲストOSは32bitゲストOSと比べて114%程遅い。
  • 64bit拡張命令を使うために何らかのオーバーヘッドがあると考えられる
  • Core2Duo自体が64bitでは不利なCPUなためもあるか?
    • ただし、ネイティブな状態では"32bit性能=64bit性能"というようなベンチマークがあるようなので、オーバーヘッドが無いならばせめて同等の結果は出るべきだと思う。
    • 64bitに強い、もっとモダンなCPU(core iX世代)ではどうなるのか興味がある。