2012年6月23日土曜日

仮想マシンのVT技術が与える影響について

Intel VTっていう仮想化支援技術があります。昔から仮想マシンを使っていたんで興味はあったんですが、性能差がどれくらいでるんだろうと気になっていました。しかし調べてみるとVTが実装されたコアはNehalemからで自分とこの現状のメインマシンCore2あたりではダメな模様。(Corei5のノートPCならあるが・・・)
ぐぐってみたらベンチマークのせて比較している人を発見。それもベンチマークソフトをホストOSの、VT有効なゲストOS、VT無効のゲストOSの3種で比較してらっしゃる。結論だけいうと、100%、101%、50%な感じ。VT有効なゲストOSの方が若干速いのはどうよというところもありますが、数値的には誤差レベルです。これでVT有効、無効の明確な差がわかります。(メインマシンの石変えたいな・・・・)
ところでこのVT技術って、4種類に分類されていてIOの仮想化支援なんてものあるそうですね。ちょっと気になります。

2012年6月21日木曜日

ログ関数(可変長引数)

ちょいと汎用のログ関数(ログするデータを可変長にする)が欲しくなったので作ってみた。昔からよくやる手が、文字列バッファにsprintfでログ内容をその場その場で作成し、文字列としてロギングする方法だけど、どうみてもこれスマートじゃないよね。というわけで可変長引数を使ってみた。

簡単な実装例を示す。


FILE* glb::logFile;

void glb::logOpen( const char* filename )
{
 logFile = fopen( filename, "w" );
}

void glb::logClose( )
{
 if ( logFile != NULL )
   fclose( logFile );
}

void glb::logging( const char* format, ... )
{
 va_list argp;
 va_start( argp, format );
 vfprintf( logFile, format, argp );
 fprintf( logFile, "\n" );
 va_end( argp );
}

printfみたいにformatを入れないといけないのが難点だけど、そのおかげで文字データだろうが、整数だろうが浮動小数点だろうが自由にログできる。(format使うおかげで、csv形式にも簡単になるしね)

 glb::logOpen( "log.log" );

 glb::logging( "%s", "1st" );
 glb::logging( " %s, %s", "2nd", "3rd" );
 glb::logging( "%f", 3.0 );

 glb::logClose( );