Syoyo Fujita's Blog

raytracing monte carlo

Month: December, 2013

aobench on ZeroVM

動かすアプリが決まっている場合に有益そうな, 次世代の(アプリケーション?)仮想化プラットフォーム ZeroVM で aobench を動かせるようにして, どこでもセキュアに aobench を実行する可能性を検討してみましょう.
(ZeroVM の中身はアプリを NativeClient でビルドして sandbox 実行するのがキモのようです)

http://zerovm.org/wiki/The_Cloud_Hypervisor

検証環境

– Ubuntu 12.04.3 LTS

インストール

Ubuntu 12.04 LTS 用にはプレビルトバイナリがあるのでこれを活用します.

http://zerovm.org/wiki/Download

を参考に ZeroVM 環境やコンパイラをインストールします.


$ sudo apt-get install zerovm-zmq
$ sudo apt-get install zerovm-cli
$ sudo apt-get install zerovm-zmq-dbg
$ sudo apt-get install zerovm-zmq-dev
$ sudo apt-get install gcc-4.4.3-zerovm

Makefile などを流用するためにサンプルコードを取得します.

$ git clone https://github.com/zerovm/zerovm-samples

hello サンプルを参考に aobench サンプルを作ります.

$ cd zerovm-samples
$ cp -Rf hello aobench

Makefile をいじり適当にファイル名を aobench に変えます. -lm を加えて数学ライブラリをリンクするようにします. cat $(NAME).stdout.log の行を削除しておきます.

aobench の C コードを https://code.google.com/p/aobench/ などから取得します. ファイルに画像を出力しているところを stdout に出力するように変えます.

ビルド and 実行を行います.

$ make
$ cat aobench.stdout.log > ao.ppm
$ eog ao.ppm

aobench.stdout.log に結果が書かれているので, これを変換して aobench 画像が出れば成功です.

aobench-zerovm

Happy ZeroVM hacking!

qemu + binfmt + chroot で AARCH64 環境を構築する.

2014 年から ARM 64bit(AARCH64) な環境が普及されるのが見込まれています.

qemu を利用してお手軽かついち早く Intel x86 環境で AARCH64 環境を作り体験してみましょう.

検証環境 : Ubuntu 12.04.3 LTS(64bit)

qemu と binfmt パッケージをインストールします.


$ sudo apt-get install binfmt-support qemu

https://wiki.debian.org/Arm64Qemu から debian unstable のプレビルト chroot 環境をダウンロードして展開します.


$ sudo mkdir /src/chroots/debian-unstable-arm64
$ sudo tar -zxvf debian-unstable-arm64.tar.gz -C /srv/chroots/

/usr/share/binfmts/qemu-arm64 ファイルを作り以下の記述を行います.


package qemu-user-static
interpreter /usr/bin/qemu-arm64
flags: OC
offset 0
magic \x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7
mask \xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff


$ sudo update-binfmts --import qemu-arm64

として取り込みます.


$ sudo chroot /srv/chroots/debian-unstable-arm64
# uname -m
aarch64

と chroot 環境にログインできて aarch64 と表示されれば成功です.

ホスト環境から直接 AARCH64 バイナリを実行する

ダイナミックリンクバイナリをうまく実行できるようにホスト環境でシンボリックリンクを張っておきます.


$ sudo ln -s /srv/chroots/debian-unstable-arm64/lib/aarch64-linux-gnu /lib/
$ sudo ln -s /src/chroots/debian-unstable-arm64/lib/ld-linux-aarch64.so.1 /lib/

ホスト環境でクロスコンパイラを使ってバイナリを作成, 実行します.


$ cat main.c
#include
int
main(int argc, char** argv)
{
printf("Hello AARCH64!\n");
exit(0);
}

$ aarch64-linux-gnu-gcc main.c
$ ./a.out
Hello AARCH64!

なんとも普通のホスト環境(x86)のバイナリとして ARM64 なバイナリが実行できました. 開発が捗りますね! Happy AARCH64 coding!

TODO

– ユーザの管理はどうするか?
– HOME の共有はどうするか?
– クロスコンパイラ前提なら共有ライブラリ以外の chroot 環境は必要ない?

参考文献

– QEMUのもうひとつの使い方: ユーザーモードエミュレーションとbinfmtとchrootの組み合わせ http://blog.kmckk.com/archives/2342452.html

– Arm64Qemu https://wiki.debian.org/Arm64Qemu

– AARCH64 cross compiler https://launchpad.net/linaro-toolchain-binaries/

C/C++ JIT shader on ARM

I’ve coded (World’s first) C/C++ JIT shader on ARM processor.

The JIT shader is connected with NEON-optimized interactive ray tracer, so you can edit shader and view its rendering result interactively.

You need MCJIT on ARM target, since old JIT engine is not supported on ARM processor.