Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Firecracker のソースを読んでみた
Search
Shin-ya Koga
August 07, 2025
1
190
Firecracker のソースを読んでみた
2025/08/07(木)に開催された「クラメソさっぽろIT勉強会 (仮) #11 LT 花火大会」での LT で使ったスライド。
Shin-ya Koga
August 07, 2025
Tweet
Share
More Decks by Shin-ya Koga
See All by Shin-ya Koga
2025-02-18.slide_revised
shkoga
0
110
2024-09-27 リファクタリング勉強会
shkoga
0
100
仮想化って何だろう
shkoga
0
210
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
Become a Pro
speakerdeck
PRO
31
5.7k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
31
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
870
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Git: the NoSQL Database
bkeepers
PRO
432
66k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
30
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.7k
Transcript
Firecracker のソースを読んでみた 古賀信哉 株式会社アットマークテクノ ※LT のスライドに加筆した版
なんで Firecracker? この頃 AWS Lambda を使っているから Lambda の仕組みに興味が湧いたから extension の実装を試して気づいたこと
Rust で実装されている VMM だから 「カーネルランド Rust 勉強会」のネタ探し
AWS Lambda と Firecracker AWS Lambda の実行環境 関数/ハンドラ Lambda ランタイム
言語ランタイム(Node.js, Python, Java, .NET, Ruby) OS (Amazon Linux): ルートファイルシステム OS (Amazon Linux): カーネル + ユーザーランド ??? 仮想サーバー(EC2 Bare Metal) 物理サーバー AWS がメンテナンス/責任を持つ コンテナイメージ 実行時にコンテナ内に 展開される
AWS Lambda と Firecracker AWS Lambda の実行環境 関数/ハンドラ Lambda ランタイム
言語ランタイム(Node.js, Python, Java, .NET, Ruby) OS (Amazon Linux): ルートファイルシステム OS (Amazon Linux): カーネル + ユーザーランド Firecracker (MicroVM + VMM) ?? 仮想サーバー(EC2 Bare Metal) 物理サーバー AWS がメンテナンス/責任を持つ コンテナイメージ
AWS Lambda と Firecracker AWS Lambda の実行環境 関数/ハンドラ Lambda ランタイム
言語ランタイム(Node.js, Python, Java, .NET, Ruby) OS (Amazon Linux): ルートファイルシステム OS (Amazon Linux): カーネル + ユーザーランド Firecracker (MicroVM + VMM) 仮想サーバー(EC2 Bare Metal) 物理サーバー AWS がメンテナンス/責任を持つ コンテナイメージ N:1 1:1
AWS Lambda と Firecracker AWS Lambda の実行環境 関数/ハンドラ Lambda ランタイム
言語ランタイム(Node.js, Python, Java, .NET, Ruby) OS (Amazon Linux): ルートファイルシステム OS (Amazon Linux): カーネル + ユーザーランド Firecracker (MicroVM + VMM) 仮想サーバー(EC2 Bare Metal) 物理サーバー AWS がメンテナンス/責任を持つ コンテナイメージ N:1 1:1
AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない
しばらく経つと自動解放 Lambda サービスがランタイムを破棄
AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない
しばらく経つと自動解放 Lambda サービスがランタイムを破棄 関数/ハンドラとは別のプロセス (extension) を作って動かしても止まる!
AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない
しばらく経つと自動解放 Lambda サービスがランタイムを破棄 関数/ハンドラとは別のプロセス (extension) を作って動かしても止まる! “pause” なので、/tmp のファイルや、メモリ内容(: 大域変数)が残る。
AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない
しばらく経つと自動解放 Lambda サービスがランタイムを破棄 関数/ハンドラとは別のプロセス (extension) を作って動かしても止まる! “pause” なので、/tmp のファイルや、メモリ内容(: 大域変数)が残る。 次のリクエストでキャッシュとして利用することも可能! (※ランタイムが破棄されて新たに生成されるまでの間)
AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない
しばらく経つと自動解放 Lambda サービスがランタイムを破棄 関数/ハンドラとは別のプロセス (extension) を作って動かしても止まる! “pause” なので、/tmp のファイルや、メモリ内容(: 大域変数)が残る。 次のリクエストでキャッシュとして利用することも可能! (※ランタイムが破棄されて新たに生成されるまでの間) ただし、リクエストの実行中に別のリクエストが届くと、自動的に 新たなランタイムが生成・起動されて同時実行される。そのことは 考慮すべし。 ※DynamoDB など、他サービス上の永続データをキャッシュする 場合は、分散並列環境であることを正しく意識しなければならない。
Firecracker のソース https://github.com/firecracker-microvm/firecracker ソースツリー
Firecracker のソース https://github.com/firecracker-microvm/firecracker ソースツリー MicroVM の pause/resume の動きは、 この二つが責務を担っている。
Firecracker のソース 主要な登場人物/エンティティ Vmm (vmm/src/lib.rs) Vm / ArchVm VcpuHandle /
Vcpu Kvm vmm/src/vstate/ と vmm/src/arch/{aarch64,x86_64}/ ApiServer (firecracker/src/api_server/mod.rs) jailer
Firecracker のソース 主要な登場人物/エンティティ Vmm (vmm/src/lib.rs) Vm / ArchVm VcpuHandle /
Vcpu Kvm vmm/src/vstate/ と vmm/src/arch/{aarch64,x86_64}/ ApiServer (firecracker/src/api_server/mod.rs) jailer Virtual Machin Monitor としての Firecracker の メインモジュール MicroVM(仮想マシン)と仮想 CPU KVM に対するインタフェース Lambda サービスから制御するための REST API を提供(?) pivot_root による隔離用
Firecracker のソース 主な動きに対するソース src/firecracker/src/api_server/mod.rs src/vmm/src/rpc_interface.rs src/vmm/src/lib.rs (Vmm) src/vmm/src/vstate/vcpu.rs (VcpuHandle) src/vmm/src/utils/sm.rs
(StateMachine) vsock (AF_VSOCK) なソケットで通信 Vmm は、ApiServer から Vm の pause/resume リクエストを受け取り、 MicroVM に割り当てている VCPU(個数は構成次第)を制御する。
Firecracker のソース 主な動きに対するソース src/firecracker/src/api_server/mod.rs src/vmm/src/rpc_interface.rs src/vmm/src/lib.rs (Vmm) src/vmm/src/vstate/vcpu.rs (VcpuHandle) src/vmm/src/utils/sm.rs
(StateMachine) vsock (AF_VSOCK) なソケットで通信 Vmm は、ApiServer から Vm の pause/resume リクエストを受け取り、 MicroVM に割り当てている VCPU(個数は構成次第)を制御する。 ※UNIX ドメインソケット上に vsock の多重チャネルを構築する 仕組みが実装されている。
ソースを眺めた感想 「エッジ側でも使えないかな」 「そこそこ大きなソースは参考になる」 関連して調べることが出てきて面白い
自己紹介 現在の会社(2021/04~) 株式会社アットマークテクノ 「めんどくさいところ」担当 プライベートの活動 GitHub : https://github.com/Shin-yaKoga SlideShare :
https://www.slideshare.net/ShinyaKoga X : @shkoga ET ロボコン北海道地区大会実行委員 最近: IoT デバイス監視・運用サービス(Armadillo Twin) 引っ越し先: SpeakerDeck