2012年4月15日日曜日

Pythonには++演算子は無い

前に、Ruby に ++ 演算子(インクリメント演算子)が無いことを書きましたが、Python にも無いということを、認識しました。
もっとも、Python の場合にはループの抽象度が高いようで、これまでの自分の経験上では、for (i=0; i<10; i++) のようなコードが必要なことは、皆無ですが。

2012年2月11日土曜日

perl でオプション解析(Getopt::Long編)

前に、Getopt::Std編getoptコマンド編 を書きましたが、同じオプションを複数回指定するパターンが使いたかったので、Getopt::Long についても調べました。
#!/usr/bin/perl
#
# GetOptions-template.pl
#

use Getopt::Long ;

sub usage_exit {
        print STDERR "Usage: getopts-template.pl [-a] [-b] [-d dir] item1 item2 ...\n" ;
        exit 1 ;
}

print "@ARGV\n" ;       ####DEBUG
{
        local $SIG{__WARN__} = \&usage_exit ;
        GetOptions( "a" => \$opt_a, "b+" => \$opt_b, "d=s" => \$opt_d, "h" => \$opt_h ) ;
        ### see man Getopt::Long(3pm)
}

if (defined $opt_h) {
        usage_exit ;
}

$argc = scalar @ARGV ;
print "\$argc=$argc\n" ;        ####DEBUG
print "\@ARGV=@ARGV\n" ;        ####DEBUG
print "\$opt_a=$opt_a\n" ;      ####DEBUG
print "\$opt_b=$opt_b\n" ;      ####DEBUG
print "\$opt_d=$opt_d\n" ;      ####DEBUG
オンラインマニュアル(man Getopt::Long(3pm))によると、プラス記号を使うと、同じオプションの複数回指定に対応できるとのことなのですが、実際に試してみると、、、
# ./GetOptions-template.pl -a -bb
-a -bb
Usage: getopts-template.pl [-a] [-b] [-d dir] item1 item2 ...

# ./GetOptions-template.pl -a -b -b
-a -b -b
$argc=0
@ARGV=
$opt_a=1
$opt_b=2
$opt_d=
残念ながら、複数回指定可能と言っても、このように -bb とは指定できず、-b -b という具合に指定する必要があるようです。コードは少し長くなりますが、getoptコマンドを使う方法なら対応できます。

2011年12月24日土曜日

Fedora 16 で久々に Xen を試してみる

KVM の登場で、ほとんど触ることが無くなっていた Xen ですが、Linux 3.0 以降で Dom0 動作可能になっており、Fedora 16 なら簡単に Xen を動かせるので、試してみました。

■準備
yum install xen を実行して、Xen 関連のパッケージを導入します。grub2 のメニューは、自動で追加されるので、特に何もすることはなく、導入は簡単でした。再起動して、
Linux, with Xen 4.1 and Linux 3.1.2-1.fc16.x86_64
このように with Xen 4.1 がついたメニューを選択して起動すれば OK でした。

■実験内容
ホストには Fedora 16 x86_64 、ゲストには CentOS 6.2 x86_64 を使い、Xen 準仮想化、Xen 完全仮想化、KVM の3つの場合で、パフォーマンスがどの程度違うものかを比較。ハードは、ThinkPad X301 (Core2 Duo U9400 1.40GHz) です。
個人設備の関係上、ディスク性能が貧弱なため、ベンチマークには姫野ベンチを使いました。
なお、CentOS 6 では、DomU 用カーネルというのは無いので、カーネルの種類を切り替えるようなことはしなくて済みます。CentOS 5 の場合は、準仮想化で動くには xen カーネルを使う必要がありましたし、CentOS 4 では xenU カーネルを使う必要がありました。

■実験結果
単位MFLOPS
 84.511594  Xen 完全仮想化 ゲスト (CentOS 6.2 x86_64)
 86.336558  Xen 準仮想化 ゲスト   (CentOS 6.2 x86_64)
 96.247089  Xen Dom0   (Fedora16 x86_64、ゲストとは OS 環境が異なります)
106.986019  KVM ゲスト (CentOS 6.2 x86_64)
101.272400  KVM ホスト (Fedora16 x86_64、ゲストとは OS 環境が異なります)
姫野ベンチの結果のみですが、KVM のほうがパフォーマンス (CPU, メモリ周り) が良いという結果になりました。

■所感
ベンチを実行する前の段階で、体感上 Xen のほうがもっさりしていると感じました。普段、ネイティブ環境 (KVM ホスト側) で作業して、たまに仮想マシンを使うという私の利用形態だと、わざわざ性能劣化した Dom0 で通常作業はしたくないですし、Xen のメリットは全く無いという感想を持ちました。また個人的に Xen で気になる点として、Dom0 上で標準の性能ツール (sar 等) を採取しても、Xen ゲストの性能データを得られない点が挙げられます。KVM であれば、ホスト側の sar には、ゲストの値も計上されます。また、KVM ゲストは、KVM ホストからはプロセスに見えるため、top コマンドでも、KVM ゲスト毎の負荷状況を簡単にモニターできます。

■個人的結論
現時点で、Xen を使うメリットは全くないと感じました。Hyper-V のハイパーバイザー部分は Xen と共有しているそうですし、Oracle VM も Xen ベースだとのこと。それらがいくらチューニングしようとも、KVM よりもレイヤーが厚い分だけ、性能面で不利なのではないかと思われます。

2012-02-19追記
古い VT(CPUの仮想化支援機能)非対応のPC(P4 3.6G)を再利用しようとして、そんな時には Xen が役立つと再認識しました。Fedora 16 で (KVM無しの) QEMU を試しましたが、実用的に使うには無理がありました。QEMU では、ゲストが起動するのに 30 分かかるのが、Xen であれば許せる時間内(数分)でゲスト起動できました。
人気ブログランキングへ にほんブログ村 IT技術ブログへ