Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Firecracker のソースを読んでみた

Avatar for Shin-ya Koga Shin-ya Koga
August 07, 2025
100

Firecracker のソースを読んでみた

2025/08/07(木)に開催された「クラメソさっぽろIT勉強会 (仮) #11 LT 花火大会」での LT で使ったスライド。

Avatar for Shin-ya Koga

Shin-ya Koga

August 07, 2025
Tweet

Transcript

  1. AWS Lambda と Firecracker AWS Lambda の実行環境 関数/ハンドラ Lambda ランタイム

    言語ランタイム(Node.js, Python, Java, .NET, Ruby) OS (Amazon Linux): ルートファイルシステム OS (Amazon Linux): カーネル + ユーザーランド ??? 仮想サーバー(EC2 Bare Metal) 物理サーバー AWS がメンテナンス/責任を持つ コンテナイメージ 実行時にコンテナ内に 展開される
  2. 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 がメンテナンス/責任を持つ コンテナイメージ
  3. 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
  4. 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
  5. AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない

    しばらく経つと自動解放 Lambda サービスがランタイムを破棄 関数/ハンドラとは別のプロセス (extension) を作って動かしても止まる! “pause” なので、/tmp のファイルや、メモリ内容(: 大域変数)が残る。
  6. AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない

    しばらく経つと自動解放 Lambda サービスがランタイムを破棄 関数/ハンドラとは別のプロセス (extension) を作って動かしても止まる! “pause” なので、/tmp のファイルや、メモリ内容(: 大域変数)が残る。 次のリクエストでキャッシュとして利用することも可能! (※ランタイムが破棄されて新たに生成されるまでの間)
  7. AWS Lambda の動作モデル 外部からのリクエストが届くと起動 Lambda サービスがランタイムを生成・起動 既に起動済みのものがあれば再利用 リクエストを処理し終えると停止 スタンバイ状態:CPU を全く使わない

    しばらく経つと自動解放 Lambda サービスがランタイムを破棄 関数/ハンドラとは別のプロセス (extension) を作って動かしても止まる! “pause” なので、/tmp のファイルや、メモリ内容(: 大域変数)が残る。 次のリクエストでキャッシュとして利用することも可能! (※ランタイムが破棄されて新たに生成されるまでの間) ただし、リクエストの実行中に別のリクエストが届くと、自動的に 新たなランタイムが生成・起動されて同時実行される。そのことは 考慮すべし。 ※DynamoDB など、他サービス上の永続データをキャッシュする 場合は、分散並列環境であることを正しく意識しなければならない。
  8. 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
  9. 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 による隔離用
  10. 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(個数は構成次第)を制御する。
  11. 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 の多重チャネルを構築する 仕組みが実装されている。
  12. 自己紹介 現在の会社(2021/04~) 株式会社アットマークテクノ 「めんどくさいところ」担当 プライベートの活動 GitHub : https://github.com/Shin-yaKoga SlideShare :

    https://www.slideshare.net/ShinyaKoga X : @shkoga ET ロボコン北海道地区大会実行委員 最近: IoT デバイス監視・運用サービス(Armadillo Twin) 引っ越し先: SpeakerDeck