Plan9日記

2014-12-01

OSv雑感

次のスライドは@syuu1228さんの「OSvの概要と実装」。

  • ライブラリOSが流行っている感じもするので、そのうちまとめておきたい。USENIX ATCのOSvの発表を聞いて、タネンバウム教授がexokernelと何が違うみたいな質問をしてたそうな。
  • ユーザ空間がなくカーネル空間のみという割り切りはすごい。ハイパーバイザが最後の砦になるので、よいという判断。カーネルじゃなくてライブラリと考えればそんなものかとも思うが、カーネルアプリが同じメモリプールからmallocするとなると、ちょっとしたオーバランでカーネルをぶっ壊してしまいそう。
  • アプリからPF filterやnet channelにフックを仕込んでパケットを奪って処理することが可能。実装の雰囲気としてはカーネルモジュール
  • ttyないのでエディタを開発するのは難しい。REST APIを利用して外部からファイルを流し込むのがOSv流。
  • Dockerと狙いがかぶってそう。完全なisolationが一つの鍵か?
  • Virtual Appliance的な利用を想定しているようだ。
  • 元々ゲストOS上で動くことしか考えてなかったが、実はベアメタルで動きそうなぐらいレガシーデバイスがサポートされつつある。もう一息でベアメタルで動いてしまったり?
  • Huaweiがaarch64サポートを実装。

2014-11-11

gitから任意のバージョンのLinuxカーネルソースコードをチェックアウトするメモ

何はともあれgit clone。

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

Linuxカーネルでは、3.x.y系列ごとにブランチがあり、リリースバージョンにタグを付けることになっている。なので、ソースコードをチェックアウトする方法は2つ。ブランチ(linux-3.x.y)をチェックアウトする方法と、タグ(v3.x.y)でリリースバージョンをチェックアウトする方法。

まずはブランチから。git branch -aで本家のブランチがずらずらでてくるので、見たいバージョンを探す。

$ git branch -a

あとは任意のバージョンをチェックアウトするだけ。

$ git checkout -b linux-3.10.y origin/linux-3.10.y

続いてタグ。git tag -lでずらずらでてくる。

$ git tag -l

タグを指定して、チェックアウト。

$ git checkout -b v3.10 v3.10

ここではローカルリポジトリにブランチを作っているけど、もちろん「-b xxx」を指定しなくてもOK。

ソースコードリーディングのお供としてctagsをと思ったけど、CentOSのvimだとcscopeがデフォルトっぽいので、cscopeのタグファイルを作っておく。

$ make cscope ARCH=x86

2013-04-10

UbuntuでInfinibandクラスタを作る

今までRedHat系Linux + OFEDパッケージでInfinibandを使うことが多かったが、Ubuntu 12.04 + 基本パッケージでどこまでできるかやってみた。InfiniBand HCAはMellanoxのConnectX-3。カーネルは3.5.0-23-genericで、ドライバ類はカーネル標準の物を利用する*1

結論から言えば、基本的に基本パッケージだけでInfinibandが動く環境を作ることができる。ただし、Ubuntu 12.04に含まれるlibmlx4パッケージはConnectX-3に対応していないので、ここだけは12.10のパッケージを持ってきてしのいだ*2。したがって、12.04でも新しめのHCAを使わない場合や、12.10では何の問題もなく動くだろう。

まず、/etc/modulesにとりあえず必要そうなモジュールを追加して、それぞれをmodprobeしておく。

# For Infiniband
mlx4_ib
rdma_ucm
ib_umad
ib_uverbs
ib_ipoib

基本的な動作確認とMPI実行環境が必要であれば、ibverbs-utils、infiniband-diags、perftest、openmpi1.5-binあたりをインストールする。コンパイル環境が必要なノードには、これらに加えてopenmpi1.5-dev、gcc、gfortran、g++あたりをインストールする。

冒頭に書いた通り、12.10のlibmlx4をダウンロードして、インストールする。

$ curl -O http://us.archive.ubuntu.com/ubuntu/ubuntu/pool/universe/libm/libmlx4/libmlx4-1_1.0.4-1_amd64.deb
$ sudo dpkg -i libmlx4-1_1.0.4-1_amd64.deb

ibv_devinfoやibstatでHCAが見えているか確認する。

OpenSMをどこか最低1台のノードで起動する。おそらく自動起動になっているので、一度Infinibandの設定が済めば、後はこの作業は不要。

/etc/init.d/opensm start

OpenSMとのネゴシエーションに成功すれば、ibv_devinfoでポートの状態がPORT_ACTIVEになるはず。あとはibpingやib_write_bw、ib_read_bwあたりでノード間の疎通や性能を確認する。

node1 $ sudo ibping -S

node2 $ sudo ibping <node1のLID>

必要ならIPoIBの設定もやっておく。/etc/network/interfacesにib0の設定を加える。デフォルトではdatagramモードで動くが、connectedモードにしてもよいかも。

# IPoIB network interface
auto ib0
iface ib0 inet static
address 192.168.250.1
network 192.168.250.0
netmask 255.255.255.0
broadcast 192.168.250.255

最後にOpen MPIの動作を確認する。まず、FAQだけど、memlockの制限をunlimitedにしないと動かない。安直には/etc/security/limits.confに次の行を追加すればよい。SSHがPAMの設定を参照してくれるので、SSH経由でプロセスを起動してもちゃんとmemlockがunlimitedに設定される。Ubuntu 12.04は大丈夫だったけど、これだけでダメな場合は、/etc/ssh/sshd_configのUsePAMの設定を確認すること。

* soft memlock unlimited
* hard memlock unlimited

あとは、適当なMPIプログラムを動かしてみる。

$ mpirun --mca btl openib,self -np 20 -hostfile hostlist ./a.out

*1:ちなみに、最近のOFED 3.x系ではOFED 1.5.x系とは異なりドライバは含まれない。

*2:詳細はここを参照。ibv_devinfoを実行すると「libibverbs: Warning: no userspace device-specific driver found for /sys/class/infiniband_verbs/uverbs0」というメッセージが出て動かない。

2012-12-31

[] システムソフトウェア研究の将来

本年最後のエントリはちょっと無理してシステムソフトウェア研究の将来に思いを馳せてみたい。(おぉ、まだ酒は入っていないw)

去る12月6〜7日にコンピュータシステムシンポジウム(ComSys)2012が開催された。加藤和彦(筑波大)教授による基調講演「仮想化とシステムソフトウェア研究」では、Multics、Unix、Mach、そして同教授が関わったDSR/Planet、遠隔RPC、BitVisorなどの研究を振り返り、システムソフトウェア研究が目指した理想と社会が求めた現実とのギャップ分析が示され、非常に面白かった。イノベーションの源泉がシステムソフトウェアよりも上位層に移っているのは確かではあるが、システムソフトウェア研究者としては、例えばセキュリティなど、自分の研究と社会との関係をどう位置付けるかが重要と改めて感じた。また、質疑応答では、日本は特にインフラが見えにくいという問題があり、若い人にシステムソフトウェア研究への興味を喚起するにはその使命感をアピールすることが重要ではという指摘もあった。

情報処理学会のOS研究会などの動向を見ると、この分野が萎縮しているように感じることがある。しかし、海外に目を転じると、システムソフトウェア系の会議の参加者は年々増加しているそうである。Google、Microsoftを始めとする巨大インフラを持つIT企業の存在感が大きいし、研究の出口が見えている感がある。研究としての深みがないとか批判はあるだろうが、人は集まるし、高い質も保てているのではないだろうか。一方、日本でも、カーネル/VM探検隊やインフラエンジニアの勉強会は非常に盛んなところを見ると、まだまだ捨てたモノじゃないなと感じる。このような草の根というかボトムアップの活動と学会活動をうまく結びつけられないかなと、個人的には思っているのだが。。。

確かにシステムソフトウェアは地味だし、成果が出るまで時間がかかる。でも、コンピュータシステムが成立する上で必要不可欠なのある。まさに、「誇り高き3K」仕事。

分野が違えばこの手の縁の下の力持ち系の仕事の啓蒙活動は「プロジェクトX」や「メタルカラーの時代」など、いろいろなメディアでまとめられている。今ちょうど「メタルカラーの時代」を読んでいるのだが、モノを作る、社会的基盤を築く、社会や自然のシステム、メカニズムを探り創造する人々のインタビューが満載である。この本が出たのは1993年で、IT系の話題は磁気デバイス、通信衛星や海底ケーブルなどが中心で、しかもインターネットはもう存在するが、本書には「イ」の時も出てこない。ソフトウェアの話はTRONだけ。奇しくも坂村健先生は「TRONは21世紀のインフラ作り」と言っている。さて、90年代と比較しても、ソフトウェアの社会インフラとしての重要性は比べものにならないほど増大している。巨大土木事業と同じように、子供の世代にこのインフラは我々が作ったんだ、支えているんだと胸を張って言えるようになりたいではないか。

ComSysの懇親会で、プログラミング言語ではかなりいろいろな可能性にトライして失敗するという歴史を経てきたが、OSにはまだその可能性を探究し切れていないのではないかという話が出た。私ぐらいの歳になると、「OSとはかくあるべし」という固定概念で思考が固まってしまう。若い人にはその既成概念を打ち破って欲しいな(というのは無茶ぶり?)。来年はOS研究の最高峰、ACM SOSPの開催年である。「What is good systems research?」を読みながら傾向対策でもしてみたら? まぁ、学会の傾向と対策からイノベーションは生まれないか。

「メタルカラー」の時代

「メタルカラー」の時代

2012-07-30

Open vSwitchでGREを使うには

NiciraがVMWareに買収されたというニュースが入ってきたが、今日はGRE(Generic Routing Encapsulation)について調べてみる。

Linuxカーネルの実装とは別に、Open vSwitchはGREのユーザレベル実装を持っているようだ。ソースはdatapath/vport-gre.cかな。

使い方は簡単。GREで接続したい2ノード(IPアドレスはそれぞれ192.168.10.1と192.168.10.2)のそれぞれで、ポートgre0を追加して、set interfaceすればOK。

$ sudo ovs-vsctl add-port br0 gre0
$ sudo ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.10.2 options:pmtud=false
$ sudo ovs-vsctl show                                        
01f36f74-52d7-4726-a143-28eb85439345
    Bridge "br0"
        Port "tap0"
            Interface "tap0"
        Port "gre0"
            Interface "gre0"
                type: gre
                options: {pmtud="false", remote_ip="192.168.10.2"}
        Port "br0"
            Interface "br0"
                type: internal

対抗側も同様にして、remote_ipを192.168.10.1とする。ちなみにこのgre0はOpen vSwitchの内部的に実装されているので、ifconfigから見ることはできない。