国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TWINE支持編譯為wasm應用運行設計

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-07-07 10:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

提要

本期推送是對ICDE 2021 中發表的論文《TWINE:An Embedded Trusted Runtime for WebAssembly》的解讀。WebAssembly是一種越來越流行的輕量級二進制指令格式。這篇論文描述了TWINE,這是一個WebAssembly trusted runtime,它能夠支持編譯為wasm的應用運行。TWINE提供了一個安全的軟件runtime(沙箱),它嵌入在TEE中;并且提供WASI interface,通過WASI來抽象底層環境。TWINE會動態地將WASI操作翻譯為等價的OS calls和SGX中的安全的庫。特別地,作者使用TWINE實現了一個安全、可信的SQLite版本,這是一個眾所周知的成熟的可嵌入數據庫。作者認為這樣一個受信任的數據庫將是構建許多大型應用程序服務的合理組件。評估表明,SQLite可以通過WebAssembly和現有的系統接口在SGX enclave內完全執行,平均性能開銷類似。額外的安全保證及其與標準WebAssembly的完全兼容性在很大程度上彌補了性能上的損失。

研究背景

可信代碼執行目前是分布式系統的主要挑戰之一。無論是云中的大型數據中心,還是瘦客戶機和物聯網設備上的網絡邊緣,其中存儲了許多的數據資產。這些數據是許多公司的關鍵資產。例如像Intel SGX、ARM TrustZone等等這些TEE環境(Trusted execution environment,可信執行環境)就可以通過特殊的硬件結構為代碼安全執行提供硬件支持,從而可以從外界環境中被保護出來,或者說隔離出來,這些外界環境包括操作系統和特權用戶。

然而,盡管涌現出了許多framework和runtime environment,為TEE編寫應用程序仍然是一項復雜的任務。開發人員通常必須使用定制的工具和api,而且僅支持少數的編程語言。所以,作者提出了支持對unmodified applications執行的trusted runtime,這個runtime作為一個virtual machine運行在TEE中,只需將application編譯為WebAssembly,因為Wasm是不限制語言的。因為Wasm自身的一些優點,這個trusted runtime具有執行速度快、通用性好(支持多種語言開發的application)、安全(沙箱環境)等優勢。

e6416576-fd88-11ec-ba43-dac502259ad0.png

圖1:研究背景示意圖

系統設計

作者設計的Trusted runtime是運行在TEE中的。Intel SGX 是在現代英特爾處理器中的一組處理器指令,程序員可以通過使用 SGX 創建內存的加密區域,稱為enclaves。通過enclave內部的指令對其中內存內容進行讀寫操作時會自動加密和解密。Enclave加密密鑰保存在處理器內部,沒有任何指令可以訪問這些密鑰,即使當運行高級硬件特權級別時,操作系統、虛擬機管理員也無法獲取。Enclave內的內存受到保護,不接受任何未經授權的訪問,甚至不接受具有物理訪問權限的機器管理員的訪問。

e65d1dac-fd88-11ec-ba43-dac502259ad0.png

圖2:SGX工作示意圖

對enclave中的內存訪問通過一個大塊的緩存來加速,這個cache memory被稱為enclave page cache(EPC)。EPC的大小是受限的,在最新的CPU中支持最大為256MB的EPC。處理器在 EPC 中保存所有 enclave page 的未加密副本,并且當 EPC 滿的時候采用分頁。并且硬件還為EPC中的所有enclave page維護加密hash表。enclave內部的指令可以訪問enclave外部的數據,但是調用enclave外部的指令需要一個特殊的out call指令(OCALL)。當調用OCALL時,CPU退出受保護的enclave,在外部執行代碼。相反,有一個enclave call(ECALL)指令來調用enclave內的代碼。OCALL和ECALL指令會比較慢,因為在enclave內部和外部之間切換上下文的代價很高(在最新的服務器級處理器中,高達13’100個CPU周期)。已有的工作已經證明,在enclave中的應用程序應該盡量避免這樣的調用,以減少性能損失。

作者提出了TWINE (Trusted Wasm in enclave),這是一個運行在TEE中的輕量級可嵌入Wasm虛擬機。圖3中描述了TWINE的workflow。它充當應用程序與底層TEE、OS和硬件之間的適配層。TWINE提供了嵌套在TEE中的安全軟件運行時(沙箱),支持WASI接口,并從應用程序中抽象出底層環境。

e66bf1c4-fd88-11ec-ba43-dac502259ad0.png

圖3:TWINE workflow

TWINE是一個適用于在TEE中運行Wasm應用程序的執行環境。它主要由兩個主要模塊構成: Wasm runtime 和 WASI接口。Wasm runtime 完全運行在TEE內部,作者使用的TEE是Intel SGX。作者通過利用TEE的保護來為運行Wasm application提供一個可信環境。WASI充當受信任和不受信任環境之間的橋梁,抽象出專用于與底層操作系統通信的機制。因此,WASI相當于由OCALLs組成的傳統SGX適配層。WASI能夠通過沙箱實現安全性。常規應用程序通常通過標準接口(例如POSIX)調用操作系統。WASI在Wasm操作系統調用和實際的操作系統接口之間增加了一層(薄薄的)控制層。因此,runtime環境可以自己限制各個Wasm程序所能做的事情,從而阻止Wasm代碼使用運行進程的用戶的全部權限。(例如,WASI實現可以將應用程序限制在文件系統的子樹中,這與chroot提供的功能類似。)在enclave中的代碼和數據被認為是可信的,在此之外的進程部分、操作系統和(任何hypervisor)都可能是敵對的、惡意的。enclave內部的內存只能從外部以加密的形式讀取。從外部寫入enclave會導致enclave終止。

e6887f56-fd88-11ec-ba43-dac502259ad0.png

圖4:TWINE 架構

通過WASI,能夠實現三重抽象:

(1)開發人員可以自由選擇編程語言,并通過compiler將它編譯為Wasm binaries。

這解除了SGX強加的限制,之前通常因為這個限制強制應用程序必須用C/C++編寫。

(2)將TEE從應用程序中抽象出來,只要TEE能夠解釋或執行Wasm (帶有WASI支持),應用程序就可以安全執行。

這為其他TEE技術打開了大門。

(3)WASI是與系統無關的,只要操作系統能夠提供WASI所需的等效API。

由于WASI模擬POSIX系統的系統調用,許多Unix變體都可以實現它。

e69b041e-fd88-11ec-ba43-dac502259ad0.png

圖5:WASI的三層抽象

作者選擇了一個已有的Wasm runtime project-WAMR來作為runtime,并修改了它的WASI接口。WAMR支持解釋器、JIT、AoT三種方式的Wasm binaries執行。但是考慮到速度的問題,native code執行起來比解釋器快。并且,解釋器環境相對runtime而言,占用內存更大,這對于邊緣計算又是很重要的。因此,作者放棄了WAMR中interpreter的方式。又因為JIT方式是運行時即時編譯,需要在一個enclave中嵌進來一個JIT compiler。所以就要在enclave中引入LLVM machinery,這需要移植代碼庫來編譯SGX的限制。所以最終作者采用了AOT的方式。

WAMR中原生的對WASI的實現,嚴重依賴于POSIX調用。POSIX在SGX enclave中不可用,因此WAMR作者編寫的WASI實現需要頻繁地跨越enclave的可信邊界,并使用OCALLs直接將大多數WASI函數路由到它們的POSIX等效函數。出于性能原因:大多數WASI調用將被簡單地轉換為OCALLs。其次,作者希望能夠利用其可信實現,例如英特爾保護的文件系統(IPFS)。因此,作者重構了WAMR的WASI實現,以保持其沙箱實施。

實驗評估

如圖6所示,作者使用 PolyBench/C benchmarks 來作為實驗的benchmark,展示了30個PolyBench/C (v4.2.1-beta)測試的結果。通過native執行時間來進行標準化,比較了WAMR for wasm和TWINE for wasm in TEE的執行時間,結果如圖所示。Wasm應用程序通常比本機應用程序慢,由于

(1)寄存器壓力增加

(2)更多的分支語句

(3)代碼大小增加等等

但是WAMR和TWINE之間的差距較小。

e6bcaac4-fd88-11ec-ba43-dac502259ad0.png

圖6:PolyBench/C benchmark的性能測試,標準化到native speed

SQLite是一個被廣泛使用的成熟的嵌入式數據庫。由于其便攜性(portability)和緊湊的尺寸(compact size),它非常適合SGX。并且SQLite能夠體現出性能密集型的操作和文件系統交互,所以作者也對它進行了評估。作者使用了SQLite自己的性能測試程序Speedtest1,運行了32個可用測試中的29個,覆蓋了大量場景。每個Speedtest1實驗都針對于數據庫的一個方面,(例如,使用多個關節進行選擇,更新索引記錄,等等)。測試由任意數量的SQL查詢組成,根據生成的負載可能會執行多次。圖7中顯示了測試的結果,以native execution為標準進行了標準化。(其中包括內存中配置的結果,以及使用WASI的持久化數據庫的結果。)作者在所有測試中觀察到,對于in-memory數據庫和in-file數據庫,WAMR相對于本地數據庫平均慢4.1x和3.7×。

在in-memory和in-file數據庫中,TWINE相對于WAMR的速度慢了1.7x和1.9x。

e6e97a2c-fd88-11ec-ba43-dac502259ad0.png

圖7:在SQLite Speedtest1 benchmark上的相對性能

為了更好地理解所觀察到的性能損失的來源,作者為常見的數據庫查詢設計了一套測試,包括插入、順序讀取和隨機讀取。根據對這三類操作的執行時間分析,得出以下結果:

(1)圖8a顯示了關于插入記錄的結果。

由于額外的文件加密,使用TWINE的持久數據庫的操作成本線性增加。

(SGX-LKL在插入順序元素方面有更優的方法,并遵循了TWINE的內存性能趨勢。)

(2)圖8b顯示了順序讀取所有記錄的執行時間。

作者在SGX內存訪問中發現了造成這種性能損失的根本原因。

(3)圖8c描述了隨機讀取的執行時間。

隨機讀取更加經常地觸發enclave分頁機制,文件內隨機讀取的例子突出了TWINE的優點,它提供了比SGX-LKL更快的性能,EPC(enclave page cache)限制之前為1.031×,之后為1.074×。在EPC限制以上的內存內插入也會有類似的性能提升,增益為1.035×。

e6ff4924-fd88-11ec-ba43-dac502259ad0.png

圖8:對SQLite的插入和讀取進行性能評估

結論

這篇論文設計并實現了TWINE以支持編譯為wasm的應用運行。TWINE提供了一個安全的軟件runtime(沙箱),它嵌入在TEE中;并且提供WASI interface,通過WASI來抽象底層環境。評估表明,SQLite可以通過WebAssembly和現有的系統接口在SGX enclave內完全執行,并且平均性能開銷類似。

原文標題:思辨|WebAssembly的嵌入式可信運行時

文章出處:【微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    9519

    瀏覽量

    157020
  • 操作系統
    +關注

    關注

    37

    文章

    7401

    瀏覽量

    129284
  • 數據中心
    +關注

    關注

    18

    文章

    5648

    瀏覽量

    75009
  • 應用程序
    +關注

    關注

    38

    文章

    3344

    瀏覽量

    60251

原文標題:思辨|WebAssembly的嵌入式可信運行時

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    簡單高效的鴻蒙編譯提速技巧

    在鴻蒙應用開發中編譯構建是開發者最頻繁的操作,每一次編譯提速都能顯著提升項目整體開發效率。本次分享幾個簡單卻高效的鴻蒙編譯提速技巧,從編譯配置、構建方式等維度進行優化,讓你的開發流程更
    的頭像 發表于 03-04 16:09 ?33次閱讀
    簡單高效的鴻蒙<b class='flag-5'>編譯</b>提速技巧

    rtsmart開啟C++特性支持后,工具鏈編譯內核不通過怎么解決?

    各位大佬好,本人在rtsmart項目中需要使用C++11特性,在menuconfig那里配置了支持C++特性后,使用7.3.0版本的arm-linux-musleabi編譯編譯內核時出現 錯誤
    發表于 09-29 07:49

    開啟POSIX支持后,編譯出錯的原因?怎么解決?

    使用MDK525編譯器:ARMCC V5.06,rtthread打開posix支持編譯報錯,提示
    發表于 09-24 06:03

    riscv virt64編譯后 ls無法運行怎么解決?

    用倉庫里的默認配置編譯qemu-virt64-riscv 生成后運行,顯示 [E/DBG] virtio-blk0 mount failed ls看不到文件夾 msh />ls No such directory
    發表于 09-22 06:38

    FAQ_MA35D1_ 如何配置編譯選項以在編譯后減小大小?

    使用MA35 M4開發平臺,相同的代碼編譯為 90KB 的 bin 文件。但是,使用 nueclipse 編譯后,文件大小超過 1mb。 如何配置編譯選項以在編譯后減小大小?
    發表于 09-03 06:42

    請問各位dayu200是不是不支持燒錄64位的OpenHarmony

    我自己編譯了OpenHarmony5.0.2的鏡像,發現如果使用arm64參數編譯為64位版本,燒錄后卡在開機動畫無法開機,如果編譯為32位就可以正常。請問dayu200不支持64位系
    發表于 08-16 17:39

    STM32 CubeIDE編譯運行(燒錄程序)的快捷鍵是什么?

    CubeIDE編譯運行(燒錄程序)的快捷鍵是什么?
    發表于 07-25 07:04

    【HZ-T536開發板免費體驗】2 - 交叉編譯倉頡編程語言程序到開發板運行

    對現代語言特性的集成、全方位的編譯優化與運行時實現,以及 IDE 工具鏈支持,為開發者締造友好的開發體驗和卓越的程序性能,便于開發者高效地完成鴻蒙 AI 原生應用的開發工作。 服務端 / 云化場景
    發表于 07-16 21:27

    邊緣設備AI部署:編譯器如何實現輕量化與高性能?

    、ASIC等)上高效執行的機器代碼。AI編譯器在AI模型的部署和優化中扮演著關鍵角色,能夠顯著提升模型的運行效率和性能。 ? AI編譯器的主要功能 ? AI編譯器的主要功能包括模型優化
    的頭像 發表于 07-06 05:49 ?6633次閱讀

    【米爾-RK3562開發板試用評測】EtherCat移植、編譯

    目前下的內核原碼目錄中。直接cd進入即可。 make menuconfig 找到網卡驅動,編譯為模塊。要注意開發板上使用的網絡芯片的型號,對應進行編譯。 由于EtherCat的實時性比較高,所以,要
    發表于 05-28 14:49

    “System Level EOS Testing Method”可以翻譯為: “系統級電性過應力測試方法”

    “System Level EOS Testing Method”可以翻譯為: “系統級電性過應力測試方法”
    的頭像 發表于 05-05 15:55 ?933次閱讀
    “System Level EOS Testing Method”可以翻<b class='flag-5'>譯為</b>: “系統級電性過應力測試方法”

    HighTec編譯器全面支持芯馳科技車規MCU芯片E3650

    近日,HighTec與芯馳科技共同宣布HighTec編譯器套件將全面支持芯馳新一代旗艦智控MCU-E3650芯片。此次合作,進一步豐富了芯馳車芯產品的工具鏈生態,雙方將攜手為客戶提供高性能、高安全性的解決方案。
    的頭像 發表于 04-28 15:20 ?1792次閱讀

    如意玲瓏應用構建規則實用案例

    通過《如意玲瓏應用構建指南(二):在玲瓏容器中編譯基于 Qt5 的開源應用》的學習后,相信大家已經基本了解了在玲瓏容器中通過怎樣的操作可以將基于 Qt5 的開源應用——qBittorrent 的項目源代碼編譯為可以運行的二進制程
    的頭像 發表于 03-25 11:17 ?1072次閱讀
    如意玲瓏應用構建規則實用案例

    rtsmart開啟C++特性支持后,工具鏈編譯內核不通過怎么解決?

    各位大佬好,本人在rtsmart項目中需要使用C++11特性,在menuconfig那里配置了支持C++特性后,使用7.3.0版本的arm-linux-musleabi編譯編譯內核時出現 錯誤
    發表于 03-10 08:06

    Keil編譯為什么很慢?

    Keil編譯為什么很慢?
    發表于 03-07 16:24