kernelvm

Kernel/VM探検隊online part2

[2021-03-20 13:30]

sat / オープニング

[2021-03-20 13:33]

rui314 / 超高速リンカmold

  • リンカはなんどか作ってる
  • lldは広くつかわれている
  • リンカはドキュメントがよくないが難しいものでない。
  • リンカの存在意義: 分割コンパイルして時間を節約したい そもそも一発でサイズ的にコンパイルできない。
  • ローダー: 実行ファイル→メモリ
  • リンカ: オブジェクトファイル→実行ファイル
  • リンカの基本機能: オブジェクトをまとめてリロケーションを適用する
  • 静的ライブラリ: オブジェクトファイルのかたまり、小分けになっていて必要なものだけつかうようになっている。セキュリティーアップデートがあったときにリンクしなおし。
  • 共有ライブラリ: 実行ファイルに埋め込まなくてもよい。アップデートしたときにプログラムが異常になる可能性。
  • 動的リロケーション: 実行時にアドレス書き換え
  • PLT(procedure linkage table)/GOT(global offset table): テキストセグメントを書き換えなくてもよくなるように間接ジャンプ/間接参照
  • リンカがやること: オブジェクトファイル・ライブラリをよむ→シンボル解決→PLT/GOTを決める→レイアウトを決める→ XXXX
  • リンカが速くなるとうれしいこと: 差分ビルドが速くなる。
  • chrome(2GB): gold 10秒、mold2秒
  • なぜ速いか?: 中間表現をつかわない(mmapしてそのままつかう)。並列化する(lldでもがんばったけど)。
  • chromeのリロケーション: 35000000 とにかく多い
  • 基本的にデータ並列で。Intel TBBをつかっている。並列forループ。
  • 並行コンテナをつかう。ロックフリー。tbb::concurrent_hash_map。シンボル解決。
  • map-reduceパターン: build-idオプションで利用。2GBのハッシュ値の計算でハッシュ値のハッシュ値で。
  • paralle scanパターン: 文字列のオフセットを計算するときに中間値をおぼえておくことで高速化(つかってないけど)
  • malloc: mimallocが一番スケールした。
  • ファイルは上書きする方が速い。
  • 大量にmmapするとexitが遅くなる。
  • 速くするヒント:
    • 推測せずに計測する
    • テータが先、コードは後
    • 何度も書く 二度目は早く書ける
  • 差分リンクはうまくやらないと速くならない。ローカルな変更かどうかむづかしい。
  • リンク時最適化(LTO): llvmの吐いたビットコードをリンク時にコンパイルする。でも時間がかかって遅い。
  • moldはX86_64専用でつくっている。Linuxでしか試してない。最初から移植性を考えるとたいへん。

[2021-03-20 14:09]

[2021-03-20 14:09]

KOBA789 / 音の出る CPU

  • DBMSをつくってる。
  • 近年自作CPUがアツい!
  • CPUはシリコンでできている。いがいと知られてないですが。
  • でも半導体でなくても作れる
  • 小学生のときに300個リレーを買った!
  • 困りごと:
    • リレーで論理回路をつくるときの知見はインターネットにころがってない! (インターネット以前のものだから)
    • シミュレータがない
  • まずは回路CADをつくる! (今回の発表の進捗)
  • リレーのコイル片側は必ずGNDにするとショートしなくなる。シミュレータも作りやすくなる。
  • CADとシミュレータを融合して動く回路図に。60fpsでヌルヌル動いてほしい。
  • いまどきのGUIはReactとTypeScriptだが、きつい。遅いコードもひどい。
  • Rustで書いてwebassembleでWebGLをつかう。
  • WebGL(OpenGL)は三角しか書けない。CADとしては機能が足りない→実装
  • Immediate mode GUI(IMGUI): ステートレスで毎回書き直す(差分更新しない)。ゲームエンジンと相性がいい。
  • GPUが速いから問題ない。CPU→GPUのRPCが遅いだけ。減らせばOK。1回まで減らした。
  • デモ: リレー30個でリングオシレータ、全加算器
  • SVGだと実装は楽だがスケールするか心配。CADの内部状態とSVGの状態を同期されるのが面倒。
  • 音は実装がまにあってないだけ。
  • WebGLをたたくにはいちどjavascriptの世界をとおるが、そもそも処理が重いので問題ない。
  • HDL: 効率はいいけど楽しくない。趣味だし。

[2021-03-20 14:34]

[2021-03-20 14:35]

inductor / Red Hatが新しく作り始めたVMMの話

  • 10分で完全理解したかったlibkrun
  • 最低限のデバイスエミュレーションとC APIを備えたRustのmicroVM
  • firecrackerからコードを拝借している
  • vsockベースのTSI(transparent socket impersonation) virtio-netをつかわず
  • コンテナのプロセス分離をVMでやる (gVisorとかKata Containerとか)
  • Kataだとコンテナ間が共有されてしまう。
  • network namespaceで連携

[2021-03-20 14:44]

休憩 10分

IMG_20210320_144710

[2021-03-20 14:55]

msyksphinz / Rustで作るフルスクラッチQEMU型エミュレータ

  • QEMU型(binary translation)の命令セットエミュレータを作った。
  • RTLシミュレータと命令セットシミュレータで動作つきあわせて確認したり。
  • QEMU: システム全体をエミュレートできるのが特徴
  • ゲストアーキテクチャ→TCG(tiny code generator)→ホスト命令
  • インタプリタ型(1命令ごと解釈)
  • バイナリ変換型(ゲスト命令をゲスト命令に変換して実行する)
  • QEMUは中間コードの最適化が強力
  • 自作QEMUのデバッグがたいへん。どんな命令が生成されたか確認できない。DWARFを吐ければいいが。
  • 自作QEMU on 本家QEMUで解決!
  • riscv-testsでAtomic命令以外は動作確認
  • Spikeよりは速いがQEMUより遅い。
  • QEMU高速化テクニック
    • TCB Block Chaining (basic block)
      • basic blockの出口(分岐)で制御モードに戻っている
      • ジャンプ命令で直接飛ぶようにスタブを書き換える
      • プロファイルとったらエミュレーションの時間よりも制御時間が多い
    • TCG Lookup and Jump
      • レジスタ間接ジャンプのきにテーブルを索く
  • Rustを使ってよかったか? よくなかったところ:
    • ゴリゴリにメモリアクセスするのでunsafe文ばかりになってしまう
    • ジャンプ先がコンパイラが知らないところなので静的解析できない
  • エミュレータのシミュレータのちがい: CPUのコアだけ模擬するのがシミュレータ、システム全体だとエミュレータと呼んでるような気がする。

[2021-03-20 15:19]

[2021-03-20 15:21]

mzyy94 / HDMI探検隊

  • HDMIの機能: 映像、音声、イーサネット、機器コントロール、ディスプレイ制御(CEC,DDC)
  • CEC: 単線バス規格
  • DDC: I2C
    • DDC/CI 輝度音量変更など
    • HDCP コンテンツ保護 鍵交換
    • EDID 表示情報
    • SCDC HDMI2.0
  • RaspberryPiでいじってみる
  • CEC: apt install cec-utils、 cec-client -s <<< "tx .."
  • CECは認証がないので送信元を偽装できる。低速なのでバスが詰る(妨害できる)。
  • DDCは/boot/config.txtでデバイスツリーでI2Cバスを直接さわる。
  • i2cdetect -y 2 (rappi4は 12)
  • BadHDMI: 悪意をもったHDMI機器 (CECやDDCに認証機構がないため)
  • CECを傍受してリモコン入力のパスワードを盗むとか
  • #BadHDMI

[2021-03-20 15:32]

[2021-03-20 15:32]

mu-mu-mu / Intel MPK入門

  • memory protection keys
  • プロセス内のメモリアクセス権限をページテーブルの設定以外でできるように
  • Ring3で設定できる (コンテキストスイッチ不要)
  • あらかじめページテーブルにPkeyを設定しておけば wrpkruでアクセス権・ライト権を設定(PKRUレジスタ)
  • まだアプリではほとんどつかわれてない。アプリの改造がたいへんだからか。
  • ざっくり2回以上権限を変えるならmprotectより速くなる。

[2021-03-20 15:42]

[2021-03-20 15:43]

nullpo_head / WebAssemblyのWeb以外のこと全部話す

  • google meetの背景ぼかしにつかわれている
  • web外wasm: wasmer, envoy, krustlet, kernel-wasm, nabulet
  • Wasmがあついのはなぜか: Java(portable), CLI(bytecode), NaCl/eBPF(sandbox), Lua(embeddable) を複合的に解決しようとしている
  • 特徴: safe, language-independent, porable, open
  • 言語仕様がちいさいのでバックエンドをつくりやすい
  • オブジェクトファイルフォーマットが決まっている
  • なにができるかはwasm外とのインターフェースで決まる。
  • WASI: OS上でwasmを動かすためのAPI/ABI。posixとおなじかちょい下。安全性はsystemcallの安全性に依存する。capabilityで対応する予定。スマホのようなセキュリティモデルがネイティブアプリでも。
  • Proxy-wasm: proxyでパケットをさわる。
  • 双方向(hostcall,guestcall),safe,portable,fastなところはwasmがはまる
  • 2008年にwasmがあったらdockerがなくてもよかっただろうとdockerの中のひとがいっているらしい。

[2021-03-20 16:06]

休憩 10分

IMG_20210320_161301

[2021-03-20 16:15]

herumi / WebAssembly向け多倍長演算の実装

  • パアリング: 暗号文の内積や署名の集約ができる高機能暗号
    • 暗号文のまま積和演算(L2準同型暗号)
    • クロス集計につかえる
    • http://herumi.github.io/ango
    • 楕円曲線をつかう
    • 384bitの整数の(x+y)%p, (x*y)%p がたくさんでてくる
  • wasmにはCでできる範囲の演算しかなくキャリーがない。
  • キャリーがあるかは (x+y) < x でわかる
  • clang-11でuint128_tをつくれる拡張 _ExtInt がはいった。
  • emccをつかっている(clangではなく)
  • wasmで暗号化はどのくらいサイドチャンネル攻撃の対策は? スマホならいいけどサーバサイドだと対策が必要だろう(定数時間で演算するモード

を用意するなど)。

  • mod pはどうしている? 話すと長いので省略した。
  • SIMDはツールがこなれてきてないので様子見。

[2021-03-20 16:40]

garasubo / RustでOSをつくると何がうれしいかを論文から探る

  • Rustをつかうことで新しいOSの設計を模索する論文を紹介する。
  • Tock
    • 省メモリなマイクロコントローラ用OS Arm Coretex-Mなどが対象
    • アプリの独立性をたもちつつ柔軟性もほしい (静的リソース確保を避けたい(最大値を決めるのがむづい))
    • Grants: システムコールで動的にメモリを確保するときに、プロセスのメモリGrant型としてをOSに貸し出す。エラーをつけて返す。
  • ReadLeaf
    • Rustをつかったマイクロカーネル
    • Rustの言語機能でfalut isolation
    • posixサブセットを実装
    • 共有ヒープをつかったドメイン間通信
    • ドメインがクラッシュしても参照型 RRef のドメイン情報で対応できる
  • Theseus
    • コンポーネント間のステートスピル(情報のもれだし)を少なくする
    • OSの実行モデルと言語の実行モデルを近づける
    • すべてのコンポーネントをおなじアドレス空間でうごかす
    • 言語制約でタスクのリソースを管理

[2021-03-20 16:50]

[2021-03-20 16:51]

tj8000rpm / OVS-DPDKとOpenStackで作るおうちNFV環境の構築

  • DPDKの思想: CPUコアがたくさんあるのでカーネルじゃなくてアプリでやる。CPUとNICをひもづける。
  • OvS(open vswitch): 安定している。DPDK対応
  • ハイパーバイザーでは実コアを意識する。共有キャッシュとか。
  • TCP: iperf: 余裕で10Gbps達成
  • UDP: DPDKのpkggenで測ると7Mpps。

[2021-03-20 17:01]

[2021-03-20 17:01]

fadis / Wasserstein逆FM音源

  • パラメータ調整がむつかしくて滅んだ。
  • 遺伝的FM音源: ピアノの音をそこそこ再現するパラメータがみつかった。人間がだめなだけだった。でも運だのみ。
  • 勾配法で探そうとしても谷がたくさんあって最小点に辿りつけない。
  • ωに制約をつけると探索しやすくなる。でも倍音が少ない。倍音の周波数もズレてしまう。音が似てない。
  • 損失関数: 平均二乗誤差は適していない→wasserstein距離: なめらかな誤差になった。
  • でも解析的に微分できな→数値的にやればよい
  • 課題: 計算に時間がかかる。微分の計算に時間がかかる。

[2021-03-20 17:12]

Unterground_idle / Linux KernelにおけるCompactionについて

  • compaction: alloc/deallocの繰り返しのfragmentationを緩和する
  • movable pagesをfree pagesに移動する。
  • isolation pagesとしてロックをとりつづけないようにしている

nhoriguchi / Linuxのhugepageの開発動向

  • hugepage: 巨大化したアプリを実行するときにTLBの利用効率を上げる。
  • ちょっと性能が上がる。
  • linuxにはhugetlbとthp(transparent hugepage)の2つの実装がある。
  • DBではthpは無効にされることが多い。
  • vmemmap page (struct page): 物理メモリの1.6%を専有する。
    • hugepageでおなじ内容なら節約できる。
  • thp page cache support: anonだけでなくふつうのページキャッシュでも利用できるように。
    • ページが共有されていてもよいようにページのsplitとマッピングのsplitを分けられる。
  • XArray: radixtreeのおきかえ multi index entryが便利
  • thp失敗したときにどうするか
    • always: compactionをためす
    • defer: 4KBにfallbackして裏でcompaction
    • never: 4KBにおちる
    • macvise: MADV_HUGEPAGEで指定されていればalways、でなければnever
    • defer+madvise:

[2021-03-20 17:32]

nekomatu

  • アンケートよろ

[2021-03-20 17:34]

配信はとてもスムーズだった。

休憩時間が短かいのはオンラインだからトイレが混雑しないというがあるかな。

Kernel/VM探検隊 online part1

スクリーンショット (423)

[2020-06-06 13:30]

オープニング @satoru_takeuchi

  • 時間どおりスタート
    • ぐだる配信が多いなか、時間どおりにトラブルなく始まるのはすごい
  • zoomからyoutube liveの遅延が1分ほどあるのでリアルタイムはむり
  • 質問はtwitterでうけつけて、発表がおわったあとに回答する形式で

[2020-06-06 13:32]

Network Boot from Bell Labs / @retraga

  • 資料
  • 動画
  • pxe(ピクシー) boot, http bootの2つがある。
  • pxeはtftpサーバが必要
  • http bootはuefi2.5からサポート
  • httpsもつかえる
  • UEFIで3行で書ける。
  • UEFIでモジュールはプロトコルとよばれる。ネットワークのプロトコルとは関係ない。
  • simple file system protocolはデフォルトではFATしか対応してない。
  • rootkit: rkloader, LoJax はNTFSをあつかえる。
  • ネットワークFSがつかえるとうれしい。
  • そこで9P (Plan 9 File Protocol)
  • 9Pはつかわれている: v9fs, virtio-9p, WSL2
  • 世の中は9Pの支配下にある!
  • UEFIドライバ: 9pfsPkgをつくっている。
  • それだけだとおもしろみがない。
  • proxy bootをつくってみた: GCS(google cloud platform storage)のバケットをあつかえる。
  • gcsfuseをつかった。
  • bitvirorをロードできた。
  • あくまでもローカルファイルシステムにみえている。

[2020-06-06 13:58]

  • 質問なし
  • root fsは

[2020-06-06 13:58]

ipftrace: A Linux Function Tracer for Network People / @YutaroHayakawa

  • 資料
  • linuxのネットワーク機能のデバッグツール
  • 関数コールトレーサー
  • パケットの処理をトレースできる。
  • timestamp, cpu id, funcname, user defined data
  • ネットワーク機能はソースコードをよんでもわかることがすくない。
  • systemtap, bpftraceは手がかりがない状態だとトレースする対象を絞りにくい。
  • ftraceは楽につかえるが特定のドメインだけのトレースがとれない。
  • TCP 80版のパケットだけトレースをとりたい。
  • 関数トレーサ + パケット処理だけ + パケット単位で + スクリプトが書ける
  • sk_bufを引数にとる関数をすべてフックして
  • sk_bufにマークがついていたらログをだす。
  • DWARF or BTFで一覧を得る。
  • kprobeでフックしてeBPFをさしこんでperf_eventでログをだす。
  • マークはskb->markがあり自由につかえる。netnsをまたぐと消える(コンテナ内のトレースにつかえる)。
  • Luaで拡張を書ける: emit()->追加のデータをあつめるeBPFのバイトコードを吐く, dump()->文字列にする。
  • sk_bufは安定した構造体ではない問題: デバッグ情報をLuaから参照できる: iptf.offsetof,sizeof,typeof.
  • SRv6のデバッグにつかえた。

[2020-06-06 14:18]

  • Q: メモリが再利用されてskbアドレスがぶつかったら?
  • A: キャッシュのヒット率上げるために再利用するのでこまる。人間がみればわかるが。

[2020-06-06 14:21]

[2020-06-06 14:22]

コンテナ目線で考えるmicroVMとunikernelな構成の話 / @_inductor_

  • 資料
  • コンテナとは雑に言えばすごいchroot
  • dcokerがはやったのはdockerfileと配布技術がつかい勝手がよかった
  • runC: イメージを展開するおしごと
  • runCに特権が必要だけど避けたい→MicroVM(Firecracker:Rust製 by Amazon)
  • ホストOSをいじるかわりにVMをたてちゃう。
  • AWSではFargate。
  • リソース割当が柔軟
  • VMレイヤの起動オーバヘッドになる。
  • Unikernel: ライブラリOS
  • カーネルのレイヤをうすくする
  • IBM Nabla Containersでつかわれている。
  • 既存のdocker imageがつかえないので専用のイメージをつかう。
  • runnc -> hostos - SoloS - libOS - app
  • 環境を分離せずプロセスとしてつくられるので早い
  • 不要なカーネル機能をふくまないのでホストOSとの接点がすくない
  • gVisor: ...
  • kata container: コンテナがvmのうえでうごく
  • 結論: 課題がなければdockerでいいんじゃない?

[2020-06-06 14:44]

10分休憩

  • 表示されてる時計と比べると遅延は35秒くらいか。
  • 早送り再生するとライブにおいつけるらしい。しらんかった。

[2020-06-06 14:55]

俺の仮想マシンルーターがこんなに遅いはずはない / @tnishinaga

  • 資料: 未公開
  • トラブルで前録り動画を再生
  • 在宅ワークがふええてPPPoE IPv4がおそい、DS-Lite(v4 over v6)も速くない。ルータの性能限界。
  • devianをいれてKVM上で構築。
  • 速度低下は問題ないと予想していたが、そうでもなかった。
  • 物理ホスト上:
    • iperでNICスループットを測ったが問題なかった。
    • ブリッジでも問題なし。
    • パケットフォワードも問題なし。
    • ipip6 tunnelも問題なし。
  • VM上:
    • 6割程度の性能しか出てない。
    • 結論: 物理マシンをつかうのがよい。

[2020-06-06 15:19]

  • Q: 市販のルーターとLIVA Zとでランニングコストはどうちがう?
  • A: 測ってないけどファンレスなのでそんなに違わないのでは?
  • Q: VMにちょくせつPCIさわらせたら?
  • A: PCIeパススルーはいけそう、SRIOVは対応してなさそう(realtekなので)。

[2020-06-06 15:20]

[2020-06-06 15:21]

Architecture Overview of Fuchsia OS / @kurun_pan

  • 資料
  • フューシャ
  • Flutter: 言語Dartで UIフレームワーク。
  • Fuchsia: googleのOS。 Google Nest Hubでつかわれてるらしい。カーネルはZiron(linuxとはちがう)
  • far: Fushia archive
  • 各アプリはURLをもつ manifestあり
  • アプリはsandboxで実行される capabilityはmanifestに書く
  • FIDL(Fuchsial IDL): gRPCみたいなもの IPC用
  • Zircconはマイクロカーネルではない(モノリシック)。POSIX非互換だがlibcはある。fork,pthread一部はない。
  • Zirconにはhypervisorがはいっている。linux KVMにちかいかんじ。linux runnnerがあり動かしてみたが例外でおちてしまった。

[2020-06-06 15:33]

[2020-06-06 15:33]

RISCVマイコン情報アップデートと Tang FPGA試用メモ / @takeoka

  • 資料
  • RISC-Vが焼かれている 日本で2600円くらい
  • キャッシュはないが ITCM,DTCM (SRAM)がある。
  • ESP32はicacheぽいがlongjmpできない(大変残念)
  • PDP-11 セグメントをまたぐサブルーチン呼び出しはセグメントローダ経由が必要
  • IDEは中華製 あやしくはなさそうだが 念のためにVMでうごかした。

[2020-06-06 15:48]

[2020-06-06 15:49]

BCCをRubyからも使えるようにした話 / @udzura

  • 資料
  • eBPF
  • gdb,straceはptraceでシステムコールをおいかけるがプログラムが一瞬止まるのでパフォーマンス影響がある。本番環境ではつかいにくい。
  • perfは中間 ユーザランドの負荷が高まる。
  • bpftraceは副作用がすくない。
  • BCC: BPF Compiler Collection. Python,LuaのFFI経由でバインディングを用意している。
  • Rubyでもつかえるようにした。
  • BPFQL: SQLライクにトレースポイントを指定できる

[2020-06-06 16:03]

休憩10分

[2020-06-06 16:15]

HVFの中身 / @Mach0xFF

  • 資料
  • hypervisor framework
  • apple製hypervisor
  • kextをくみこんだ形 prelinkedkernel
  • kext: kernel module
  • XNU
  • machdepでマシン非依存のシステムコール

[2020-06-06 16:30]

  • "0x"を「ゼロエックス」じゃなくて「オーエックス」といってるとおもったら「Nought-X」だとのこと。

[2020-06-06 16:30]

Falling down from FreeBSD / @yamori813

  • 資料
  • FreeBSDは16MBのRAMと4MBのflashがあれば動くらしい。
  • YABM: mrubyをベアメタルで動くようにした。 yet another bare metal
  • ARMはMMUサポートないと35倍くらい遅いので(0を0にマッピングするのしかしてない)

[2020-06-06 16:41]

[2020-06-06 16:41]

HSEとは何か / @fadis_

  • 資料
  • 動画
  • heterogeneous-memory storage engine
  • KV store
  • ストレージエンジンはトランザクションを提供する
  • ファイルシステムとストレージエンジンの両方で構造化ログをもつ構造
  • FTL(flash translation layer)でも構造化ログ相当のものがある。
  • ログ構造化ファイルシステムはflashメモリにやさしい。
  • F2FSはログ構造化ファイルシステムを採用。
  • Don't Stack your Log on My Long: 構造化ログのつみかさねが性能低下
  • メタデータが各層で追加されていくため。
  • ブロックサイズが一致しない可能性。
  • TRIMしてない
  • 上のGCが下に負荷をあたえる
  • 酷いケースで書き込みが2倍にふえる。
  • mpool: ファイルシステムに似ているがVFSを提供しないカーネルモジュール。
  • mpoolはblock_idでアクセス 要アライン
  • mlogはobject_idでアクセス メモリはアラインしてなくてよい
  • mdc: gcできるmlog mlog2本使用 (copy gc?)
  • mcache: 上のレイヤがつかえるキャッシュ
  • kvdb:
  • 古典的SSD,zoned namespace(100MBオーダーのブロックでFTLの仕事を減らす),
  • dm-zonedが4KiBページをみせるもがある。

[2020-06-06 17:05]

  • Q: mpoolのアラインメントは自動?
  • A: 作成時にSSDのブロックサイズを指定する。(SSDがブロックサイズを公表してるのが前提)

[2020-06-06 17:07]

クロージング

[2020-06-06 17:08]

あたまおかしい発表があると観衆からおぉ〜って声があがるのがkernelvmのライブだが、オンラインだとその反応がtwitterだけなのがちょっとさみしい。

いってきた:カーネル/VM探検隊@名古屋

_1010304

しっかり晴れた。あつい。ちょっと早めに家を出て常滑→(名鉄)→名古屋→(地下鉄東山線)→一社(いっしゃ)→(市バス)→平和ヶ丘三丁目→(徒歩)→愛知東邦大学。名古屋駅で地下鉄に乗ろとうろうろしてたら「ドニチエコきっぷ」という一日乗車券を600円で売ってたので購入。地下鉄の往復だけで540円かかるので市バス(210円)に一回乗ればもとがとれるという計算。バスに乗るために一社のバスターミナルで20分待った(イスあり)のは計算外。

_1010221_1010223_1010224_1010225_1010233_1010234_1010236_1010237_1010239

ミニストップで買ってきた弁当を冷房の効いた食堂で食べる。守衛さんが気をきかせて開けておいてくれたらしい。

_1010240

会場のL棟は図書館で4A階はホールで東側がガラス張りでとても見晴らしがいい。トイレは音楽がながれてる優雅だ。

_1010277x_1010279_1010280_1010281_1010284

ustreamでの配信も行われていた。

_1010243_1010278

前説

thetaで記念撮影も。

_1010248_1010254_1010257

[2015-08-15 13:42]

_1010259_1010258

あるキャッシュメモリのはなし / @nullnilaki

  • slide
  • 港湾物流業界ではたらいている。COBOLer。コンテナあつかっている。
  • Alpha server DS25。あっさり動いた。つまらない。。。
  • 姫野ベンチで性能が出ない。。
  • 曽田さんtweet:手塚さんのページカラーリングが効きそう。
  • DS25にL2キャッシュのプローブコードをLinuxをまねして入れた。→ なぜか性能が1/4に落ちた。
  • 仮想アドレスでキャッシュするか物理アドレスでキャッシュするか。
  • 仮想キャッシュ問題いろいろ: DMA(コヒーレンシ)、エイリアス(ページ共有)。
  • 物理キャッシュ問題いろいろ: 。。
  • NetBSDのページカラーリングの実装を調べてみた。??
  • NetBSD4ではカラーリング(ラウンドロビン)の効果があったのにNetBSD6(マッチング)では性能が落ちる。 → カラーが多すぎ
  • キャッシュ見れないからつらい。

[2015-08-15 14:10]

  • Q: カラーが多すぎるのでは? 計算が間違ってる可能性は?

[2015-08-15 14:16]

[2015-08-15 14:21]

_1010264_1010265

3DSにデータを自動送信したかった / @knok

  • slide
  • ARM11相当
  • プチコン3号: BASICをバイトコードに変換してVMで実行。コードは専用サーバを介する必要がある。
  • 困ったこと:BT KBDつかえない、カメラ使えない(QRコード経由)、SDカードは暗号化。
  • BBガンでソフトキーボードを打つ! → 弾は15発。。そもそもパネルが反応しない(接触時間が短かいから?)。
  • ソフトウェアモデム(スピーカーとマイク): FSKで1200bpsくらい出たらしい(rei)。
  • 300bpsくらいは出るようになった。FSKを認識するところがむつかしい。

[2015-08-15 14:36]

  • カメラがつかえなくなった理由はDS自体がQRコードの脆弱性があったのではないか?

[2015-08-15 14:38]

GPLライセンスをいちいちソフトウェアキーボードでうちこむのはやだよね。

_1010267

[2015-08-15 14:41]

_1010269_1010268

OpenBSD/luna88k移植話 / @ao_kenji

  • slide
  • ここ10年くらい仕事でコード書いてない。
  • UNIX歴: Sun3/SunOS4.0.xくらいから。
  • LUNA見たことあるひと挙手 → 半分くらい → 平均年齢たかい!
  • LUNAをみつけたら保護を!
  • 2001年: CPUマニュアルを古本屋でみつけてしまった。m88kはモトローラの黒歴史か。。
  • m88k: 汎用レジスタ32bit *32
  • OpenBSD/mvme88kaを移植のターゲットに
  • 必要なもの
    • クロスコンパイラ
    • カーネルローダー(vmunixはa.outフォーマットにしておけばROMからよめそう)
    • ハードウェア情報
  • コンパイラのバグがけっこうあったがNFS bootできるようになた。
  • SCSIも動くようになってスタンドアローンで動くようになった。
  • まとめ:
    • toolchain(コンパイラ)重要
    • ハードの情報は重要
    • バージョン管理システム重要
    • わからなければ時間をかけて勉強
    • 文章で記録を残す (単語じゃなくて文章にしてまとめる)
    • 行き詰まったら他のことをやる
    • 愛と執着心

[2015-08-15 15:15]

回覧されてきたCPUボード。真ん中のばCPUチップで両側はキャッシュらしい。

_1010270

[2015-08-15 15:20]

お化け / @takeoka

_1010272_1010271

  • slide
  • x86とarmはTLBミスでハードウォークでページ情報を読む。ほのぼのとしたソフトウォークとちがってハードだと高速にメモリアクセスして内容が化けてることが。
  • キャッシュ(DRAM)のリフレッシュがされてなかったバグ(配線されてなかった)→ソフトウェアでメモリをなめる(リフレッシュ)ことにして回避。。。

[2015-08-15 15:30]

[2015-08-15 15:32]

_1010274_1010273

最近、仮想環境のようすがちょっとおかしいんだが。 / @xylnao11

  • slide
  • 「それ、MULTICSで見ました」40年まえと考えることはおなじ。環境がちがうだけ。
  • docker:均一な開発・検証環境が得られる。
  • lunixはライブラリの依存関係が地獄なので簡単化には資源惜しまない文化
  • 「仮想化インフレ」
  • 仮想化の悪循環: 問題がみえにくくなる、オーバーヘッド、面倒を仮想化で解決したくなる、

[2015-08-15 15:48]

休憩

_1010263

[2015-08-15 16:08]

ALSA YM2413ドライバ / @fadis_

_1010286_1010285

  • slide
  • https://www.youtube.com/watch?v=RXHHn_3rSyo
  • ALSA: openしてwriteするとPCMがサウンドデバイスから流れる。簡単。
  • RawMIDI API:
    • そのままMIDIメッセージをおくる
  • Sequencer API
    • MIDIメッセージをいじれる
    • アプリはClientといわれる。カーネルにsequencer coreがある。
    • カーネル内にもClientをおける。undocuemnted。黒歴史か? → ほりかえしてみよう。
  • ALSA sequencerはclientが状態をもっているモデルだが、実際のデバイスは状態をもたなものがほとんど → ドライバががんばる。
  • GPIOで直接YAMAHA音源チップ1Mzでたたくにはタイマの精度が足りない。
  • ARMマイコンでI2C→GPIOに変換させてYAMAHA音源チップをつなぐ。
  • Q: マイコンからちょくせつ音源たたいたほうがよいのでは?
  • A: たぶんそうしないとタイミングがあわないかも。

[2015-08-15 16:25]

モーターを低速で定速で動かしてみる / @dob22in

_1010291_1010289

  • slide
  • https://www.youtube.com/watch?v=M12rKiHACeI
  • 天文観測は若い人はやってない。機材高いし。
  • 地球の時点速度:1/1436rpm
  • ステッピングモータやサーボモータは高級品と定義。チープなタミヤのギヤボックスでつくってみる。
  • ロータリーエンコーダもタコメータも高い。
  • Back-EMF(逆起電力)
  • マブチモータ(2極3スロット)は6回波打つ。→ 位置検出できる。
  • PWMでモーター制御
    • 周波数は可聴域の外にする 20kHz以上 に
    • CCMモード(continuous conductin mode)
    • インダクタンス成分 340μH + 580mΩ
    • DCM(discontinuous conduction mode)にするとI=0のときにモーターのBack-EMF(逆起電力)がみえてくる。← 周波数を遅めにすると
    • 低電圧FETがつかいやすくなったのでマイコン直結できそう。
    • 上下のFETは同時にONにならないように制御する(同時ON→短絡なので)。そのすきま時間はダイオードで還流させる。
  • 十分な時間がたつと逆向きに電流が流れる。電磁ブレーキ。
  • ECPPPモードで制御。
  • PWMで駆動→止めるとダイオードで還流→BackEMFで回転数検出

[2015-08-15 17:03]

_1010292

[2015-08-15 17:05]

オレオレ言語soramameの紹介 / @matsu1834

_1010295_1010294

  • slide
  • source
  • https://www.youtube.com/watch?v=qSfZFruBJM4
  • 京都繊維1年。受験がおわって作りはじめた。C++。
  • 演算子: @< car @> cdr @? length
  • 再帰降下で書いたが長くなったのでYACCビルド失敗して自作LRパーサ。
  • 式のパーサはユーザ定義演算子のためにあとからやる。
  • 継続はスタックフレームをコピー。スタックフレームはリンクリスト。

[2015-08-15 17:33]

  • Q: 公開してる?
  • A: してない。
  • Q: 高校時代なにやってた?
  • A: マイクロマウスってロボットのプログラムかいてた。
  • Q: asyncにjoinがない?
  • A: ない。

[2015-08-15 17:35]

[2015-08-15 17:38]

レイテンシとバンド幅 / @n_soda

_1010300_1010299

  • slide
  • まずアルゴリズム改善
  • 待ってる時間(サーバ応答、ディスク待ち、システムコール、メモリアクセス、キャッシュアクセス) → latency(潜伏、潜在)
  • バンド幅はどんどん向上するが、レイテンシはゆっくりとしか向上しない。
  • レイテンシを回避するきまりきったパターン
    • まとめて回数を減らす
      • stdioのread/write
      • NFSのrsize/wsize
      • バンド幅は向上するがレイテンシはちょっと悪化
    • read ahead
      • CPU prefetch,分岐予測
      • disk I/Oシーケンシャルアクセス
      • バンド幅は通常向上、レイテンシは短縮
    • write back
      • キャッシュをあとから書く
      • diskバッファ
    • write combining
      • 連続した書き込みはまとめる
    • 先行送信
      • TCPのウィンドウ制御でACKをまたずに送信。
      • バンド幅向上、レイテンシ短縮
    • 中間バッファで並列処理
      • producer-comsumer
    • 細分化して並列処理(パイプライン)
    • 並列性を抽出して並列処理
    • 投機実行
      • read aheadはこれの一種
    • インターリーブ
      • 処理を複数のハードウェアに分散
      • メモリチャンネル、RAID 0、ネットワーク割り込みのコア分散
    • 関係のない処理を分散
      • hardware multithread (SMT, hyperthreading)
    • 差分を送る
      • poll/select → epoll
    • 階層バイパス
      • putchar/putc 関数をマクロに (階層破壊)
      • polling (わりこみやめてポーリング)
      • VIA カーネルをバイパスして直接アクセス
    • FMA (fused multiply-add)
    • データではなくてプログラムを送る
      • データを生成するプログラムを送る。
      • PostScript
      • データを生成するプログラムを送る。
    • 物理的になんとかする
      • クロックあげる、線ふやす、短かくする、専用ハード
    • レイテンシとバンド幅は交換可能

[2015-08-15 17:57]

  • Q: SCSIたいへんとか,複合命令でクロック遅くなったり。

[2015-08-15 17:58]

[2015-08-15 18:00]

1つのNICを2つのネットワークスタックで共有するはなし / @syuu1228

_1010302_1010301

  • slide
  • https://www.youtube.com/watch?v=kz_1r168Asg
  • SeaStar
  • shared nothing (ロック不要)
  • ゼロコピーのためにカーネルバイパスしたい → DPDK(NICを1プロセスで専有)
  • DPDKにはプロトコルスタックがない。
  • C++14
  • future/promise (stdではなく自前の)
  • 本題: DPDKとSeaStarでNICを共有したい。
    • Amazon EC2ではNICを増やすとグローバルIPがもらえなくなる→外からSSHできなくなる(シリアルコンソールもない)。
  • SeaStarが一旦受けてTAPデバイスでカーネルのネットワークスタックにつっこむ。
  • NATかまず
  • L4(ポート番号)でどっちが処理するか判断
  • ARPはSeaStarとkernelの両方で受信。送信は別々に出す。
  • ICMP: echoリクエストはseastarで、それ以外はkernelになげる。
  • UDP/TCP: 開いてないポートはkernel行き。
    • client側: ローカルポート番号の範囲をSeaStarとkernelとで分ければOK。
    • Server側はSeaStar→カーネルにBIND(2)出して回避。
  • DHCPクライアント: 素のkernel,SeaStar,TAP経由のkernel、合計3回リクエストしてしまう問題。 → bridgeかます

[2015-08-15 18:27]

closing

_1010306_1010309_1010311x

懇親会

  • 我楽多文庫・一社店
  • 告知

_1010314_1010315_1010316_1010318_1010319_1010320_1010323_1010324_1010325

いってきた: カーネル/VM探検隊@つくば

出発

  • 朝7時起床
  • バスチケットを買おうとしたら行列ができてた。どうやら鹿島スタジアムでサッカーの試合があるっぽい。でも切符を買わなくてもバスで支払えばよかったみたいだ。
  • JR高速バスで 東京 10:30 → 筑波大学 12:05 (20分遅れ) スカイツリーの先端が雲にかくれてた。

DSC08789DSC08790DSC08791DSC08792DSC08793DSC08795DSC08797DSC08798

筑波大迷路にはまる

  • バス停から目標建物とは反対側(東側)に歩きだして中央口案内センターまで来て間違いに気づく。
  • 3Aの建物の入口まで行くも、なぜか隣のAに入ってA402が謎の部屋で、泣きそうになる。

会場到着

  • まぁ25分くらい迷ってなんとか着いた。あちー。今日は寒いんじゃないのか?!
  • もってきた菓子パンと1階で買ったコーラで昼飯。
  • 床コンセントは埋め込みなのでMacなんかの直刺しタイプは不可。
  • WLAN貸し出しもできるとのアナウンスがあったが、WiMAXもバリバリ入るので問題なかった。AISTはぜんぜん入らないけど、この差はなんだろう。

DSC08799DSC08801DSC08802DSC08803

DSC08805DSC08813DSC08810DSC08804DSC08806

[2012-09-22 13:10]

(Paris)MAP 実装してみた / 浅間正和 @m_asama DSC08808

  • http://www.slideshare.net/m-asama/map-14353679
  • http://en.wikipedia.org/wiki/Mobile_Application_Part
  • MAPというプロトコルとは?
  • 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...

DSC08809

[2012-09-22 13:51]

30日でできない!コンピューター自作入門 / 川田 裕貴 (@hktechno)

DSC08811DSC08812DSC08814DSC08815

  • 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でも動いてしまう。
  • 割り込みやめたら? コンテキストを退避するスレッドを動かしておいてポーリングしてフラグがおちたら.. データーフローっぽく。

DSC08816

[2012-09-22 14:42]

休憩

DSC08817

[2012-09-22 14:51]

Multithread Tinyl BASIC on raw PIC32 and ARM / @takeoka DSC08818

  • 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。
  • (デモ)決定的なので二度実行して同じ出力になる。

DSC08819DSC08820DSC08821DSC08822DSC08823DSC08824DSC08825DSC08826DSC08827DSC08828DSC08829DSC08830DSC08831

  • Q:mrubyは載せない? A:LLきらい. (ぼくたちの世代はBASICを知らないので書けない)
  • Q:サイズは? A:TinyBASIC: 今回のは15KBくらい。Cで書いてるので。10KBでもでかい。手でアセンブラで書けば2KB?

DSC08832

[2012-09-22 15:32]

DSC08834

[2012-09-22 15:34]

kernelでもvmでもない HadoopとYARN / @oza_x86 DSC08833

  • 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が遅いが、そこをスキップできるようになる。

DSC08835

[2012-09-22 16:09]

休憩

DSC08836aa573038.jpg

↓LTタイム↓

続きを読む

第六回 カーネル/VM探検隊

e946c25a.jpgbdb9d1c2.jpg


13:00-13:15 開会・当日の流れの説明・その他諸注意
13:15-16:15 Main Session: (30min発表、10min質疑)


@tetsu_koba「Android is not just ‘Java on Linux’」

[2011-05-22 13:10]
  • Java is the first class citizen in Android.
    • Java API中心
    • native activity (ゲームの移植がかんたんになるように)
  • Typical Directory tree of Android
    • / (initrd そのまま)と /System (yaff2)はread only
  • /initはstatic link
  • Bionic: libc, libm pthread, dynamic linker (linker implicitly have crash dump function)
  • Prelinking
    • locate dynamic link libraries ahead of time.
    • ライブラリの追加削除を考えなくてよい。
    • 3GBにライブラリをならべてもあふれないと仮定できる。
  • Zygote (ザイゴット;受精卵?)
    • Dalvik VMが必要なclassをロードしているのでdynamic link librariesもロード済み。
    • child processもロード済みに。
    • exec syscallはつかってない。
  • Dalvik VM
    • java byte codeから dex codeへの変換はホストでやる
    • 16bit register basedd
    • レジスタ: 命令は多くなるが、命令数は減らせるメリットがある。
    • JIT,concurrent GCもはいった。
  • Java class lib
    • Java MEとはちがう。Java SEににている。
    • 自前class loaderをつかうときには注意。dex codeをどうやって生成するか?
    • JRubyではJITをoffにしているのでは?
  • Linux kernel
    • なぜBSDをつかわなかったか? ドライバがいろいろあるからか? ユーザ空間はapacheライセンスがほとんどなのに。
    • /dev/binder
      • basement of inter process method invocation
      • not forgeneral purpose. tuned for specific transaction.
      • multithread aware: have internal date per thread. (ソケットならファイルディスクリプタではない)
      • ioctlいっぱつでreadとwriteができる。
    • ashmem
      • android /anonymouse shared memory subsystem
      • pin_region/unpin_region: unpinするとカーネルがメモリ逼迫時に捨ててくれる Java weak refっぽい。 Image Decoderのキャッシュでつかわれている。
    • wake lock
      • sleep modeにはいらないようにロックする
    • alarm
      • sleep modeにはいっていてもおきる
    • low memory killer
      • アプリのライフサイクルで画面から消えたらセーブするように決められている。
    • logger
      • system wide log いろいろなのが容易されている
  • build system
    • これだけの規模のものが手順にしたがってビルドできるのがすごい。
  • まとめ
    • 既存のディストリビューションからの引き算ではなくて、linux kernelに必要なものを足していった。
[2011-05-22 13:42]

@m_asama「Netfilter(iptables) で Winny/Share 検知」

[2011-05-22 13:46]
  • 「winny/shareをつかってるひと!手を挙げて!」
  • IPP2P: P2P通信を検知するためのnetfilterの機能拡張 (非標準)
  • eDonky, eMule, Kadamlia, KaZaA, BitTorrentなどに対応
    • Winny/Shareには対応してない
  • BitTorrentの検出方法: "BitTorrent protoco"という文字列があるかみる。
  • Winny/Share: 暗号化されているのでパターンマッチングはむつかしい
  • pre shared keyはないので最初からおいかければ復号できる。
  • table: {src,dst, init seq, デコードして判別結果}
    • IPP2Pでは状態管理をしてない。(セッション管理)
  • netfilterのconntrack: tcp/udpの接続情報を追跡。FTPの制御コネクションをみてデータコネクションとかPPTPの接続情報からGREのNAT設定をしたり。
    • sk_buffに情報がうめこまれるのでiptablesモジュールからも参照可能
  • nf_conntrack_ipp2pをつくってwinny/shareだったら印をつける。
    • arc4とsha1をつかう。
    • 最初のデーターパケットをチェック: 最初のバケットサイズは固定っぽい: winnny 11B, share=158B
    • WinnyだとRC4しかつかってない。11Bのうち3-6Bを復号鍵として7-11Bを復号して0x0100000061なったらWinny.
    • Share: src portの2バイトからsha1で20バイトをえる。これが復号鍵。CFBモードで改変RC6でデコードしたときに最初の4バイトが0x02000000になってたらshare.
  • ダメなところ
    • nf_conntrackはポート番号が固定。
      • helperをさがす
    • spin lock: システムで1つしかないバッファを保護している。しかも中で重い判定処理をしている。CPUごとに分ければ解決するがネタのために残しておいた。
[2011-05-22 14:14]
  • Q: 監視装置にDoSアタックくらったらどーなる?
  • A: 実戦配備してないから。自分で作ったものは怖くて使えない。
[2011-05-22 14:16]

@akachochin「dalvikのGCをのぞいてみた」

[2011-05-22 14:17]
  • mark&sweepが基本。copyもつかえる。
  • gDvmから直接参照されているのがrootオブジェクト。
  • GC_CONCURRENTのばあい
    • GCスレッドの優先度を上げない
    • ミューテータが動けるようにする
  • dvmMalloc()から読む。
    • mspace_calloc(): bionicのmallocはdlmallocアルゴリズム(たぶんlinux)
      • freeで隣接するfree領域は併合される→フラグメンテーションをあるていど緩和できる。
    • dvmHeapBitmapSetObjectBit
      • どこがつかわれているか
      • liveBits, markBitsが重要:ヒープを8Bにくぎっている。先頭だけにbitをたてる。サイズは別途。
  • ルートのみに印をつけるフェーズ
    • markBits:つかわれている領域の先頭にbitをたてる
    • CardTableを0クリアする。マーク中に変更されるとdirtyになるようなもの。128B。
  • 印のついたオブジェクトをたとるフェーズ

ー markBitsをたどっていく

  • -- 参照アドレスが大きかったらmarkBitをたてる
    • - 小さかったらmarkBitをたてずにstackというデータ構造にアドレスを保存する。(※理由不明)
    • あとまわし(stacked)になったヒープをたどる
      • スタックにつみながらスタックがからになるまでまわる。
    • ここまではミューテータがうごいている
  • 再度印をつけるフェーズ
    • 先頭からたどると効率がわるい。
    • cardTableでdirtyになっている領域をさがす→markBitsを調べる。
  • 不要なヒープを解放する
    • live & ~markを計算
[2011-05-22 14:49]
  • Q:JavaObjectのフォーマット A:メンバの個数がわかるのでokだったとおもう。
[2011-05-22 14:51]

@kozossakai「アセンブラ大集合」

[2011-05-22 14:53]
  • 全部自作。全部プロジェクトリーダ。
  • gcc -S: リンク前なのでどういうアドレスがはいるかわからない
  • objdump -d hoge.o: これもおなじ。
  • objdump -d hoge: リンク後
  • gcc -g + objdump -S
  • -fomit-frame-pointer: フレームポインタをつかわなくなるのでアセンブラをよみやすくなる。
    • -Oでは機種によってon/offがちがってくる。
    • -O2では命令入れ替えがあるので読みにくくなる: -Oくらいがちょうどいい。
  • 今回: -nostdlib -g -O + objdump -d -S
  • ポイント
    • 特殊レジスタは汎用レジスタに含まれるか?別名があるか?
    • 代入の向き
    • 関数呼び出しで保存されるレジスタと破壊されるレジスタはABIで決めあれているのに注意。
    • 引数はレジスタわたしかスタックわたしか
    • スタックの伸びる向き
  • blr = branch link register
  • li = load immediate
  • jr ra = jump return address
  • mips: gp = global pointer 毎回セットしなくてすむ。
  • SH: 大きな値を入れるには命令の近くに値を埋め込んでloadしてくるコードがはきだされるのでキャッシュ効率が悪くなるのでは?
  • ARMのおおきなあたい: mvn move not + sub + sub コンパイラすごい。
  • ARM push はビットマップでレジスタを指定できる push lrしたのpop pcでもどれる?
  • x86は関数のおしりに16バイトアラインのためのつめものがあるが、ちょうどの長さになるように命令を選んでいる。0をつめるだけではない。
[2011-05-22 15:34]
  • -fomit-frame-pointerはデバッガで追えるなら-Oで有効になる。
  • x86_64はけっこうABIちがう。
[2011-05-22 15:38]


16:15-16:45 Lightning Talk(GSoC) LT1-LT3 (8min発表/1min質疑)

@syuu1228 「Multiqueue BPF support and other BPF features」

[2011-05-22 15:41]
  • multicore support on NIC
    • 従来のNIC: the S100Kps problem (受信キュー/割り込みが1つだけ)
    • 改善NIC: 各CPUに1:1で受信キュー/わりこみをもつ
      • ハッシュ値をみてCPUにばらまく
      • receive side scaling
  • scalable network stack
    • 複数CPUで並行してネットワークスタックを稼動出きる
    • ロックでブロックしないように
    • 順序をまもる
  • BPFはスケールしない
    • fdescをreadしているだけなので1スレッド
    • RSSはかんがえられていない。分散したのに1つのバッファにまとめてしまう。
  • multiqueue bpf
    • アプリケーション側でCPUの数だけスレッドをたてる。
    • NICごとにスレッドが対応。ioctlで対応付け。
    • インターフェイスごとにロックする。
  • Q:どのキューにパケットが入るか
[2011-05-22 15:53]

@laysakura 「Implement faster OpenMP Task for libgomp」

[2011-05-22 15:54]
  • gccのopenMP task実装は極めて遅い
  • #pragma と gcc -fopenmp オプション
  • openMP taskとは?
    • ptheadつくっておまかせでは性能がでない。
  • CPUごとにタスクキューをおく
  • #pragmae openmp task では親とおなじタスクキューにつっこまれる
  • ひまなキューからタスクスティーリング
  • Nanos, OpenUHでは性能がでている
  • ロードバランスとローカリティが重要
[2011-05-22 16:02]
  • GCCはタスクキューは1つしかないのでロックが競合を生んでいるようだ。
[2011-05-22 16:04]

@gokzy 「Implement the RPS/RFS in FreeBSD」

[2011-05-22 16:05]
  • mono-queue nicで受信性能をスケールさせる
  • linuxでの実装を移植。
  • ithread:割り込みスレッド: link layer, driverの処理。
  • ithreadの上のnetisr software threadを複数CPUに分散させる。
  • 同一フローは同じnetisrにディスパッチしなければならない。
  • {src,dst}x{addr,port}のハッシュ値から。
  • 10数行で$2000いただき
  • RFS: receive flow steering
    • netisrとappを同じCPUにしたい。
    • Appが移動したときにまだ未処理のnetisrに残っていたらそっちにディスパッチしなければいけない。
  • データローカリティをかんがえてスケジューラに手を入れることは考えてない。
[2011-05-22 16:14]


36b8ddc4.jpg

16:45-17:15 休憩&関西からの発表中継 30分
  • ライフゲームでXNOR


17:15-18:05 Lightning Talk(1) LT4-LT8 (8min発表/1min質疑)

@takeoka 「OS系低レイヤな人のためのtrapnsputerとか...」

  • CSP:デッドロックがおこりにくい。
  • Occam/Transputer
    • Immos社(英) ST-Micro
    • ErlangはST-Microがつくった、せいとうなながれ
  • XmosがST-Microからスピンアウト
  • Transputer: スケジューラはマイクロコード
    • runp endp startp stopp insertqueue altwt timeslice jump
  • committed choice
  • セマフォよりもRPCのFIFOは静的に解析したらデッドロックがわかる。
  • そんなこといってもそんなにたくさんアクティビティはないのでopenMPとかMPIになっちゃうのでは?
[2011-05-22 16:56]

@hyoshiok 「linux emulator by javascript」

  • jslinux
  • cp /dev/clipboard ... でできる バイナリはuuencode/uudecodeで。
  • slのデモ
  • クロックは中でカウントしているのでdateすると時刻の進みが遅い。
[2011-05-22 17:07]

@murachue「目grep入門」

[2011-05-22 17:11]
  • ヘキサエディタ
  • 最近のはビットマップ表示ができる
    • 数値の範囲によって色わけ
  • マジックナンバー
  • パターン
[2011-05-22 17:19]
  • おおざっぱな色づけで十分情報がみえてくる (とくに色はチューニングしてない)
  • sha1とかAESは人間にはむつかしい
[2011-05-22 17:21]

@toyoshim「BeとHaikuとYUREX」

[2011-05-22 17:24]
  • 1990ごろにBe,Inc設立
  • 1996 power mac
  • 1998 x86
  • 2001 会社終了
  • 2007 zeta終了
  • BeOSのわるいところ: posix準拠が不完全なのでconfigure/makeがとおらない
  • C++マングリングに依存していて最新のGCCがつかえない罠
  • アドレス空間のつかいかたがwindows/linuxと逆
  • fdescとsocketが別空間→redirectできない
  • mmapがつかえない
  • プレゼンはHaikuOSでやっている。
  • デモ
[2011-05-22 17:35]

@uaa 「困ったときには(usb)ホストにきこう」

  • Intel PCH
  • RMH (rate matching hab) はチップセット内蔵なのでアナライザがつかえない!
  • 1バイト要求なのに2バイト返ってきちゃう
  • →8ポートなのでハブ自体のステータスビットとあわせると2バイトになっちゃう。ポート数にあわせて要求を出すようにて解決。
[2011-05-22 17:43]


18:05-19:45 Lightning Talk(2) LT9-18 (8min発表/1min質疑)

@siritori 「つくっておぼえる!仮想マシン〜妄想編〜」

  • 自分OSつくる→失敗
  • printfできるようになるまでが大変
  • そもそもCPUの仕様がよくわかってない(1000ページもある)
  • エミュレータを自作すればよくね? CPUも仕様も自分で決めたわけだし
  • Erlang/OTPがあるので動いたままプログラムを変更できる
  • R2000/3000likeなCPUを設計
  • Erlangにはバイナリにパターンマッチできる機構がある
  • Erlangでバイナリをそのままいじるのはわりとめんどう。
[2011-05-22 17:54]

@master_q「NetBSD manを翻訳しよう!」

[2011-05-22 17:56]
  • linuxにはあるのにNetBSDに日本語情報がない。情弱にはつらい。
  • 翻訳する手段にはまって翻訳がすすんでない。
  • groff 21だとutf-8がつかえる。
  • 本家に受け入れられるには
    • オリジナルの差分管理
    • 翻訳マンパワーの確保
    • ブランチにも対応
  • manをgettext化!
    • .Sh とか .Pp できりとればいい!
  • 翻訳: www.transifex.net
  • msgmergeをつかえば..
[2011-05-22 18:04]
  • Q:debianとかどっかでドキュメントをpo化するのはどっかにある。
  • A:roffパーサほしい。
  • Q:昔のFreeBSDにちょっとしたしくみがあった。
[2011-05-22 18:09]

@kei_os「Kinect わくわく on BeagleBoard !?」

[2011-05-22 18:10]
  • androidフレームワークにkinectをポーティングしてbeagleboardをうごかす。
  • androidのcamera APIをつかってkinectの映像/深度データをつかえるようにする。
  • HALはカーネルとライブラリの間にある。
  • フルセットもってきているので。あとでデバッグよろしく。
[2011-05-22 18:21]
  • Q:アイソクロナスのはパラメータがびみょうらしい
[2011-05-22 18:23]

@masami256 「anaconda」

  • カーネルをつくったらanacondaでインスーラをつくりましょう!
[2011-05-22 18:34]

@yojiro 「緊急地震速報HACK」

[2011-05-22 18:35]
  • ここ10年くらい研究されて、ここ5年くらいでデプロイされて、最近つかわれている。
  • (財)起床事業支援センターから専用線利用でIPパケットでくる。
  • 誤報がおおいなとか、地震がくる前にshutdownしたりとか。
  • 仕様書がインターネットにない。ハードコピー。更新も紙で。

ー すいそくしてみた

  • - chkにヘルステェックを返す。
    • チェックポイント応答にackをかえす。
  • 45秒で7回も届いたり
  • デコード電文
  • コード電文パーサをかいてみた。
    • 地名データの辞書もつくって400点弱(英語フランス語とか)
  • Q: WNI last 10 secondがかんたん。簡単に高度利用のデータをとってくるのにつかえる。フォーマットもtcpdumpするとすぐわかるはず。
[2011-05-22 18:48]

@d_kami「My Emulator」

  • x86エミュレータをかいた
  • 自作OSを書いて検証
  • ブラウザで動かせるようにしたい。Java→JavaScript変換。
  • Q:どのくらい時間をつかったか?
  • A:1年くらいかけた。
  • Q:次はなんのエミュレータをつくるのか?
  • A:まだいえない。そのうち公表する。
[2011-05-22 18:58]

@kumagi「辻ロックフリー」

  • lock-free; クリティカルセクションをなくす
  • CASでlock-free stackをつくるとheadポインタのとりあいになる。
    • sleepを乱数で入れて
  • pushとpopのマッチングがstackの目的
  • 待ち時間はelimination arrayで待つ
  • lock-free malloccはたいていstackをつかってる
  • QA:sleepについてあつい議論が.... スループットのグラフは見掛けのスループットがあがっているように見えるだけかもしれない....

@hasegaw 「QEMUが地雷原なわけがない」

[2011-05-22 19:11]
  • virtio: ホストとゲストのリングバッファ
  • Xenは64bitゲストを32bitホストでうごかせる。がKVMは連続マッピングするのでできない。
[2011-05-22 19:19]

@shinh「Mach-O loader for Linux」

[2011-05-22 19:22]
  • sedでELFをはくbrainfuckコンパイラをかいたり
  • appleのgcc(mach-o)がうごく。
  • グラフィカルなデモ: sl
  • putsなんかはlinuxのをそもままつかえばABIもだいたいおなじだしOK.
  • OpenCFLite (CF=core fundation)とかない
  • Cocoaとかない Ccotronというプロジェクトある.. x86_64ではうごかない。
  • openはモードがmacとlinuxで値がちがう。
  • readdirのdirentは厄介:構造体のレイアウトが全然ちがう。
  • fopen: *_unlockedをマクロでつかっていてこまる。
  • Q:MAC OS用のlibcを移植したほうが簡単かも?
  • A:このままサクッとすてちゃうかも。
[2011-05-22 19:32]

@a4lg「メモリを隠す、検める - x86 の正しい使い方」

  • (機器不調のため中止)


805f1a2f.jpg

19:45-19:50 閉会
19:50-20:30 撤収・移動
20:30- 懇親会

6adc0d752622

記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    ギャラリー
    • 今日の練習 2022-05-16
    • 今日の練習 2022-05-16
    • グリーンズフリー
    • グリーンズフリー
    • グリーンズフリー
    • 今日の練習 2022-05-13
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード
    • ライブドアブログ