Transcript ppt 報告
Cells : A Virtual Mobile
Smartphone Architecture
2012-11-10
謝政宏
大綱
介紹
智慧型手機趨勢
虛擬機
Cells : 智慧型手機虛擬化架構
前景 / 背景虛擬機的使用模型
Cells的系統架構
概觀
內核級的設備虛擬化
使用者級的設備虛擬化
擴展性與安全性
電源管理
概觀
畫面緩衝的預先暫停
喚醒鎖
電話功能
RIL Proxy
多個電話號碼
網路功能
圖型顯示
Hsieh, Cheng Hung
畫面緩衝
圖形處理器
2
1. 介紹 (1/3)
智慧型手機趨勢
使用者日常計算需求的首選平台,正在從傳統的桌上型和筆
記型電腦移向移動智慧型手機和平板設備[4]。
Hsieh, Cheng Hung
下載新軟體的容易性會對使用者造成風險,像是惡意軟體可以很容
易地存取敏感資料與破壞風險,甚至將其洩露給第三者[35]。
基於這個原因,給予員工在工作使用的智慧型手機經常被鎖上,導
致許多使用者需要攜帶單獨的工作和個人電話。
應用程序開發人員也會帶著其他手機做為開發用途,以避免不正常
行為的應用程序破壞他們的主要電話。
當小孩玩父母的智慧型手機,而造成意料之外的通電或無意的應用
程式購買費用時,父母們通常會希望他們能有更多的手機。
3
1. 介紹 (2/3)
虛擬機
雖然虛擬機可用於桌上型和服務器計算機,但將這些硬體虛
擬化技術應用到智慧型手機,仍有幾個重要的缺點。
Hsieh, Cheng Hung
1) 智慧型手機有著更多資源限制,在虛擬機上運行整個額外作業系
統和使用者空間環境,會導致大量成本與可運行實例數量的限制。
2) 相較於桌上型電腦,在智慧型手機系統中回應緩慢是難以接受的,
因為智能手機通常僅用於短短幾分鐘甚至幾秒鐘的時間。
3) 現有的方法無法提供有效的機制,使得應用程序可以直接充分的
利用虛擬機中的這些硬體設備功能,例如GPS、數位相機和GPU。
4
1. 介紹 (3/3)
Cells : 智慧型手機虛擬化架構
我們呈現了Cells,一個新的輕量級的虛擬化架構,允許在相
同的高效能智慧型手機上同時運行多個虛擬手機(VPS)。
Hsieh, Cheng Hung
Cells不需要運行多個作業系統實例。採用輕量級作業系統虛擬化來
提供虛擬名稱空間,使得多個虛擬機可以在單一作業系統實例上運
行。
Cells可以隔離虛擬機,並確保在某虛擬機上運行的錯誤或惡意的應
用程序不會對其他虛擬機產生不利的影響。
Cells提供了一種新的檔案系統配置,以結合的方式來最大限度地分
享虛擬機間的共同唯讀程式碼和資料,並最小限度地來消耗記憶體。
Cells利用智慧型手機上小螢幕的優點,同時只顯示一個應用程序,
介紹了一種使用模型,包含一個目前顯示中的前景虛擬機以及同時
未顯示的多個背景虛擬機。
5
2. 前景 / 背景虛擬機的使用模型 (1/2)
Cells能在單一硬體上運行多個虛擬機。
每個虛擬機運行一個標準的Android環境並且能夠執行一般使用者可
以在硬體上做的其他的一切行為。
每個虛擬機和其他虛擬機之間是完全隔離的,並且不能查看、篡改、
或以其他的方式存取任何其它的虛擬機。
在於有限的螢幕尺寸以及智慧型手機的使用方式,Cells只允
許一個可以隨時顯示的前景虛擬機。
Hsieh, Cheng Hung
背景虛擬機仍然在後台系統上運行,並能夠接收系統事件和執行任
務,但不顯示內容到螢幕上。
藉由從背景虛擬機中挑選一個虛擬機做為為前景虛擬機,使用者可
以很輕易地在虛擬機之間做切換。
6
2. 前景 / 背景虛擬機的使用模型 (2/2)
對於每個設備,虛擬機可以被配置成無存取權限、共享存取、
或獨占存取。
Hsieh, Cheng Hung
1) 無存取權限代表在虛擬機上運行的應用程序無法在任意時刻存取
指定的設備。
例如,即使任何使用者允許應用程序跟蹤位置的請求,沒有存取
GPS感應器權限的虛擬機將永遠無法追蹤位置。
2) 共享存取意思是,當一個給定的虛擬機在前景運行時,其他背景
的虛擬機也可以同時存取設備。
例如,前景虛擬機在存取有共享存取權限的音訊設備時,可以允
許背景虛擬機也共享存取用來播放音樂。
3) 獨占存取意味著,當一個給定的虛擬機在前景運行時,其他背景
虛擬機將不被允許存取該設備。
例如,前景虛擬機獨佔存取麥克風時,就不會允許背景虛擬機來
使用,以避免背景虛擬機執行的應用程序竊聽或洩露信息。
7
3. Cells的系統架構 (1/4)
概觀 (1/3)
圖1提供了Cells
系統架構概觀。
Cells是使用
Android系統,
因為我們的原型
是基於此的。
Hsieh, Cheng Hung
每個虛擬機運行
原生Android的
使用者名稱環境。
Cells利用輕量
級的作業系統虛
擬化[3,23]來
將虛擬機間彼此
隔離。
8
3. Cells的系統架構 (1/4)
概觀 (2/3)
Cells對於所有的虛擬機使用單一的作業系統內核,來虛擬化
標示、內核的介面和硬體資源等。
每個虛擬機擁有私有的虛擬名稱空間,使得虛擬機們得以在各自的
名稱空間同時運行相同作業系統資源,並且互相隔離但衝突。
虛擬化機制在過去主要是用在設備比較少的伺服器環境上,
例如網路和儲存裝置這種已經可以被商用作業系統虛擬化。
Hsieh, Cheng Hung
對於Android而言,至少需要充分的支持表1中所列出的設備,這些
輔助設備必須滿足三個條件:
1) 支持獨占或虛擬機的共享存取。
2) 永不在虛擬機間洩露敏感信息。
3) 防止惡意應用程序干擾其他正在使用設備的虛擬機。
9
3. Cells的系統架構 (1/4)
概觀 (3/3)
Cells可以滿足這三項要求,藉由整合新穎的內核級和使用者
級的設備虛擬化方法,以提供一個完整的虛擬智慧型手機作
業系統環境。
Hsieh, Cheng Hung
內核級機制提供了透明性
和效能。
使用者級的機制則是在使
用者空間環境提供了介面
來進行虛擬化,用來提供
可攜性和透明性。
10
3. Cells的系統架構 (2/4)
3.1 內核級的設備虛擬化 (1/2)
Cells引入了新的內核機制,即設備的名稱空間,來提供隔離
和有效的硬體資源多工方式,並且對應用程序是透明的。
圖1顯示了如何在設備的名稱空間內實現整體Cells架構。
設備名稱空間被設計成可以藉由單獨的設備驅動程序或內核
子系統來標記的資料結構,並註冊回調函數。
Hsieh, Cheng Hung
當設備名稱空間的狀態發生改變時,回調函數會被呼叫。每個虛擬
機採用了獨特的設備名稱空間來與設備互動。
Cells利用其前景/背景虛擬機的使用模型來註冊回調函數,用來在前
景虛擬機與背景虛擬機狀態交換時做呼叫使用。
11
3. Cells的系統架構 (2/4)
3.1 內核級的設備虛擬化 (2/2)
Cells虛擬化了現有的內核介面,並基於三種方法來實現設備
的名稱空間功能。
1) 為了虛擬設備而使用的新設備驅動程序,來創建設備驅動包裝。
2) 修改裝置子系統來得知裝置的名稱空間。
例如,為了使輸入子系統來使用設備名稱空間,Cells只需要修改事件處
理程序,因此對於每一個等待輸入事件的程序,事件處理程序首先會檢
查相對應的設備名稱空間是否在前景。
如果不在,則該事件不會引發該特定程序。實現不需要修改設備驅動程
序或輸入核心因此很簡單。
3) 修改設備驅動程序,來得知設備的名稱空間。
Hsieh, Cheng Hung
例如,包裝設備然後使應用程序與實際設備驅動得以進行多工存取與通
信。
例如,Android包含一些不屬於現有內核子系統的自定義偽驅動程序,如
Binder IPC機制。
藉由修改Binder driver,不僅可以允許Binder資料結構來存取一個程序
間全域的列表,也可以存取設備名稱空間的隔離列表,以及只允許有著
相同名稱空間的程序之間才可以通信。
12
3. Cells的系統架構 (3/4)
3.2 使用者級的設備虛擬化
圖1顯示了虛擬機、內核級設備的名稱空間、使用者級設備
中所包含代理的根命名空間之間的關係。
Hsieh, Cheng Hung
根命名空間被認為是可信任計算基礎的一部分,並且可完全存取整
個檔案系統。
初始化環境啟動一個自定義的程序,CellD,用來管理啟動以及在前
景背景運行的虛擬機之間的交換。
CellD還負責協調使用者空間虛擬化機制,例如電話和無線網絡
的配置。
為了啟動一台新虛擬機,CellD安裝了虛擬機檔案系統,並複製
自己形成一個獨立名稱空間的新程序,然後啟動虛擬機的初始化
程序來開始啟動使用者空間環境。
13
3. Cells的系統架構 (4/4)
3.3 擴展性與安全性 (1/2)
Cells使用三種可擴展性技術,使得多個虛擬機運行於相同的
Android環境下,並共享程式碼和減少記憶體的使用。
Hsieh, Cheng Hung
1) 虛擬機之間共享相同唯讀的基本檔案系統。
檔案系統物件(即文件和目錄)對於可寫層總是可見的,而唯讀層
的物件只有在其他層沒有相對應的物件存在時才是可見的。
2) 當一個新的虛擬機啟動時,Cells會短時間的啟用Linux Kernel
Samepage Merging (KSM)來減少記憶體使用量。
藉由找出使用者空間中有著相同內容的匿名記憶體頁面,然後將
一個副本安排成虛擬機之間共享[30]。
3) Cells利用Android low memory killer來增加虛擬機的總數。
Android low memory killer會刪除背景和不活動但消耗了大量記
憶體的程序。
關鍵系統程序從來不會被選為刪除,如果使用者想要運行已經被
刪除的背景服務程序,只需要簡單地重新啟動該程序。
14
3. Cells的系統架構 (4/4)
3.3 擴展性與安全性 (2/2)
Cells使用四項技術來將所有的虛擬機從根檔案系統與彼此之
間做隔離,從而確保系統和個別虛擬機的資料不會被惡意讀
取或寫入。
1) 通過UID名稱空間虛擬化的用戶憑據,用來將超級使用者的根名稱
空間中與其它虛擬機的超級使用者做隔離。
2) 內核級別的設備名稱空間隔離了設備的存取和相關的數據;沒有
資料或設備狀態可以在虛擬機的設備空間之外做存取。
3) 掛載名稱空間為每一個虛擬機提供了一個獨特的且獨立的檔案系
統觀點;即沒有屬於某個虛擬機的檔案會被其他虛擬機存取。
4) CellD移除了在虛擬機內部建立設備節點的能力,防止程序獲得直
接進入到Linux設備或外部環境,例如藉由重新安裝設備。
這些隔離技術確保Cells系統中的每一個虛擬機資料,並獨立
於其他虛擬機資料。
Hsieh, Cheng Hung
15
4. 圖型顯示 (1/2)
4.1 畫面緩衝 (1/2)
Cells利用內核級的設備名稱空間和其前景/背景的使用模型,
來多工一個新的framebuffer設備驅動程序,mux_fb。
在Linux中,基本的framebuffer的使用模式有以下三種存取
類型:mmaps、standard control ioctls、custom ioctls。
Hsieh, Cheng Hung
1) 當一個程序mmaps一個開放式frame buffer設備文件時,驅動程序
會將其相關的螢幕記憶體映射到程序位址空間,並允許該程序直接
顯示在螢幕上。
2) 該程序可以控制,並藉由Linux framebuffer介面所定義的standard
ioctls來配置framebuffer硬體狀態,例如可以用來改畫素的格式。
3) 每個framebuffer設備也可以定義custom ioctls,用於操作加速繪
圖或圖像呈現等操作。
16
4. 圖型顯示 (1/2)
4.1 畫面緩衝 (2/2)
當從前景虛擬機切換螢幕到背景虛擬機時,需要在其它
framebuffer操作之前完成四個步驟:
Hsieh, Cheng Hung
1) 螢幕記憶體重新映射:
當虛擬機上運行程序被移到背景時,它們的虛擬位址會被重新映
射到系統的後備記憶體,而將成為前景虛擬機的運行程序的虛擬
位址則是會被重新映射到實體螢幕記憶體。
2) 螢幕記憶體的深層複製:
藉由複製螢幕記憶體的內容到舊前景虛擬機的backing buffer,以
及複製新前景虛擬機的backing buffer的內容到螢幕記憶體。
3) 硬體狀態同步:
通過保存當前的硬體狀態到舊前景虛擬機的虛擬狀態,然後設置
目前硬體狀態到新前景虛擬機的虛擬硬體狀態。
4) GPU協調。
17
4. 圖型顯示 (2/2)
4.2 圖形處理器
Cells通過利用GPU(圖形處理器)的獨立圖形上下文與螢幕記
憶體framebuffer虛擬化技術來虛擬化GPU。
每個虛擬機可以直接存取GPU設備。因為每個程序在其自己的上下
文中使用GPU執行指令,程序已經彼此分離所以沒必要進一步做虛
擬機GPU隔離。
Cells利用其前景/背景的使用模型,提供類似framebuffer螢
幕記憶體重新映射的虛擬化解決方案。
Hsieh, Cheng Hung
前景虛擬機使用GPU直接呈現到螢幕記憶體,但背景虛擬機使用
GPU時則是會呈現到他們各自的backing buffers。
當前景虛擬機改變時,GPU的驅動程序將找尋所有被映射到實體螢
幕的記憶體,以及背景虛擬機在系統記憶體中的backing buffer的所
有GPU位址。
然後,它必須將這些GPU位址重新映射到新的backing buffer和實體
螢幕的記憶體。
18
5. 電源管理 (1/3)
概觀
為了提供Cell使用者與非虛擬化手機相同的功率管理體驗,
我們採用了兩個簡單的虛擬化原則:
1) 背景虛擬機不應該能夠使設備進入低功耗模式。
2) 背景虛擬機不應該阻止前景虛擬機將設備進入低功耗模式。
Android介紹了三個介面,試圖通過非常積極的電源管理來
延長行動設備的電池壽命:
Hsieh, Cheng Hung
early suspend、fbearlysuspend、wake locks。
early suspend:暫停子系統是一個有順序的回饋介面,允許驅動
程式在設備暫停之前、恢復後收到通知。
19
5. 電源管理 (2/3)
5.1 畫面緩衝的預先暫停
fbearlysuspend驅動程序允許使用者空間在螢幕關閉時,阻
礙所有使用顯示器的程序,並在顯示器啟動後重新刷新螢幕
Cells藉由使它的命名空間可感知,和利用內核級設備的名稱
空間和前景/背景的使用模型來虛擬化fbearlysuspend。
Android利用兩個sysfs files來實現這兩個功能性wait_for_fb_sleep和
wait_for_fb_wake。
對於前景虛擬機,讀取函式就和非虛擬化系統一樣。
當背景虛擬機的讀取時,總是回報裝置正在睡眠。
這將迫使背景虛擬機暫停繪製或呈現圖像,藉由減少使用硬
體繪圖資源的程序數量,來降低了整個系統的負載,並提高
前景虛擬機圖形產量,以確保硬體的存取過程是獨占的。
Hsieh, Cheng Hung
20
5. 電源管理 (3/3)
5.2 喚醒鎖 (1/2)
喚醒鎖是一種特殊的作業系統內核的引用計數,它有兩種狀
態:啟用和未啟用。
Android系統在所有的喚醒鎖未啟用前,將無法進入暫停或低功耗模
式。當所有的鎖是未啟用時,暫停計時器將開始計時。
如果沒有鎖干預完成,則設備將會關閉電源。
Cells利用內核級的設備名稱空間和前景/背景使用模型,來
同時維持內核和使用者空間的喚醒鎖介面,基於三個假設。
Hsieh, Cheng Hung
1) 在虛擬化技術之前,所有的上鎖和解鎖配置受信任於根名稱空間
是正確且適當的。
2) 我們信任內核和其驅動程序;無條件執行從中斷上下文呼叫的上
鎖或解鎖的操作。
3) 前景虛擬機保持完整的硬體控制。
21
5. 電源管理 (3/3)
5.2 喚醒鎖 (2/2)
電源管理操作的初始化是基於前景虛擬機相關的鎖狀態解決
方案包括下面的一些規則:
Hsieh, Cheng Hung
1) 當喚醒鎖處於鎖定狀態時,一個與鎖相關的名稱空間“\token”會
鎖住相對應的內容。
2) 當喚醒鎖被使用者上下文解鎖時,則刪除掉相關的名稱空間token。
3) 基於第二個假設,當喚醒鎖從中斷上下文或根命名空間解鎖時,
則會刪除所有的鎖tokens。
4) 在使用者上下文上鎖或解鎖之後,僅基於當前設備名稱空間中獲
取的鎖來調整任何suspend timeout值。
5) 在根名稱空間上鎖或解鎖之後,基於前景虛擬機的設備名稱空間
來調整suspend timeout。
6) 當前景虛擬機改變時,基於新的名稱空間中所獲得的鎖來重置
suspend timeout。
22
6. 電話功能 (1/2)
6.1 RIL Proxy (1/4)
圖2的左側顯示出的標準的Android電話系統。
RilD與函式庫是動態連結,並由內核驅動程序和無線基帶系
統的手機硬體廠商所提供。
手機應用程式、函式庫和服務,都是經由Binder IPC與Radio
Interface Layer (RIL) Daemon (RilD)來通信的。
從使用者級的RIL廠商函式庫到實體獨立的硬體基帶處理器,整個無
線基帶系統是專用且封閉源始碼的。
由於這些限制,Cells利用我們的使用者裝置名稱空間代理來
虛擬化手機,做為與黑盒radio stack透明工作的解決方案。
Hsieh, Cheng Hung
每個虛擬機有標準Android手機Java函式庫和服務,並有自己的stock
RilD,但無法直接與硬體廠商所提供的RIL函式庫直接做RilD溝通,
Cells為每個虛擬機提供了它自己的代理RIL函式庫。
代理RIL函式庫經由RilD加載到每個虛擬機中,並連接到運行於根名
稱空間的CellD。然後CellD與硬體廠商函式庫溝通,來使用專有的
radio stack。
23
6. 電話功能 (1/2)
6.1 RIL Proxy (2/4)
圖2的右側顯示了
Cells的Android電話
系統,有三個特點。
Hsieh, Cheng Hung
1) 不需要硬體廠商的
支持,因為它把radio
stack當作一個黑盒。
2) 它能工作在原始
Android環境下,因
為Android沒有提供
自己的RIL函式庫,
而是依賴它所使用的
系統。
3) 它的運行在一個良好定義的介面,使我們能夠理解RilD和所用的
RIL函式庫之間是如何通信。
24
6. 電話功能 (1/2)
6.1 RIL Proxy (3/4)
RIL代理需要支援RIL定義的兩種功能的函式呼叫,包括從
RilD到RIL函式庫的solicited calls,和從RIL函式庫到RilD的
unsolicited calls。
Hsieh, Cheng Hung
實現RIL代理的主要複雜性,是在Android上假設RIL廠商函式庫是正
常讀取RilD程序,使得資料可以從RIL函式庫傳到RilD上。
在Cells中,RIL廠商函式庫會被加載到CellD程序而不是RilD程序中,
RIL代理會傳遞參數到Unix Domain socket,因此所有資料都必須在
兩邊徹底的進行封裝和解封裝。
RIL代理的基本功能是傳遞
從虛擬機到廠商RIL函式庫
的請求,然後將廠商RIL函
式庫的unsolicited calls轉
發到虛擬機中。
25
6. 電話功能 (1/2)
6.1 RIL Proxy (4/4)
需要filtering或特殊處理的命令被列在表2中,並可以將他們
歸類為前景虛擬機、初始化、廣播信息、和電話呼叫相關。
Hsieh, Cheng Hung
Dial Request命令表示向外撥出電話。
Set Screen State用於抑制某些通知,例如信號強度。
Set Radio State用於設置無線電波的狀態是打開或關閉。
Set Screen State會從背景虛擬機中過濾掉,僅通過改變CellD的個
別虛擬機變數,來抑制與背景虛擬機相應的通知。
SIM I/O命令是用來與SIM卡直接溝通,並且在radio初始化和查詢
SIM卡信息時被呼叫。
Signal Strength是由廠商函式庫發出的當前信號強度通知。
來電時會發送一個Call State Changed通知,以及數個Call Ring通知
直到電話被掛起。
當虛擬發出Get Current Calls要求時,CellD會攔截從廠商函式庫返
回的資料,來獲得所有來電和啟用中的通話清單。
26
6. 電話功能 (2/2)
6.2 多個電話號碼
雖然一些智慧型手機支持多個SIM卡,使得可以直接支持多
個電話號碼,但大多數手機並不提供此功能。
我們提出一個替代系統來提供每個虛擬機有不同的電話號碼,做法
是根據將VoIP(允許標準語音網路的通話)與標準Android applications
做配對,但有不同的電話號碼。
Cells VoIP的服務包括註冊一些訂閱號碼的VoIP服務器,和
將載體所提供的號碼與使用者SIM卡做配對。
Hsieh, Cheng Hung
VoIP服務接收來電,並將它們轉發到使用者實際使用的標準cellular
voice network電話號碼,來傳遞來電者ID給使用者的手機上,並附
加一個數字用來指示應該傳遞通話的虛擬機。
當CellD收到來電列表時,它會檢查呼叫者ID的最後一個數字,然後
根據數字選擇虛擬機。
CellD分離出附加的數字,然後轉發通話訊息給接收的虛擬機,使得
虛擬機得以正確的顯示來電者的IDs。如果該虛擬機不可用,則VoIP
服務會指示來電到服務器提供的語音信箱。
27
7. 網路功能 (1/2)
Cells利用以前的內核級別的研究[27、28]來虛擬化核心網絡
資源,如IP地址、網絡轉接器、路由表和port號碼。
即時網絡設備像是WLAN或cellular data連接是不能被虛擬機所見。
相反的,虛擬Ethernet pair是設置用來從一台虛擬機的根命名空間到
另一台虛擬機的根命名空間。
然後內核會在啟用的公用介面(WLAN或cellular data)與Ethernet pair
的虛擬機端,配置執行Network Address Translation (NAT)。
然後每個虛擬機可以自由綁定到任何socket位址和port,而不需要與
其他虛擬機產生衝突。
Cells充分利用了使用者級設備名稱空間代理和前景/背景模
型來消除從實際的網絡介面的無線配置
Hsieh, Cheng Hung
在每個虛擬機中,配置代理的引入取代了使用者級別的的WLAN配置
函式庫和RIL函式庫。
配置代理與運行在根命名空間的CellD互相溝通,並與使用者級函式
庫溝通來配置WLAN或cellular data連接。
28
7. 網路功能 (2/2)
為了虛擬化Wi-Fi配置管理,Cells取代了在每台虛擬機所使
用的wpa_supplicant,透過輕薄的Wi-Fi代理。
使用者層級的函式庫呼叫wpa_supplicant來支援大量的裝置,通常用
於發出各種對於設備是唯一的ioctls和netlink socket選項。
Wi-Fi代理與在根命名空間運行的CellD通信,是獨立虛擬機與
wpa_supplicant通信的方法。
對於cellular data連接管理虛擬化,Cells會替換RIL廠商函式
庫,這也是負責制訂cellular data連接。
Hsieh, Cheng Hung
對於Wi-Fi,CellD確保背景虛擬機不可以干預前景虛擬機的操作。
Cellular data是獨立於Wi-Fi配置的,而且虛擬機也可以完全配置成
不允許資料連接。
29