コンテナと VM の起動速度,microVM や軽量 VM コンテナについて

自分用メモ
6
きひろちゃん(9歳幼女) @aki33524

やっぱサービス毎にcontainerなりsandbox作りたいお気持ちが生えてしまうけど、containerはcontainerでsyscallのhookが地獄、終わり!w

2020-06-04 16:40:03
きひろちゃん(9歳幼女) @aki33524

kvmとlxcのいいとこ取りみたいな夢のなにか出来てくれ

2020-06-04 16:40:36
きひろちゃん(9歳幼女) @aki33524

そういえばこの辺まえにおるみん先生がなんか言ってた気がするけどすべて忘却した

2020-06-04 16:43:30
mumumu @mumumu_vm

gVisor,Firecracker,コンテナの比較みてるとなるほど〜みたいにおもっちゃうな(得意なところがすこしずつ違うし

2020-06-04 17:32:42
mumumu @mumumu_vm

草 > Firecracker is much faster than the other platforms because it makes no effort to write data back to persistent storage. As a result, it operates much closer to the speed of memory.

2020-06-04 17:48:27
orumin @orumin

gVisor は ptrace 使う版と VT 使う版があって,しかもどっちも gVisor と呼ぶからややこしい。

2020-06-04 18:29:49
orumin @orumin

Firecracker の論文,microVM を導入するのはいいんだけど紙幅を割いてる Lambda の話がかなり抽象的な話してて,「そうは言うけど結局その構成をどうやって実現してるの……」があんまりわからなくて,論文というより Firecracker の宣伝を読んでる気持ちになれる

2020-06-04 18:30:48
orumin @orumin

実は Firecracker の Network Throughput は QEMU や Cloud Hypervisor より低いんですが,「オレたちの Lambda でここの速度はネックになってないからこれでええねん」みたいなこと書いてあって真顔になれる

2020-06-04 18:31:25
orumin @orumin

Firecracker や gVisor 以外に,ここらへんの isolation に仮想化を使うけど use-case としては従来のコンテナ型のように使いたい,という話では,Unikernel や Kata Container,Clear Container なども挙げられます。

2020-06-04 18:33:50
orumin @orumin

実際 motivation としては,container と VM で isolation と軽量さが trade-off になってるから,container ぐらい軽量なものを VM の isolation で使いたい,そして FaaS で動く前提なので FaaS の場所以外では動かなくていいという割り切った設計をしているという背景があるので,

2020-06-04 18:36:55
orumin @orumin

AWS Lambda で求められるワークロードに必要なスループットがあればべつに 10GbE ワイヤレートとか要らんのはそうなんで,まったく正しい主張なのですが,Lambda で大丈夫だったという話がどういうワークロードなのか具体的なベンチマークとかがあったりするわけではない

2020-06-04 18:36:56
orumin @orumin

あと VT を使わない Xen を利用したコンテナの X-Container とか面白いんでぜひ読んでください >> csl.cornell.edu/~delimitrou/pa…

2020-06-04 18:39:36
orumin @orumin

@aki33524 Firecracker 自体は crosVM 改良の microVM モデルを導入した VMM だけど,それだけじゃなくて Lambda の運用として slot という概念で VM プール作ったりして運用してるあたりがミソっぽい。論文[pdf]: usenix.org/system/files/n…

2020-06-04 18:41:26
orumin @orumin

A Binary-Compatible Unikernel [P. Olivier+, VEE'19] の図 1 のプロットとかも,さっきの話で参考になると思う(これは Firecracker はまだ論文出てないし Unikernel の議論なのでやや Unikernel ばかりなプロットではあるが) pic.twitter.com/8Ou4ZNPJLm

2020-06-04 18:45:57
拡大
orumin @orumin

もちろんこのプロットは Olivier らによるプロットなので,異説や異論は色々ある(私も言いたいことはあるぞ!)

2020-06-04 18:47:05
きひろちゃん(9歳幼女) @aki33524

@kotatsu_mi VMMっていうかそのpoolこそ本質くせえ。インスタンス立ち上げるのに時間かかるからpoolしとくやつ他で見たことあるな……

2020-06-04 18:50:20
orumin @orumin

@aki33524 たとえば Android は JavaVM の VM の,どのプロセスでも共通する初期化を終わらせておいたのを用意しておいて,intent が飛んできたらこのプロセスを fork してから class ファイルをがっちゃんこして起動するという構成になってて,これを Zygote(受精卵)と呼んでる

2020-06-04 18:53:06
orumin @orumin

@aki33524 この pool とかが本質っぽいのにこの本質っぽいところが論文にふわっとしか書いてなくて結局それを具体的にどうやってるのかあんまりわからないのでかなしくなった

2020-06-04 18:53:38
orumin @orumin

@aki33524 4.11 あたりに slot の話とか,slot を re-use してるから Lambda で var i = 0; exports . handler = async ( event , context ) => { return i ++; }; みたいなコードをデプロイしてもアクセスする度にインクリメントされていく数字が返ってくるよみたいなのが書いてはある。

2020-06-04 18:55:26
ぬるぽへ @nullpo_head

VMがコンテナより「起動が」遅いって話、ちゃんとそこらへんの議論を読んだことがないせいでピンとこないんですよね・・・fork爆弾とかの勢いでコンテナとVMを立てまくったときの比較でもしてるんだろうか vmというより普通のカーネルを1からブートするときの話なんだろうか

2020-06-04 18:57:12
きひろちゃん(9歳幼女) @aki33524

VMの起動って普通bootをすることを意味するのでは?(というかそうじゃない例ってあるんです?)それなら単なるprocess namespaceのつよつよ版であるところのcontainerのほうが早いのは自然では(普通のprocess起動とほとんどコストが変わらん)

2020-06-04 19:06:00
orumin @orumin

たとえば firecracker の場合は init プロセスに I/O 命令で文字列を出すだけのプログラムを仕込んだ VM を起動してそれを起動までの速度としていた(私も自分の卒業論文そんな感じにして実験した覚えがあります)

2020-06-04 19:10:01
1 ・・ 4 次へ