前に、Ruby に ++ 演算子(インクリメント演算子)が無いことを書きましたが、Python にも無いということを、認識しました。
もっとも、Python の場合にはループの抽象度が高いようで、これまでの自分の経験上では、for (i=0; i<10; i++) のようなコードが必要なことは、皆無ですが。
2012年4月15日日曜日
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 のメニューは、自動で追加されるので、特に何もすることはなく、導入は簡単でした。再起動して、
■実験内容
ホストには 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 カーネルを使う必要がありました。
■実験結果
■所感
ベンチを実行する前の段階で、体感上 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 であれば許せる時間内(数分)でゲスト起動できました。
■準備
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 であれば許せる時間内(数分)でゲスト起動できました。
登録:
投稿 (Atom)
