ルーティングアルゴリズムの動きが想定と違う。

何度か動かしているうちに、近隣との接続時の動作が想定と異なる気が。確認のため、10%の割合でランダムにノードをkillするようにしたら、その情報がうまく更新されていない動きをするようだ。chromeのwebrtcライブラリはマルチスレッド動作で、切断イベントが別スレッド側に通知されように作ったが、イベントのタイミングにより切断状態の更新に漏れが生じている可能性がある。

f:id:llamerad-jp:20171005025117p:plain

リソース上限を変更したのだけれども

複数ノードでPROCESSWARPの安定した動作を実現するために、分散メモリの足回りを抜き出して開発中。 100ノード前後でファイルディスクリプタの上限に達したため、以下のページに従い上限を増やす。

christina04.hatenablog.com

なぜかプロセス数の上限が以下のように1064までしか増やせなかった。 まずは1000ノード程度での安定動作を目指そう。

$ uname -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 524288
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1064
virtual memory          (kbytes, -v) unlimited

追記:max user processesに4096を設定したのがまずかったらしい。hard limit以上は設定できないそうで2048だと設定できた。

詳説WebAssembly

CMU#51で「詳説WebAssembly」という題目で解説を行いました。

www.slideshare.net

  • webブラウザで処理できる言語をJavaScriptだけに限定している現状をリセットする一手。
  • 現状のwebブラウザの互換性問題はECMAScriptへの準拠がまちまち+APIの動作が微妙に違うということに起因していそう。WebAssemblyにより言語の問題が軽減してもAPIの問題は残ると思うので、そのへんがどうなるか。

cmu.connpass.com

VPNサーバを仮想マシン上に建てようとしてハマった話

再現環境

設定

  • 仮想マシンのホストのネットワーク設定をプロミスカスモードにする。

(設定自体は大して難しくもないGUIなので省略)

理由

  • ゲストOSにVPNサーバを建てると、内部に仮想HUBを持つ。 f:id:llamerad-jp:20161224152248j:plain f:id:llamerad-jp:20161224152254j:plain

  • ホストOSはゲストOS以外宛のパケットを弾いてしまうため、通信に失敗していた。 f:id:llamerad-jp:20161224152301j:plain

  • プロミスカスモードにすることで、OS以外宛のパケットがゲストOSに到達し、VPNを通過できるようになった。

WebWorker調査メモ

Webブラウザ上でマルチスレッドを実現する方法を調査していたところ、WebWorkerなるものを見つけた。当初探していたものと異なるが、メモリ空間の分離ができ、他のところで役立ちそうなため、メモ。

developer.mozilla.org

特徴

  • ブラウザ上のJavaScriptは1つの実行スレッドを持つが、WebWorkerを使うと、別のスレッド(Worker)を作ることができる。
  • Workerで重たい処理を実行していても、メインスレッドはブロックされず、DOM操作を行うことができる。
  • WorkerからDOMを操作することはできない。 その他、Worker内で利用できるAPI、機能には制限がある。

developer.mozilla.org

  • MDNではしばしばスレッドという表現がされるが、少なくともJavaScript上ではメインスレッドとWorkerでメモリ空間が別々。プロセスといったほうがイメージが近い。
  • メインスレッドとWorkerはメッセージパッシングで通信する。渡したオブジェクトはコピーされる。そのためメインスレッドで編集してもWorkerには影響ない。逆も同じ。
  • 基本機能はスマートフォン環境を含め、多くのブラウザでサポートされている。SharedWorker(iframe,異なるwindowでworkerを共有する)などの凝った機能はIEスマートフォンでサポートされていない場合が多い。

参考リンク

MDNのドキュメント、APIなどの一覧。 developer.mozilla.org

チュートリアル形式のドキュメント www.html5rocks.com