P1120140

P1120134P1120135P1120137P1120138

  • 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]

P1120139P1120141