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