Introduction to Lucet
https://gyazo.com/2a6d1b75e1059c850d6f9628a1d0ef82
Senior Software Engineer at Fastly
GitHub.icon https://github.com/acfoltzer
Lucetとは?
https://github.com/fastly/lucet
1. コンパイラ
clangやrustcのような言語コンパイラを使う
WASI
コンテナ技術を捨て、 WASIを試す – nttlabs – Medium
特定のラインタイムに縛られない
POSIX
2. 実行環境(ランタイム)
WebAssemblyについて
パフォーマンス上クリティカルなコードを実行する
asm.jsというサブセットが合った
パフォーマンス上のボトルネックとなっていた
コミュニティはこれを解消するためにWebAssemblyを開発
ブラウザで安全に実行することができる
C, C++, Rust, TypeScript,
Go, Swiftもある
wasmがcontruct満せばサーバ、クライアントどちらでも動く
複数のブラウザで実行できる
WebAssembly → Lucet → x86-64 にコンパイル
lucetc でwasmを使う
parse → verifier → translator → codegen → artifat生成
craneliftが重要
GitHub.icon https://github.com/CraneStation/cranelift
AheadTimeだけでなくRuntimeコンパイラでもある
IR
https://ja.wikipedia.org/wiki/中間表現
veritier => preopt => legalizer => postopt => register allocator => branch relaxer
pre-optimizeで分岐のシンプル化など
legalizerでネイティブマシンコードが生成
post-optimizeで特定のアーキテクチャ向けの最適化、複数のwasmロードなど
パフォーマンスのためにはlucetc(コンパイラ)とランタイムの密接な連携が大事。Artifactの中には実行コード以外にもメタデータが含まれる
インスタンス
metadata
globals
liner memory
guest stack
signal stack
Lucet's performance and lifecycle
WebAssemblyが50マイクロ秒以下で起動する「Lucet」。コンパイラとランタイムをFastlyがオープンソースで公開 - Publickey
安全性と速度を兼ねたプロダクトを目指している
Terrarium
https://wasm.fastlylabs.com/
Lucet runtime は先にメモリ確保しておいてコンテキストの切り替えだけアセンブリでやるので早い(50ms)
LLVM IRはwasmのユースケース(ゲームとか)であったファイルサイズを小さくするという目的にあってなかった
エッジコンピューティングランタイムを安全かつ高速に提供したいと考えている