- http://atnd.org/event/kernelvmTKB
- https://sites.google.com/site/kernelvm/
- 2012-09-22 13:10〜19:00 筑波大学 3A402
- 地図: https://docs.google.com/document/pub?id=1Q5KpYa-E2GtFGt5ihSSofQfmTl5XABxItchisEQu_Uk
- タイムテーブル: https://docs.google.com/document/pub?id=1mtOohndwHiq00wbUQ6U_pUShZ-RFHOUtryHDwWB5Q3M
- ハッシュタグ: #kernelvm (not #kernelvmTKB)
- ライブ配信:
- まとめ: http://togetter.com/li/377858
出発
- 朝7時起床
- バスチケットを買おうとしたら行列ができてた。どうやら鹿島スタジアムでサッカーの試合があるっぽい。でも切符を買わなくてもバスで支払えばよかったみたいだ。
- JR高速バスで 東京 10:30 → 筑波大学 12:05 (20分遅れ) スカイツリーの先端が雲にかくれてた。
筑波大迷路にはまる
- バス停から目標建物とは反対側(東側)に歩きだして中央口案内センターまで来て間違いに気づく。
- 3Aの建物の入口まで行くも、なぜか隣のAに入ってA402が謎の部屋で、泣きそうになる。
会場到着
- まぁ25分くらい迷ってなんとか着いた。あちー。今日は寒いんじゃないのか?!
- もってきた菓子パンと1階で買ったコーラで昼飯。
- 床コンセントは埋め込みなのでMacなんかの直刺しタイプは不可。
- WLAN貸し出しもできるとのアナウンスがあったが、WiMAXもバリバリ入るので問題なかった。AISTはぜんぜん入らないけど、この差はなんだろう。
[2012-09-22 13:10]
(Paris)MAP 実装してみた / 浅間正和 @m_asama 
- http://www.slideshare.net/m-asama/map-14353679
- http://en.wikipedia.org/wiki/Mobile_Application_Part
- MAPというプロトコルとは?
- http://tools.ietf.org/html/draft-ietf-softwire-map-02
- IPv6 networkの上でIPv4 serviceを展開するためのプロトコルのひとつ
- MAP-Eエンキャップ, MAP-Tトランスレーションのふたつがある。
- stateless: プロバイダー側に変換テーブルがひつようない。
- 1つのIPv4アドレスを共有できる。
- 464XLAT, DS-Lite, MAP-T, MAP-E, 4rd, lightweight4over6
- internet -- BR -- provider ipv6 net -- CE -- consumer net
- translationはv6netでACL/QoSが設定できる (inspectionしなくてもできる)利点。 40バイトくらいMTUが大きくなる欠点。
- encapsulationはv4の情報を保存できる(transだと完全に同じにはできない)利点。 チェックサムがめんどうな欠点。
- statefullの利点は少ないipv4アドレスでサービスを提供できる(要らない人には必要なひとに融通できる)。
- statelessの利点は悪意のある利用者にport専有されるおそれがない。状態表がいらないので安くできる。anycastなど冗長化が容易。セッション維持が簡単。事件などの捜査のためにlogを保存しておく必要がない。
- MAPはメッシュネットワークが組める(CE同士の通信が可能。BEを経由しなくてよい)。
- DHCPでBR addr/BR prefixがふってくる。ISPからMapping Rule Tableがふってくる。BRとCEはこれらの情報を共有している。
- メッシュ通信しなくてよいならMapping Rule Tableは自分のだけを知っていればよい。
- CEはRule Tableから一致するアドレスをさがしてくる → EA-bits lengthをきりとる → v4 prefixにうめこむ
- (このへんでおちこぼれた...変換むづい...)
- 「えー、なんかつまんないっすかねー」「でもこのまますすめます」
- ipipトンネル(tun?)を改造してつくった。
- トランスレーションはトンネリングフレームワークで実装したのがよかったかどうか?
- 特定の宛先のをスタティックルーティングで仮想インタフェイスにとばす。その設定は自動で行なわれる。
- v6で出すときはMTU1280で出す。
- ポート番号が制限されているので、そこがめんどい。作り込みが必要。port restricted NAPT。
- MAP-Tのチェックサム計算は泣きながら実装... ICMPのエラーがかえってくると中のヘッダーも書き換えないといけないくてそのなかのヘッダーチェックサムも再計算しないとカーネルがはじいてしまう...
- MAP-EとMAP-Tは別プロトコルに分離されてしまった(バンクーバーでコイントスで決めた?!)。 MAP-EがstandardでMAP-Tはexperimental...
[2012-09-22 13:51]
30日でできない!コンピューター自作入門 / 川田 裕貴 (@hktechno)
- http://www.slideshare.net/hktechno/30-vm
- open design computer project: open-arch.org
- 2人がかりで2年くらいあればFPGAからできないこともない...
- mist32
- FPGAはおそいのでプロトタイプ/少ロット用
- プロセッサ仕様(HDL)はBSDライセンス (open riscに対抗して緩いライセンスで勝負!)
- コンパイラはgccなのでGPL
- つくりたいからつくってるだけど、未踏の関係でいろいろ研究っぽくしないといけない..
- だいたいARM...
- OoOをやる! OoOに命令セットを最適化! (あとづけじゃない!たぶん他にはない)
- OSを支援する機能もたくさんのせる!
- stack pointerは専用システムレジスタ (OoOのため)
- callはなくてbranchで。
- プロセッサだけじゃなくて周辺もつくってる(デモしたようにディスプレイに出力できる)
- 101800LE(ロジックエレメント) (in-orderだけだと32000LE)
- 自分でプロセッサをつくろうとしても資料がない(論文っぽいのはあるけど)。とにかく苦労する。
- デバッグたいへん。デモ機もキーボード連打すると割り込みがバグるし、printデバッグしてもprintがとまるし。
- OoOはデータフロー型をノイマン型にのせたもの。
- 2オペランドの設計は失敗だった。その方が依存関係が少なくていいとおもった... reservation stageでは実質3オペランドになってるのに... op codeに10bit... 3オペランドにするとSPARCとかMIPSにちかくなっちゃう...
- mist1032sa
- TomasuloのアルゴリズムでOoO実行
- with Flag命令の撤廃: ADDCのようにキャリービットをみるようなのは回路規模が大きくなるしOoOが効きにくくなるので、フラグ設定はbranchの直前のみに(コンパイラがそういうコードを吐く)。
- ALU足し算が遅い? (by たけおか)
- branchでパイプラインがこわれるのを避けたい。
- キャリーをフラグじゃなくてレジスタに変えす命令があったいい? (レジスタ32本もあるんだし)
- ABIはMIPSまるパクリ? 16本はcaller保存して16本は自由につかってよい。ゼロレジスタはない。
- OoOの邪魔: ARMのCC, SPARCのレジスタウィンドウ, MIPS/SuperHの遅延ブランチは戦力外!
- 1Page 16KiB.
- 割り込み優先度: すぐにわりこむ、一定時間ごとにまとめて、コンテキストスイッチ時に(キーボードとか)、
- HWコンテキストスイッチ支援 みんなつかえよ! コンテキスト情報をつかってキャッシュを有効につかう(優先度の高いコンテキストのキャッシュは残すようにとか)
- コンテキストは全レジスタを保存。
- binutilはcgenつかうとらく
- gccよりもllvmがいまならよい (gcc internalsをよんでもいまいちわからない。よく知ってるCPUのコードをよむべし。ただしx86はだめ)
- 規模が80%くらいになると合成がおわらなくなる。
[2012-09-22 14:38]
- OS用の命令
- CAS
- multicsを動かすような難しい命令が欲くなるOSじゃないと。
- unixみたいな簡単なOSではしょぼいCPUでも動いてしまう。
- 割り込みやめたら? コンテキストを退避するスレッドを動かしておいてポーリングしてフラグがおちたら.. データーフローっぽく。
[2012-09-22 14:42]
Multithread Tinyl BASIC on raw PIC32 and ARM / @takeoka 
- PIC32: MIPS core, 210円
- ARM coretex M0: 命令セットもThumb 2だし割り込みもちがうし、
- ポイント64ビットむだ。どうせ近所しか指してないのに。配列+インデックスで。
- 高級言語マシン: OSはいらない。Lisp, Smalltalk, BASIC.
- シェルからlsコマンドは対話って感じじゃない!
- LLスクリプト言語つかってるなら対話しろ、バイナリをロードするな!
- マウス、ウィンドウシステム、キャッシュコヒーレンシはSmalltalkマシンに最初にのった。
- あまりファイル操作というのはない。電源はあまり切らない。
- いちいちROMに焼かなくてもBASICで対話的にデバイスポートをたたける。
- 現地でのデバッグもできる。
- マルチスレッドなら割り込みなくても込み入った処理が書ける。
- Tiny BASIC
- 文字列のまま保存するので変換系がいらない。編集がらく。(バイトコードだとめんどう) ただし行番号はバイナリ。
- 配列は一次元のみ。
- インタープリタ
- IBM 1401は可変長文字列で動くハード。実在する。
- スレッド
- コンテキスト: PC SP レジスタ スタック
- スレッドforkしたらreadyqの先頭につないで、さっさと初期化させる。
- あとwait,send,sleepがある
- fork(行番号) 関数: PIDを返す
- オブジェクトに整数を送る。
- messnew messsend messwait lastmess
- 割り込みはつかってない。タイマ割り込みもない。1命令ごとにスケジュール。
- 割り込みがなければ、どんなCPUでも動く、決定的に動く。(割り込みのせいで動かないといういいわけがない)
- 実時間システムでは割り込みはつかわない! 最悪時間を決定的に設計。
- 割り込みは予測できないのが本質。
- 500命令で1tick。
- (デモ)決定的なので二度実行して同じ出力になる。
- Q:mrubyは載せない? A:LLきらい. (ぼくたちの世代はBASICを知らないので書けない)
- Q:サイズは? A:TinyBASIC: 今回のは15KBくらい。Cで書いてるので。10KBでもでかい。手でアセンブラで書けば2KB?
[2012-09-22 15:32]
[2012-09-22 15:34]
kernelでもvmでもない HadoopとYARN / @oza_x86 
- hadoop contributer
- hadoopの最適化が流行
- キャラがかわいい。周辺ソフトのキャラもかわいい。
- MPIは耐故障性が弱い→MapReduce
- Googleのクローン実装はおわって、独自機能を追加中。商用でもつかわれてきている。
- Yahoo!(4000台)くらいの規模だとname nodeがボトルネックになる → HDFS federation
- YARN: mapreduce 2.0
- map-reduce以外のプログラミングモデルも動くように
- マルチテナント化
- Apache Mesosににてる
- リソース管理、死活監視、ジョブ監視のうちリソース管理だけをきりだしたもの。
- YARN/HadoopもJavaで書かれている。
- 今はResourceManagerが単一障害点になっている. 落ちるとjobを発行できなくなる。
- MapReduceを多段にするワークフローを書けるようにする。
- 分散ファイルシステムとHadoopとのIOが遅いが、そこをスキップできるようになる。
[2012-09-22 16:09]
LT:mrubyをLinuxに組み込んでみた / @yuzuhara 
- カーネル内でスクリプト言語を動かしたい。ポリシーをユーザ空間からカーネル空間にもってくるのがめんどくさい。
- binarizeしてカーネルがよみこんでいる。
- チューリング完全じゃないけど?
- Linusはカーネル内にparserが入るのを好まない。(ただしBPFとACPIははいっている)
- Rubyをもってこうとしたが、大きすぎて失敗。アプリへの組み込みをそもそも想定していない。
- Lua,Pythonはアプリ組み込みによくつかわれている
- Lunatik: カーネルでLuaをうごかそうとするやつ。まじきち。
- mrubyが4/20にとつぜん公開。
- コードベースは56570LOCでBitVisorよりちょっと大きいくらい。
- luaはparserも組み込みだがmrubyは分離できる。bytecode onlyにできる。
- mruby: クロスコンパイルは考えられてない。ロックまわりが簡単になってる。
- /dev/mrubyにコードをつっこむと実行される。
- Q:なぜruby? A:最初はparserがほしいくらいだったがあれこれ欲くなってrubyに、でもよけいな手間がかかってしまった?
[2012-09-22 16:53]
LT:TCP/IPスタックまわりの話 / @Yuryu 
- 携帯ゲームは画面遷移がとっても多い。AJAXはつかってなくてページ遷移がとてもおおい → SYN Flooding?
- syncokie: djb先生作なのでログが大量にでてサービス不能になる。
- tcp_max_syn_backlogだけを増やしてもsomaxconnも大きくしないとダメ。
- apacheのListenBacklogも増やさないとダメ。backlogが8bitなレガシー環境向けにデフォルトは511.
- これらシステム全体の上限はない。
- 値はけっこう大きくしてもだいじょうぶ。80バイトくらいしか消費しない。
[2012-09-22 17:01]
LT:Suspend/Resume BHyVeの停止と再開 / @iorivur 
- TSTP/CONT はあたりまえ
- VMCS(vm machine control structure)はメモリ、VMREAD命令で値をとれる。VMREADはいちどに全部とれないので一つずつ丹精こめてとってこないといけない。
- (実演1)
- VMREADするときは止めておかないとだめ。VMCLEARされちゃう?
- /dev/vmm/
でとってこれる。 - vmexitしてvmmが動くまえにsuspend/スナップショット保存/resumeするとexit reasonがとれなくて死んじゃう?
- vmcpyはsuspend/resumeではなくてmigration.
- Q:KVMはどうしてるんだろう?
- Q:やばい状態があって困るならロックで保護したら?
- Q:VMCLEARしたらメモリにフラッシュされるはずだから
- Q:exit reasonを復元できないんだったら、処理してからsnapshotすればいいんじゃね?
[2012-09-22 17:25]
LT:/proc/irq//smp_affinty / @syuu1228 

- http://www.slideshare.net/syuu1228/procirqltirqsmpaffinity
- https://www.dropbox.com/s/hlb00lc7emk53me/smp_affinity.pdf
- cat /proc/interrupts
- affinityはディストリはよろしく設定してくれてる。
- legacy device → IO APIC → local APIC
- MSI device → local APIC
- logical modeでラウンドロビンがHWで実装されてる。
- irq_balanceはパッケージで入れるディストリだと入ってないことも。
[2012-09-22 17:43]
LT:A brief Introduction to arm-js / Ryota Ozaki (ozaki-r) 
- libvirt,qemu,linuxなどにパッチをなげている。
- ARMv7のエミュレータをjavascriptで書いた。
- ARMv7を実装、Thumbは未。
- Versatile Express platform(GIC,UART)も実装。そうしないとlinuxが起動しない。
- ARMv8の仮想化を知らべたかったが組み込み経験がないのでエミュレータをつくってみることに...
- jslinuxがある。(qemuとかの作者がつくったやつ)
- qemuのコードはよんでない。リファレンスマニュアルとlinuxのコードを読んでつくった。
- デコーダを実装。デコード実行できなかったら例外→最短経路 (3ヶ月でうごいた!)
- ブート5分かかる。 jslinuxは1分未満。
- suspend/resumeも実装した。HTML5 filesystem APIで実装。JSONで保存。
- デバッグ機能のつくりこみ
- loggerr: ディスアセンブルしたものが表示される。
- branch tracer: linuxカーネルの関数名を表示。
- 性能的にはjslinuxの1/4くらい (bogo mips)
- javascript的にはでかい関数にifをならべるのが速い。
- Q:ページフォールトは? A:すべてのメモリアクセスを検査している
- Q:node.jsでうごく? A:たうん
- JSだけで1万行。もし次つくるならtranscodeした方がいい。
- 特定のカーネルでしか動かない。まだバグがある。
- カーネルはThumb命令なしで作れる。
- Q:割り込みのサンプリング間隔? A:タイマーは1/100くらい、キーボードなんかはjsから。
[2012-09-22 18:02]
LT:TCP connection の保存と復元 / @mittyorz 
- VMのライブマイグレーションだと簡単にできるけどコスト高い。
- Linux3.5ならTCP_REPAIRでいろいろできる。
- 保存:iptableでブロックして、repairモードにして、接続情報やキューを読みとって、close().
- 復元:socket,repair,seq,bind,connect,...
- crtools: openvzのサブプロジェクト。tcpだけでなくプロセス全体をCheckpoint/Restartできる。
- なぜか0,1,2が復元されない... closeされたまま (個人的にはttyだったら復元したくないだろうし...)
[2012-09-22 18:23]
LT:スイッチ・ルータのしくみ / @yogata 
- http://www.slideshare.net/ogatay/ss-14394044
- U/D plane, Control plane, I/? plane
- IXP1200: ちょっと昔だけど情報がいっぱいある。
- strong ARM
- 6 microengine
- 探索は4bitのtri
- 速いのはSRAMインデックスアクセスしてるから、マルチスレッドでメモリコピーしてるから。
- CAMは1クロックでマッチングできるが電気を喰う。
[2012-09-22 18:34]
LT:Hachune.net Kernel/VMの記録 / @Phenomer 
- http://hachune.net/kernelvm/tsukuba1209/index.html
- おなまえ.comを借りてFreeBSDを入れた。
- Virtioを入れると2倍以上高速化される。
- 6pf + ALTQ + Jail + VIMAGE → Panic → VIMAGEはまだまだ。
- 自宅のNetBSDに。
- ZFS on NetBSD (v23): かなり安定してきている。
- LVM
- iSCSI initiator
[2012-09-22 18:40]
LT:mikutter入門 / @katsyoshi 
- http://www.slideshare.net/katsyoshi/introduction-mikutter
- rubyとgtkl+とruby gtk2があればうごく。でもMacではうごかず。
- かんたんにプラグインがかけるよ。
[2012-09-22 18:47]
LT:Nested VMM とはなんぞや / @syu_cream 
- VMのなかでVMMを動かす
- VMMを動かすのに実機が不要、デバッグがらく、
- どうすればnestできるか?
- the turtles projectとか
- VMXの仮想化
- VMEnterは L0からL2にいきなりVMEnterする。L0VMMはL1VMMのなかのVMCSも管理する。
[2012-09-22 18:57]
懇親会
- 百香亭筑波大学店
- 当然ながら道はさっぱり分からないので集団にくっついて移動。
- はじめてプレミアムモルツのんだ。うまいかもなぁ。