* memo for 7th Kernel/VM expedition
[lab.git] / Commentary / kernelvm / 20120422.log
1 FPGA
2         FPGAの状況
3         FPGAボード
4                 立地で使い勝手の良いものは高い
5                 雑誌付録もあるが……
6         PDP-11
7                 16bitミニコン
8                 1970-1990頃
9                 回路図などの詳細なマニュアルが公開されている
10                 大型冷蔵庫くらいあったものが、最終的には1チップに
11                 
12                 初期のUNIXのプラットフォーム
13                 ソースコードが公開されていて、UNIX第6版の詳細な注釈本(Lions本)も出ている
14         FPGAにPDP-11を実装する
15                 目標は「PDP-11用のプログラムが動く」
16                 PDP-11の命令セットや周辺回路はHDLで記述
17         HDL
18                 見た目はプログラミング言語に似ている
19                 コンパイル・リンク・ロード→論理合成・配置実装・プログラム
20                 本質的に並列処理
21                 仕様を記述する、という思想から出発
22                 テスト記述も意識している
23                 
24                 主流はVHDLとVerilog HDL
25                 SystemCというものもあるがいまいち流行らない
26         VHDL
27                 Adaベース
28                 強い型付け言語
29                 激しくダサい(主観)
30                 
31                 何故ダサいか
32                         大文字と小文字の区別がない
33                         エラーが出ないのに動かないことがある
34         シミュレーション
35                 HDLによる記述はシミュレーション出来る
36                 ghdlなら無料
37                 
38                 波形が格好いい
39                 目で見て理解
40                 問題の発見に有効
41                 
42                 信号が伝わっていくときの遅延など、様々なレベルでシミュレーションが出来る
43                 
44         シミュレーション例
45                 ghdl + gtkWave
46                 UNIXのブート中の例
47         
48         何をやったか
49                 w11(OpenCores)をAvent Microboardに移植
50                 元々他のFPGAボードでは動いていた
51                 入出力デバイスのフィッティング
52         
53         デモ
54                 ……元々使っていたボードが壊れましたので出来ません
55                 -> 別のボード
56         
57         UNIX v6
58                 当時は出力がターミナルではなくてプリンタといったこともありえたので、
59                 現在のように環境などがログインプロンプト時に出ない
60         
61         w11 CPU coreのdoxygen出力
62         
63         ロジアナ
64                 XilinxならChipScopre
65         
66         何が嬉しいのか
67                 ソフト屋はマニュアル通りハードウェアが使えれば十分なのか
68                 ユーザはマニュアル通りソフトウェアが使えれば十分か
69                 
70                 必須ではないが、知っていればお得
71         
72         野望
73                 PDP-11の回路をFPGAでそのまま実装
74                 VAXを実装
75         
76         「PDP-11でライバルと差を付けよう!」
77
78 Extreme Java
79 @Fantom_JAC
80         
81         自己紹介
82                 Java原人(Java原理主義者)
83                 Javaのためならなんでも
84                 無線、特にZigBee
85         (Java原人からみた) Javaとは
86                 小型の組み込み機器等に使えるプラットフォーム
87         やりたかったこと
88                 JavaからUSB無線ドングル
89         環境
90                 Javaで直接レジスタがたたける
91                 EHCIデバイス
92         想定と違った
93                 途中に仕様の分からないドライバと・仕様の分からないAPIが挟まっていた
94         必要なもの
95                 EHCIドライバ
96                 USBスタック・フレームワーク
97                 Ralinkドライバ
98                 802.11MACスタック
99                 TCP/IPスタック
100         EHCIとは
101                 USB2.0のコントローラ仕様
102                 ちゃんとレジスタの仕様が公開されている
103         用意されたUSB環境
104                 cHCが存在しない
105                         EHCIで1.1も繋がる謎仕様
106                         1ポート
107                         OTGを経由している
108                                 OTGにはレジスタの仕様の標準がない
109         Global Controller
110         OTG Controller
111         「せめてJavaらしく」
112                 自分でメモリ管理するJava
113                 new出来ないので
114         USBスタック
115                 JSR-80にたぶん準拠
116                         実装はない……
117                 TCKは通してません
118                 IMBの作ったRIを使用
119         squilla-jsr80
120                 JSR-80をOSGiに対応させた
121                 UsbDeviceDriverを継承するとデバドラが簡単に作れる
122         Ralink
123                 その界隈ではあまりにも有名
124                 RT2860/3070を使用
125                 FreeBSD用非公式ドライバを移植
126         Ralink IO
127                 Ralink共通(?)のAPIセット
128                 たぶんUSB以外のインタフェースでも共通
129                 USBの実装はControl
130         Ralinkの謎
131                 起動時にファームウェアを丸ごと転送
132                 しかも転送がよく転ける
133                 膨大な量の転送
134                         改造すれば普通に電波法破れそう
135                         メモリいじってパッチを当てている疑惑
136                 怪しいノード管理
137                         wcid = associationId & 0xFF
138                         8bit <- 16 bit
139                 ControlFrameだけは実装されているっぽい
140                         リアルタイム性の問題
141         squilla-net
142                 Javaでプロトコルスタックを書くためのライブラリを作った
143                 802.11関連
144                         ManagementFrame
145                         MLME
146                         Javaに欠けているWLAN用API
147                                 Androidにはある……
148         MLME
149                 SCAN
150                 JOIN
151                 AUTHENTICATE
152                 
153                 JOINがよく分からない
154                         実際にはsyncのこと?
155         TCP/IPスタック
156         IPv4
157                 適当
158                 フラグメント処理とかやっていない
159         ARP
160                 RequestおよびReply監視用Thread一本
161         UDP
162                 簡単
163                 Thread未使用
164         TCP
165                 もう二度と実装したくないプロトコルスタック堂々の一位(一人に聞いた)
166                 不可解な輻輳制御
167                 理不尽な仕様書
168                 ...
169                 Slow-startもCongrestion avoidanceもなし
170                 TCPConnectionごとにThread一本
171         基本動作
172                 基本はステートマシン
173                 tickと呼ばれるMethodを無限ループで呼び続ける
174                         3Dゲーム開発でよくやる手法
175                 tickされた時に
176                         受信FIFOに溜まっていれば取り出して、TCPInputに投げて処理
177                         なければTCPOuputにて、ACK可能か判断し、送信
178                         最後に再送タイムアウトが発生したかチェックして、再送信
179                         
180         何故Single-Threadか
181                 当初はMultiの予定
182                 GCが使えないので管理が大変
183                         GCより高いプライオリティで動いている
184                 プログラムのミスが起こりやすい
185                 リソースを消費する
186                         tickが空回りしないように何もしないときは50ms程sleep
187         BufferedPipe
188                 スライディングウィンドウ実現のために作ったクラス
189                 内部はリングバッファ
190                 非同期に可変長のバイト列を出し入れ
191                 つまり両端がInputStream/OutputStream
192                 
193                 探したけど意外とこういうクラスはなかった
194                 元々TCP向けなので入出力個別にシャットダウン可能
195                 readするとブロック
196         残酷な現実
197                 やっぱりどうしてもTCPはまともに動かない
198                 相性が酷い
199                         より具体的にいうと、暗黙の了解のようなものが多かった
200         スクラッチから実装することの意義
201                 勉強になる
202                 百聞は一コーディングにしかず
203                 デバッグが容易
204                         腐っても自分の書いたコード
205                 ライセンス問題ゼロ
206                 話のネタになる
207         分かったこと
208                 Linuxはすごい
209                         EHCIのコードの雑さ
210                         ネット周りのスパゲティ
211                         よくこれで動いているな
212                 FreeBSDは読みやすい
213                         特にネットワークスタック
214                 IEEEの仕様書は非常に親切
215                         ちゃんとPDFで公開されている!
216                 IETFの仕様書は非常に非親切
217         そもそも
218                 ギョウムで必要でした
219                 半年強で実装
220                 結局使われず
221                         TCP動かなかったし…
222                 
223                 「Javaなんて使わない方が良いんじゃないの?」
224         今後
225                 JavaMEがCortex-M向けに出るらしいので
226                 使い道募集中
227         
228         組み込みJavaの場合GCが無い
229                 ImmotalHeapというものを使用する
230                 自分でfreeする
231         
232 なのは完売
233 super_rti
234         とある関数のバトルプログラミング
235         
236         フック処理
237                 相手のプロセスに干渉して、特定のタイミングで自分の任意の処理を呼ばせる
238                 外部からソフトウェアの拡張を行える
239         誰からもフックされないようなプロセスを作るには?
240         管理者特権は出てこない
241         Windowsでのフック
242                 dllを作る
243                 フィルタドライバ
244                 APIを使う
245                         よく使われるAPIの話
246         dllやドライバは管理者特権が必要だったりで、気づかれやすい
247         dll injection
248                 OSのプロセス保護を突破しやすい
249                 プログラムを作りやすい
250         ドMくんとドSくん
251                 なのフェイの薄い本ください -> なのは完売
252         守りたい、この笑顔
253         anti dll injection
254                 賢いLoadLibraryAを作ればよい
255                 攻撃用dllであれば拒否する
256         APIフック
257                 今回は
258                 sexyhookを使う
259                 バリアを作った感じ
260         LoadLibraryは複数ある
261                 LoadLibraryAがやられたようだな…
262                 裏ボス:SetWindowsHookEx
263         LdrLoadDll
264                 LoadLibraryの元締め的役割
265                 SetWindowsHookExも採取的にはLdrLoadDllを呼び出す
266                 LdrLoadDllに対応すれば良い
267                 全てのdll injectionに対応可能
268         
269         dllを使わない攻撃
270                 実はdllは無くても攻撃出来る
271                 CreateRemoteThreadで直接マシン語コードを挿入可能
272         anti thread injection
273                 そもそもThreadはどうやって作られているのか
274                 スレッドが実行されたら、実行される中身をUSOThreadに飛ばしてしまう
275                 スレッド開始 -> BaseThreadInitThunk -> uso thread
276                         判別が難しいので、現時点では無差別
277         
278         やられっぱなしは悔しいので攻性防壁
279                 結構難しい
280                 攻撃してきた相手を特定する必要がある
281                 注意としては、dllを削除するのは危険
282         anti thread injection
283                 攻撃者のコードによっては反撃出来る
284         dll名からexeを特定して、exitする
285                 zap! zap!
286         攻撃してきたらsleepに置き換える
287                 攻撃元はfreezeしてしまう
288         
289         残酷なのは戦争
290         
291         相手の攻撃より先にバリアを張るのが大切
292
293 コマンドとシェルスクリプトで企業システムを作る
294 上田隆一 @uecinfo
295
296         USP友の会
297                 @usptomo
298                 bashでCGIを書く人間
299                 word pressを使っていたが、injectionされたので「bashで作ればinjectionされないでしょう」
300         Universal Shell Programming Laboratory
301         
302         自社開発指導
303                 顧客企業の情報システム部
304                 CUIでOSを使う講習
305                 vimの講習
306                 awk・sedの講習
307                 シェルスクリプトの書き方
308                 イントラ用CGI
309         いわゆるSIの世界
310                 4次受け・5次受け当たり前
311                 DBのレイアウト表の作者が某大手の3次受け
312                 1次2次は何をしてたのか?
313                 まず、どのRDBMSを入れるか、から始まる
314         実績があるが高い企業と、安いが知らない企業はどちらが選ばれるか
315                 知らない企業は警戒される
316         ソフトウェア開発の問題点
317                 見えない
318                         安いといわれても、実物がどんなものになるか分からない
319                 失敗リスク
320                         関わる人が増えていく
321                         失敗しない設計を請け負うSE・下請け、弁護士
322                         「これを入れれば大丈夫」というミドルウェア
323                         俺たちは成功する、という広告を請け負う広報・代理店
324                         「震度ゼロで倒壊しない家!」
325         そんなに人が居ないソフトウェアハウス
326                 実績をコツコツ作る
327                 自分たちで作ってもらう
328                 仲間作り
329                         自分たちの取り組みを知って貰う
330                 失敗しない仕組み
331                         人・マニュアル・「見通しのよいアーキテクチャ」
332         USP手法(ユニケージ)
333                 コマンド+シェルスクリプト
334                 データをテキストファイルで持つ
335                         ファイルシステムを使う
336                 余計なソフトウェアを入れない
337                         コマンド、apache、NFS、その他標準のもの
338                 データを整理整頓するノウハウ塊
339                         ファイルがファイルシステム上であちこちに分散してしまわないようなシステムを構築する
340         データの整理整頓
341                 実会社でのデータの流れを意識
342                 例えば伝票の扱い
343                         DBに相当するレベル
344                                 受け取った伝票は捨てないで綴じる
345                                 綴じた伝票をノートに書き出して台帳
346                                 台帳から統計データを集計
347                         アプリケーションに相当するレベル
348                                 統計データを加工、問われたら答えるデータを準備
349         Apacheのログ解析での例
350                 L1
351                         ログをそのままコピーしてきたもの
352                 L2
353                         awkで扱える形式に変換
354                 L3
355                         集計したデータ
356                 L4
357                         表示する形式にしておく
358                         ブラウザに表示する直前のデータ -> アプリケーション
359         DBを使う方法との差異
360                 DB v.s. テキストという話ではない
361                 「DBを使う」は道具の話
362                 レベル1-5はアーキテクチャの話なのでもっと親切
363                         データを整理整頓して失敗を避ける仕組み
364                 DBは木構造の概念が薄い -> DBより生のUNIXが良い
365                 ファイルからファイルへの変換
366                         ファイルの入力リダイレクト -> コマンド -> パイプ -> コマンド -> 出力リダイレクト
367         コマンド+シェルスクリプト
368                 コマンドはCで書かれているので速い
369         
370         シェルスクリプトの例
371                 関数を使わない
372                 sedが酷い
373                 ログファイルに全角は来ないだろう -> 「あ」をsplit文字に使う
374                 プログラミングしない人にはこちらの方が分かりやすい
375                 gyo というコマンドで行数を数える
376                         wcはオプションが必要、遅い
377                 一億行のparasort -> 20秒
378                 keta コマンド
379         open-usp-tukubai
380                 FreeBSD ports
381         
382         デバッグはteeとheadコマンドを使っている
383
384 FreeBSD 9 新機能
385 後藤大地 @daichigoto
386         さらに先の未来10へ & 最小特権オペレーション Capsicum
387         
388         ONGS オングス 代表取締役
389         
390         FreeBSD committer
391                 FreeBSD unionfsの再設計と再実装
392         FreeBSD Daily Topics
393                 可能な限りデイリーでFreeBSDのトピックをアップ
394         
395         FreeBSD Expert 2012 Digital Edition
396                 EPUBとHTMLで
397                 今すぐ購入しよう!
398         
399         ZFSv28
400                 「ZFSのバージョンは上げない」が安定運用の鉄則
401                 どうしても新しい機能が使いたい場合は新しいサーバを作ってコピーが良い
402                 重複排除の機能
403                 実装上非常に大容量のメモリが必要となる
404                         4GB以上、8GB~が推奨
405                 AMD64版が推奨
406         v28以降のコードは出るのか
407                 Oracleの動きが分からない
408                 暗号化はGEOMを使うという手もある
409         最小特権オペレーション Capsicum
410         NFSv4のサポート
411                 nfsuserdが新しく追加
412                         useridとgroupidのマッピングを行う必要が無くなったため
413                 デーモンの起動する順序が重要
414                         rcoderコマンドで確認出来る
415                 nfscallbackd
416                         コールバックの機能を使いたいときは有効にする
417                 MacOSX LionからNFSv4にアクセス出来るようになった
418         USF2
419                 Soft Updatesジャーナリング機能
420                 どのタイミングで再起動してもデータは壊れないといわれている
421                 メタデータとデータ本体の整合性がとれなくなることはある
422                 スナップショット機能
423                         起動時にfsckが掛かる場合、バックグラウンドfsckを行うために用いる
424                         ただし、I/O負荷が高いので、実用には耐えかねる
425                 FreeBSDでは、Soft Updatesの操作に対してジャーナルログを取るようにした
426                 ブロックサイズとフラグメントサイズが引き上げられた
427                         dumpfsを見ると分かる
428         UFS vs ZFS
429                 必ずしもZFSが良いとは限らない
430                 小さいファイルが大量にある場合はUSFは高速で動く
431         BSD Installの導入
432                 sysinstallの欠点
433                         最近のFreeBSDで導入された機能を使用出来ない
434                 CUI installer
435                 OSの機能をフルに使う場合は、Cで書くよりもシェルスクリプトで実装した方が拡張しやすい
436                 GUIインストーラがどうしても必要であれば、PC-BSDを使うと良い
437         TCP輻輳制御アルゴリズムの切替え
438                 本書ではjailとVImageを使って別々のネットワークスタックを用意し、個別の輻輳制御を試している
439                 動的切替えが重要な理由
440                         無線の輻輳制御と高速なネットワークの輻輳制御を一つのアルゴリズムで行うのは現実的ではない
441         v6オンリーカーネル
442                 v4が有効になっていると、v4が影響して問題が出ているのか、分かりにくい
443                 v4オンリー、IP無しのカーネルも可能
444         ATAサブシステムがCAMサブシステムに統合された
445                 disk ad -> adaに名前が変更になった
446                 ataraidが使えなくなった
447                         GRAIDを使って
448         GPTがデフォルトへ
449                 MBRの制限が無くなったので、スライスを使わなくなっている
450         FreeBSD 10へ
451                 USF2のライブラリサイジング
452                 BHyVe+jail
453                 GCC -> clang
454                         GPL3への懸念
455                         どうなるか分からない部分はある
456         Capsicum
457                 ケーパビリティの実装の一つ
458                 FreeBSDの既存のリソース保護機能
459                         保護ドメイン
460                         アクセス制御リスト
461                 複数の保護レベルを持ちたいとき
462                 特に問題になるのはChromeのようなアプリケーション
463                 最小特権オペレーション
464                 エンジニアが学習する量が非常に少なくて済む
465                 ファイルディスクリプタに、どこまでアクセスして良いか書かれている
466                 cap_enter();
467                         イメージとしては、プロセスが自分でjailの中に飛び込んでいく感じ
468                 ケーパビリティに入った後にopenしようとするとエラーになる
469                 一度ケーパビリティモードに入ると、forkしても出られない
470                 Chromeの実装における書くOSの追加コード
471                         Windows 20k以上
472                         FreeBSD 100
473         
474         FreeBSDサーバ構築・運用ガイド
475                 労力の割に儲からないので、これが最後のFreeBSD本になるかも…
476         
477         ZFSの特許に対するFreeBSDの対応
478                 ディベロッパーからの回答「I don't know.」
479                 会社に任せているので分からない
480                 ライセンス的には問題ないでしょう
481                 dtraceは現状のまま取り込むことは出来なさそう
482         
483 @sora_h
484
485         Self Introduction
486                 Rubyコミッター
487                 中卒フリーター (オワコン最終兵器)
488                 cookpad
489                 新幹線通勤
490                 飯テロ
491                 
492                 tweet紹介でほぼ終わった
493         
494         「あと33分の質問出来るよ」
495         
496 Nyarlathotep
497 @hiromu1996
498
499         Self Introduction
500                 「ちゃんと高校に行っています!」
501                 未踏の合宿から直接来ました
502         名状しがたいプログラミング言語nyaruko
503                 brainfuck置き換え(笑)
504         
505         Esolangの恐ろしさを教えてやる
506         
507         SKIコンビネータ
508                 チューリング完全
509         Uコンビネータ
510                 チューリング完全
511         同級生の純粋関数型言語野郎に、Iotaの命令置換じゃんといわれた
512                 ニャルコンビネータとか作る
513
514 ------------------------------------------------
515 LTタイム
516
517 m4で実用的プログラミング
518 @a4lg
519
520         最初にお詫び
521                 例によって手抜き
522                 ネタかぶり… => @hiromu1996
523         m4とは
524                 きわめて実用的なマクロ言語
525                 CPPなどよりはるかに自由度が高い
526                 いろいろな所で使われている
527                         configureスクリプト (autoconf)
528                         sendmail
529                 posix
530         m4でプログラミング
531                 マクロの中で同じマクロが出現しても良い
532                         CPP: #define a a -> a
533                         m4: define(`a', `a()')a() -> 無限ループ
534                 マクロの中から新しいマクロを定義出来る
535                 GNUの拡張はもはやカオス
536         m4 言語
537                 クオート
538                         `文字列'
539                         ``マクロ展開を抑制''
540                 dnl コメント
541                 マクロ変数
542                 
543                 ifelse()
544                 数値計算をやる expr(`数式')
545                         便利すぎるので今回は禁止
546                 incr(`') / decr(`')
547         m4における再帰
548                 再帰 = ループ ≠ 再帰呼び出し
549                 m4におけるマクロはスタックを使わない
550         m4におけるマクロ定義
551                 = スタック
552                 マクロ定義はスタック状に詰むことが出来る
553         数々の黒魔術
554                 ループ
555                 Diversion
556                 exprを使う
557         m4はチューリング完全なのでは?
558                 brainf*ck処理系の実装
559         DEMO
560                 trコマンドで、brainf*ckの入力をm4のマクロに変換
561                 
562         おまけ
563                 会場で10分で作った「名状しがたいプログラミング言語」
564                 github:a4lg
565
566 Arduinoで作る耳grep
567 @katsyoshi
568         whoami
569                 mikutter
570                 fav.rb, pakuri.rb
571         耳grep
572                 2012/2/19 盛大なgrep TL
573                 バイナリにwavヘッダ
574         Arduino for 耳grep
575                 バイトごとに音を鳴らそう
576                 headerとか面倒
577                 PCでやっても面白くない
578                 => ではArduinoで
579         Arduinoとは
580                 PICみたいなもの
581                 プログラマブル
582         DEMO
583                 再生が速すぎて……
584                 1MBで30分近く掛かる
585         おわり
586                 聞こえにくかった?
587                 ノイズですまんかった
588                 バイナリアンだったらもう一工夫在るのかなぁ
589         
590         grepはどこでやるのでしょう?
591                 考えてなかった!
592         シリアルのレートは9600で、サンプリングレートは?
593                 そのまま出ている
594                 バイトを10倍して、40を足している
595         
596
597 Software Development with Editor
598 @suma90h
599
600         Interest
601                 Developing Hex Editor
602         
603         Development life-cycle with Text Editor
604                 我々は毎日何を行っているのだろう?
605                 テキストエディタはこのままでいいのか?
606         
607         KernelとVMの共通点
608                 ハードウェアの抽象化
609                 リソース管理
610                 APIの提供
611         テキストエディタは?
612                 テキスト内部を気にせず編集 -> 抽象化
613                 編集バッファ -> リソース管理
614                 elisp -> VM?
615         コンテキストスイッチ
616                 kernel <=> アプリ
617                 VMM <=> kernel -> 今回は考えない
618                 エディタ <=> 人間
619         エディタと人間
620                 ソフトウェア開発において
621                 考え、設計し、
622                 実装する with Editor
623                 ビルド、実行、デバッグ
624                 
625                 コンテキストスイッチ
626         
627         バイナリエディタでは
628                 16進数ダンプ、ASCIIなど読める部分を読む
629                 色で見る、耳?
630                 考える
631                 データを抜き出したり加工したり
632                 
633         複数のことを同時に考えるのは人間には無理ぽ
634                 GB単位のバイナリデータを目grepは無理
635                 バイナリエディタで支援
636                 
637                 大規模ソフトウェア開発
638                         コード量が増えると一度に編集出来ない
639         
640         未来のエディタに求めたいこと
641                 バイナリエディタ
642                         求められる機能ははっきりしている -> ok
643                 テキストエディタは?
644                         Terminalとエディタ、人間のコンテキストスイッチを減らしたい
645                         でも、マルチタスクしたい
646                         リファレンス、ブラウザを見たい
647                         分散システムの結合テストとかもやる
648
649
650 SAN値論理と名状しがたいプログラミングSAN値Prolog
651 たけおか @takeoka
652
653         二値論理
654         
655         三値論理
656                 e進数がもっとも情報の表現効率がいい
657                 2.72進数というのは扱いにくい -> 三値論理
658         
659         SAN値とは
660         
661         論理型言語にSAN値というものを入れる
662         評価時の「頭のおかしさ具合」を「SAN値」と呼ぶ
663         
664         評価時に、SAN値に近いSAN度を持つ節が選ばれる
665         
666         節は評価して、真であったらSAN値が比較される
667         
668         似た研究
669                 ファジィ論理 Prolog
670                 閾値より大きな事実が選ばれる
671                 
672                 「大きい」ではなく、SAN値に近いものを選ぶ
673         
674         Lispで書いたPrologの処理系
675         
676         「set-sanchi」
677         プロンプトが「にゃ?」
678         
679
680 軽快なPlan 9 Update Illumos KVM上陸
681 @go_vm
682
683         軽快なPlan9では
684                 KVMの上で動いているPlan9
685                 ネットワークに繋がっていないゲストがOSとのsocketを呼び出して、外のネットワークからデータを取ってくる
686                 ハイパーコール
687         
688         Linux KVMがIllmosに移植された
689                 Joent社の成果
690                 Node.jsとかもやっているところ
691         
692         コードの構造は同じ
693                 Linux KVMが読めれば同じように読める
694                 ただしコードはBSDスタイル
695                 
696         床抜き
697                 clojureでスタブを書いた
698                 起動中にbell研のサイトに繋がってhtml取ってくる
699                 しかし、ifconfigするとネットワークは繋がっていない
700         Illmos KVMの利点
701                 ネットワークの設定が楽
702                 dtraceが使える
703                         いろんなイベントを観察出来る
704
705 軽快なBHyVe
706 @syuu1228
707
708         BHyVeの現状
709                 独自ローダからFreeBSDカーネルをゲストOSとしてロード、ブート出来るだけ
710                 BIOSが動かないので、ブートローダが動かない
711         BIOSの仕組み
712                 int13h -> ソフト割込み -> CPUが割込みベクタを読む -> BIOS状のハンドラを実行
713         KVMでは
714                 SeaBIOSがHWへのIOを実行
715                         実機状のBIOSと同じ動きをする
716                         IOはTrapされてQEMUで処理される
717         SeaBIOSを載せればいいやん
718                 却下 <= GPLだから
719         BSDLでBIOSをエミュレートするソフトは既にある
720                 doscmdとか (FreeBSD状で動作)
721                 仮想8086モードでDOSプログラムを動作
722                 BIOSコールなどをtrap
723                 32bit実装だし、移植するならhypervisor側に入れた方が良い
724                         ソフト割込みの時点でTrapするようにする
725         IntelVTの機能でソフト割込みをTrapすると…
726                 全てのソフト割込みがTrapされてしまう
727                 多くのOSがシステムコールにソフト割込みを使っている
728         ソフト割込みの中からBIOSコールだけを抽出したい
729                 ステート管理が必要になる
730                 リアルモードを用いるOSではシステムコールでTrapがかかる
731         軽快なBIOSコール
732                 VMの床抜き術はここでも使えます!
733         疑似BIOSを用いる
734                 疑似BIOSがVMCALL命令を発行
735         
736         AMD対応は?
737                 ToDOリストに載ってる段階
738
739 つくっておぼえる!仮想マシン ~直前で実装編~
740 @siritori
741 @iorivur
742
743         MIPSのマシンを
744                 erlangで
745                 haskellで
746         
747         実装してみました
748                 昨日頑張りました
749                 意地でも手続き型言語では書かない
750         Erlang
751                 アクターモデルな並列指向言語
752                 OTPというすごいフレームワークを使うための言語
753         出来ている所
754         出来ていない所
755                 ELFローダ
756         レジスタとメモリ
757                 ETS
758         命令の実装
759                 高階関数
760         感想
761                 MIPSのVMを複数立ち上げるのも朝飯前なのでやってみたい
762         Haskell
763                 みんなMonadになる
764                 できているところ
765                 できていないところ
766                         例外、コプロセッサ命令、ジャンプ命令
767                 実装
768                         再帰がそのままクロックのようなイメージ
769         Erlang
770                 実行中にコードの書き換えが可能
771         Haskell
772                 インタラクティブにレジスタに対する命令が入力出来る
773         
774         なんでMIPSなの?
775                 さすがにx86をやる勇気はなかった
776         なんでErlangなの?
777                 関数型言語を触ってみたかった
778                 ビットマッチングが出来たから
779
780 Xとかオワコンじゃね…っていう男の人って
781 @naota344
782
783         自己紹介
784                 SD誌でLinuxカーネルについて連載している
785         
786         X.ORGのコード
787                 スパゲティ
788         XはもういやなのでWayland
789         Xのアーキテクチャ
790                 X serverじゃまじゃね?
791         Wayland
792                 client <-> Compositor <-> KMS / evdev
793         Wayland Terminal
794                 フォントが気持ち悪い
795         デモ
796                 Wayland自作クライアント
797                 画像を表示するクライアント
798         Wayland
799                 Waylandはプロトコル
800                 オブジェクト
801                         wl_display
802                                 コアオブジェクト
803                         wl_shm
804                                 クライアントとのメモリ共有
805                         などなど
806                 メッセージ
807                         UNIXドメインソケットで送られる
808                         クライアント -> サーバ
809                                 リクエスト
810                         逆はイベント
811         実装
812                 Haskellで書いた
813         問題点
814                 クライアントIDを適当にやったらSEGVした
815                 intがうまく渡せないときがある
816                 Haskellだけど実装があれ
817                 Fdをメッセージと一緒に渡すので、パッチが必要だった
818
819
820 x86_64/Linuxに独自メモリ空間を買って増設
821 @nminoru_jp
822
823         メインフレームのソフトウェアエミュレータ
824                 富士通のメインフレームのエミュレータ
825                 IBM System/370互換
826         エミュレータを高速化するには
827                 ゲストとホストでCPUが異なる計算機を想定
828                 ARM,MIPS,SPARCなどをx86_64上で
829         
830         ゲストの仮想メモリがネック
831                 ホストのMMUを使いたい
832         
833         どうやって使う
834                 ・OSを自前で作る
835                 ・OSから一部のCPUを切り離して独自処理
836                 ・既存のOSを改造
837         
838         Linuxの仮想メモリの中に自分専用のVMを!
839         
840         /proc/oreorevm をmmap
841         CPU命令をインタープリタがロード・ストア
842         ゲストのTLBミスなどはSIGSEGV
843         
844         Hugetlbを参考に
845         Shadow Page Table
846                 ゲストの仮想メモリ空間をホストのページテーブルに組み込む
847         
848         俺俺VMの利点
849                 ゲストCR3を切替え対応
850                         ゲストのコンテキストスイッチに応じてSPTの書き換えが必要
851                         毎回破壊するとコストが高いので、過去のSPTも保存
852                         PUDをゲスト仮想空間一つに割りあてると効率がよい
853                 ゲストモード対応
854                         ゲストにもusermodeとsupervisormodeがある
855                 JITコンパイラ対応
856         まとめ
857                 俺俺VMではx86_64のMMUが使える!
858                 カーネルのリベースが必要だが、大変
859                         なにかうまい手はないか……
860         
861 bcacheのベンチマーク
862
863         低速で大容量のブロックデバイスを高速で小容量のブロックデバイスでキャッシュすることで
864         高速で大容量のブロックデバイスを実現しよう!
865         
866         consumer -> bcache -> SSD -> HDD
867         まだLinuxメインラインに入っていない
868         
869         /dev/bcache0 などという名前のブロックデバイスが出来る
870         
871         ベンチマーク1
872                 iozone
873                 HDD: Seagate 2.5inch 750G 7200rpm
874                 SSD: Intel 520 120GB
875                 RAID5: LSI MegaRAID
876         Write
877                 HDD -> SSDで5%~7%の性能アップ
878         Rewrite
879                 だいたい同じくらい
880         Random Write
881                 だいたい同じくらい
882         
883         あまり利点が見つけられなかった
884         
885         ベンチマーク2
886                 KVMで運用している既存の共用ホスティングサーバのディスクイメージに対するvfs_read/writeをSystemTapして記録
887                 レイテンシを計測
888         
889         bcacheありだと、レイテンシのばらつきがほとんど無い
890         無しだと、レイテンシがばらついてしまう
891                 ただし、使っているときより速いこともある
892         
893         FBのflashcacheとどう違うのか?
894                 write backとして使った時に、SSDにだけ書かれてHDDに書かれていない状態で電源が落ちても
895                 bcacheだと救える
896                 キャッシュの扱い方が違う
897                         bcache -> b-tree
898                         flashcache -> CPUのキャッシュと同じやり方
899                         bcacheだとアクセスが偏らないみたい
900         
901 Tinycc on NaCl
902 @shinh
903
904         モチベーション
905                 ブラウザでちょっとCを実行出来ると嬉しい
906                 
907         IOCCCのコードを実行してみよう
908         
909         仕組み
910                 Tiny C Compiler
911                 セルフコンパイル可能な3301BytesのCコンパイラ
912         TCCの特徴
913                 コンパイルは速い
914                 出来たバイナリは遅い?
915                 割といろんなものがコンパイル出来る
916                 コンパイラであり、プリプロセッサであり、リンカでもあり、ローダでもある
917                 3万行くらい
918         Native Client
919                 CUIで実行するためのloaderもある
920         NaCl Sandboxのつらいところ
921                 いろんなところがころころ変わる
922                 ドキュメントがない
923         TinyCC on NaCl
924         ToDO
925                 頑張った割にまだ色々動かない
926
927 kernelvim探検隊
928 @shougomatsu
929
930         Vim枠
931         vinariseについて
932         x86勉強会で発表する内容の予告編
933         XXDには問題があるので、vinariseを作っている
934         
935         bitmap viewer
936         
937         驚異のvimスクリプトテクノロジー
938                 動的にバッファが増えていく……!
939                 
940         MBCSにも対応!
941                 bitmap viewerによって目grepが可能に
942         
943         バイナリっぽいデータが見つかったらvinariseで開く、といったことも可能
944         
945         あなたにとってVimとは?
946                 どの要素も持っているが、エディタではないことは確か
947         彼女とVim、どっちをとる?
948                 一応、彼女の方が大切
949         bviとはどう違うか
950                 メモリ展開しない
951                 日本語対応