- 2016-12-15 18:00~21:00 PFN会議室 (大手町ビル;C7出口)
- https://mesos-scr-jp.connpass.com/event/45785/
- http://togetter.com/li/1059854
- ハッシュタグ: #mesosjp
- Q: Subcommand::dispatch()の引数どうなってるの?
- A: マクロで1引数から11引数までのバリエーションを生成しているっぽい。C++のvariadic templateでできそうだけど。
- 3rdparty/stout/include/stout/subcommand.hpp
[2016-12-15 18:24]
- 現在14人 (参加予定19人になってた)
[2016-12-15 18:25]
スタート
containerizerに興味があるひと?
containerizerがdockerコマンドをつかってないって知っている人?
[2016-12-15 18:32]
containerizer / @suma90h
- 機械学習チョットデキル
- さいきん星の写真をとっている
- 資料: https://github.com/kuenishi/mesos_scr_jp/blob/master/01/mesos-scr-01_containerizer.md
- エディタはvim
- Listing docsを読んだひと → 会場1名
- "Unified Container": mesos用語ではないっぽい。
- mesos.protoはv1の方をみる。
- composing containerizer: テストでつかうっぽい。複数のコンテナを結合。dockerの機能をつかいつつresource isolationできるので使いたいひとがいるかも。
- docker containerizer: dockerべったり。
- mesos containerizer: ソースをよむとifdef LINUXがでてきてゲンナリ。
- ソースをよむまえにcontainerizer-internals.mdをよむとよい。
- /v1はだれもいじってないので見ないで include/mesos/mesos.protoのほうを参照
- TaskInfo
- ContainerInfo
- executor: (A)mesos agent in docker or (B)not in dockerの2パターンある
- containerizer state: FETCHING: fetcherはサンドボックスにURIからダウンロードしてくるコンポーネント。
- 迷子にならないよう簡単なところから。 abstract classをみてみる。
- src/slave/containerizer/containerizer.hpp
- class Resourcesはどこからきてる? protobufから? それとも resources.hppのか?
- create()がファクトリー
- launch()
- src/slave/containerizer/containerizer.cpp
- Containerizer::create()
- つぎはdocker containerizerをよむ。
- containerizer/docker.hpp
- NvidiaComponentsってGPUかな。
- コードすかすか。実装はDockerContainerizerProcessにある。
- ____destroy(): アンダーバーで始まる名前は処理系予約だから使わない方がよいのでは。。。
- containerizer/docker.cpp
- DOCKER_NAME_PREFIX = "mesos-"
- DockerContainerizer::create()
- docker/docker.cppもある
- C++では定義(.cpp)のメソッド定義にはstaticはあらわれないので宣言(.hpp)をみる。
- もろdockerコマンドをたたいてる。APIつかってない。
- version >= 1.9.0.を期待しているっぽい。コマンドたたいて結果パースしている。
- ここまでで30分くらいと予想していたが45分経過。 [2016-12-15 19:17]
- 引数のescape処理してない。
- foreach: stout/foreach.hppか。独自マクロ多すぎ。予約語じゃないのでハイライトされてない。。
- Docker::run()でcmdがescapeなしに雑にjoinされているが、メッセージ表示につかっているだけなのでだいじょうぶか?
- subprocess探索のつづきはご自宅でどぞー
[2016-12-15 19:29]
- 現在 会場19人
- Q: javaっぽい書き方だけどメモリリークだいじょうぶ?
- A: OwndとかあるしlibprocessはGCスレッドがいるし。
[2016-12-15 19:37]
libprocess / @ashigeru
- 資料: https://github.com/kuenishi/mesos_scr_jp/blob/master/01/libprocess.md
- エディタはsublime
- 3rdparty/libprocessのした
- actor model (erlangにインスパイヤ)
- process = actor (unixのプロセスではない)
- local messaginとremote httpの両方がある。今回はlocalのみ。
- libprocess/README.md : githubで読むとサンプルコードがコメントアウトされていてみえないのでソースコードを直接見るべし!
- erlang styleとは? 気持ちはわかる。
- メッセージごとにスレッドをわりあてるのではなく、キューを用意して処理するモデル?
- futureとpromiseは今回無視する方向で。
- プロセスごとにスレッドは割り当てないので軽量。CPUの数+1くらいのスレッドプールをつくってイベントドリブンになっている。
- Process::dispatch()はメンバ関数と引数を渡すと実行される。
- ProcessBase: Processのいっこ上。プロセス実行環境みたいなもん?
- HttpProcess: とばします
- PID: unixのpidそのものではない。ProcessオブジェクトをつかうんじゃなくてPIDをつかう。PIDのリファレンスみたいなもん。
- process::initialize(): 機構の初期化。あちこちで呼ばれている。
- **/3rdparty/**, **/test/** はノイズ
- initialize()は何度呼んでもok.
- stout スタウト? エスティーアウト? mesosをつくっていた人がもともとつかっていたもの.
- 3rdpartyというorgnizaiton(github)がある。おもいっきりmesosの人。
- header only library
- Ownedはprocess版のとそうじゃないのと両方あってややこしい
- mesos-3rdpartyにtar.gzがごろごろ
- process.hpp
- ProcessBaseはEventVisiorを継承している。
- EventVisitorはvisitorパターンの実装。Event::visit().ダブルディスパッチパターンになっている。
- ProcessBase::serve()をよぶと自分のvisit()がコールバックでよばれる。
- MessageHandlerは関数で引数はUPIDとstring.
- あんまりピュアじゃない。HTTPのメッセージをルーティングする機能がある。たぶんMesosの前にやってた。
- process::diapatch()はprocess::internal::dispatch()のラッパー.
- 3rdparty/libprocess/src/process.cpp
- たいていclass ProcessManagerの中でいろいろやってる。init_threadが肝。
- process::initialize()
- initialize_startはatomic boolean
- 定番のSIGPIPEをSIG_IGN
- EventLoop::initialize()はあとでrun()する
- process_manager->init_threads()
- ProcessManager::init_threads()
- プロセス数が最低でも8なのは(コメントによれば)テストを通すためだけっぽい。。。
- workerはoperator()を定義していて
- process_manager->dequeue()はプロセスのキューになっている。
- worker_threadを登録する。
- ProcessManager::spawn()
- プロセスつくったらキューの末尾につける。
- __process__はthread local storageになってるっぽ。
- ProcessManager::resume()
- event->visit()
- ProcessManager::wait()
- process::wait(const UPID& pid, const Duration& duration)から
- WaitWaiterっていうのがいる
- Gateは待ち合わせ機構。approach()/arrive()はバリア同期?。
- wait()はyield()みたいなこともする。
- きほん non priemptive
- ゆうせんどもある?
- internal::dispatch()
- - プロセスマネジャにDispatchEventを送って
[2016-12-15 20:36]