2012年6月18日 星期一

Application Checkpointing

週末拜讀了 JServ 寫的一篇關於 porting DMTCP 到 Android 上的心得, 讓我有了一個非常好的契機去認識一門之前所不了解的技術 - Application Checkpointing.

Application Checkpointing 中的 checkpoint 概念可以想像是電動裡面的那種 checkpoint, 當玩家玩到某個進度, 或者經過某個地方時, 會自動觸發遊戲進行記錄. 當玩家過了 checkpoint 之後死亡或發生遊戲失敗, 遊戲會讓玩家在最近的一次 checkpoint 重生再次進行遊戲. Application Checkpointing 也是相同的概念, 只不過對象是 software application. Checkpoint 背後的運作原理則是先將 process 暫停, 隨即將所有運行時期的狀態, 諸如 Heap, Stack, Thread context, I/O buffer 之類的資訊全部鏡像到磁碟上. 有點類似系統休眠時發生的事, 不過粒度縮小至單一 process.

JServ 文章中提到的 DMTCP (Distributed Multi-Threaded CheckPointing) 則是一個 Linux 下的 Application Checkpoint 機制實現. 他和 0xlab 的夥伴們正嘗試把 DMTCP 整套機制 porting 到 Android 環境中, 企圖利用從 checkpoint 上再生的功能加速 Android 的開機流程.

DMTCP 的大致運作原理和使用方式都有涵蓋在該文中由 0x1ab 無私奉獻出來的投影片之內, 是非常好的 DMTCP 簡介材料. 這邊總結一下要點:

使用面:
  • DMTCP 目前只運作在 Linux 之下, 需搭配 2.6.9 之後的 Linux Kernel 版本
  • DMTCP 純粹運行在 user mode, 不需要任何 kernel patch 亦不需要 superuser 權限
  • 任何程式不需要進行任何修改, 甚至不用重新編譯, 就能被 DMTCP 所管控
  • DMTCP 授權方式為 LGPL
  • DMTCP 在使用上主要會集中在四個 commandline tools, 具體使用方式可參閱這裡的 "Example Usage"

目前已知的使用限制為:
  • DMTCP 會利用 SIGUSR2 這個 signal 在 DMTCP coordinator 和受控管的程式間做溝通, 若是程式也有利用到這個 signal 則會有衝突.
  • DMTCP 目前只能控管與 C runtime 動態鍊結的程式.

沒有留言:

張貼留言