2017-01-01から1年間の記事一覧

Multi-PAXOS擬似コード

PAXOSの説明はWikipediaで 元々のPAXOSのうち、同じProposerから連続してproposeされる時、チョット効率よく処理をする改良としてMulti-PAXOSというアルゴリズムがある。そのMulti-PAXOSの擬似コードが無かったので作った。まだ試していないので動くかどうか…

WebRTC on ネイティブ〜webブラウザ

分散環境の通信メディアとして、WebRTCを使っているが、ネイティブアプリとwebブラウザ間で通信を行うときに切断してしまう不具合がある。バージョンや、そもそもの作り方が悪かったのかと、最小サンプルを作って確認した。最小サンプルは動くので、自分が作…

Webブラウザでも分散

Emscriptenを用いてC++をJavaScriptに変換することで、Webブラウザとネイティブで同じアルゴリズムで接続できるようにした。 本当はJavaScriptではなく、WebAssemblyに変換したかったが、embindを使ったクラスや関数のエクスポートが最小サンプルでも動かな…

遺伝的アルゴリズムを使ったルーティング

遺伝的アルゴリズムを使ったルーティングアルゴリズムにより、接続の偏りが少なくなった。 評価用の点数の付け方も工夫したので、特定のノードに通信が集中しそうになっても経路が分散されるはず。 計算負荷が上がったためか、120ノード前後でタイムアウトが…

ルーティングアルゴリズムの改良がイマイチだった

WebRTCのやTCPのように、コネクション型の通信経路を使う場合、特定のノードに接続が集中すると、そのノードのリソースが不足したり、負荷が上がってしまう。例えば、macOS sierraではユーザがopenできるディスクリプタの数は256に制限されているため、1ノー…

Xcodeの静的解析ツールに、メモリリークの可能性を指摘されたが釈然としない

経緯 本当はパフォーマンス測定ツールを使って、プログラムが想定外に重い処理を行っていないか、確認したかった。 とりあえず、「Analyze」を起動したら、「Potential memory leak」と言われてビクビク検証している。 プログラム 分散処理インフラのpicojso…

安定性の向上

ルーティングアルゴリズムの不具合を幾つか修正することで、安定性が向上した。5〜10%の割合でランダムにノードを突然終了させても、全体では崩壊せずに動作し続ける。

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

何度か動かしているうちに、近隣との接続時の動作が想定と異なる気が。確認のため、10%の割合でランダムにノードをkillするようにしたら、その情報がうまく更新されていない動きをするようだ。chromeのwebrtcライブラリはマルチスレッド動作で、切断イベント…

425ノード

seed側でパケットを破棄する時間が短すぎたので、修正。400ノード以上繋げられる状態になった。

150ノード

130〜150ノードあたりで急に接続失敗が増える。seedの不具合っぽい。

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

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

詳説WebAssembly

CMU#51で「詳説WebAssembly」という題目で解説を行いました。 詳説WebAssembly from 祐司 伊藤 www.slideshare.net webブラウザで処理できる言語をJavaScriptだけに限定している現状をリセットする一手。 現状のwebブラウザの互換性問題はECMAScriptへの準拠…