kernelvm

いってきた:カーネル/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

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

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