那曲檬骨新材料有限公司

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

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

3天內不再提示

介紹WebAssembly現(xiàn)存的一些風險和他們的應對方法

工程師鄧生 ? 來源:覺學社 ? 作者:張漢東 ? 2022-09-21 09:30 ? 次閱讀

標準化進展非常緩慢。為此 Fermyon 加入了 字節(jié)碼聯(lián)盟 親自推動標準化進程,并通過構建 Spin 代碼實現(xiàn)來充分利用標準

語言支持不夠。Fermyon 認為前 20 種語言中至少有 15 種必須完全支持 WebAssembly 以及 WASI 和組件,才能正確地認為 WebAssembly 被很好地采用。Fermyon 采取的立場是將注意力集中在最受歡迎的語言上,這就是為什么使用 Rust 而不是 C 或Zig。

這方面也有一些好消息:

語言支持正在迅速增長,今年C#Python和Ruby都增加了支持

wasi 支持現(xiàn)在是進入 wasm 游戲領域的籌碼

在主流實現(xiàn)語言未能發(fā)揮作用的地方,該語言的替代實現(xiàn)正在加緊發(fā)展,比如 tinygo 對于 wasm 的支持就超越了 go

生態(tài)系統(tǒng)不是可選的。WebAssembly 有望成為下一波計算浪潮,但除非 Fermyon 能圍繞它建立生態(tài)系統(tǒng),所以 Fermyon 正在努力聯(lián)合相關其他企業(yè)合作共建社區(qū)。

社區(qū)實現(xiàn)碎片化。(比如 deno 和其他非標準化實現(xiàn),文章沒有明說)。可悲的是,有時這僅僅是由于無知和不參與:“我們不知道有一個標準為此而出現(xiàn)”。所以目前發(fā)布的組件規(guī)范(正在進行中,但正在迅速成熟)旨在解決這類問題,這個標準使得在不同的主機實現(xiàn)之間共享 WebAssembly 二進制文件成為可能。

還有一個不幸的趨勢,即一些開發(fā)人員選擇與組件模型相反的工作,創(chuàng)建與他們自己的主機運行時的強鏈接。走這條路一方面會導致平臺鎖定,另一方面會毫無意義地重新編寫相同的代碼(針對略有不同的主機進行工具化)。幸運的是,那些準備最好的人(Fastly、Mozilla、Microsoft)反而選擇推動互操作性標準以造福所有人。這是正確的第一步。

為了阻止破壞性的碎片化“手榴彈”,我們必須增加社會壓力,不要我行我素,而要堅持互操作性標準。做到這一點的一個關鍵方法是彼此公開合作(通過字節(jié)碼聯(lián)盟、W3 和 CNCF 等組織),不僅要創(chuàng)建和實施標準,還要創(chuàng)建對話論壇

Fermyon 的愿景是,在五年內,WebAssembly 將成為常態(tài),而不是小眾市場。新一波應用程序將能夠利用 WebAssembly 的速度、安全性和組件模型。為了實現(xiàn)這一目標,我們每個人都可以發(fā)揮作用。

Wasmtime 1.0 性能概覽

近日字節(jié)碼聯(lián)盟發(fā)布了 wasmtime 1.0 性能概覽[2] 的一篇文章,為將在 9.20號發(fā)布的 wasmtime 1.0 穩(wěn)定版做前期鋪墊,介紹了 wasmtime 團隊近期在編譯器和運行時中所做的工作。這里只做重點摘要,并非全文翻譯,對細節(jié)感興趣的可進一步參閱原文。

什么是性能

讓 Wasmtime 和 Cranelift 變得更快意味著什么?所謂的“快”是什么意思?

Cranelift 也被用于 Rust Debug 模式編譯后端

當 Wasmtime 執(zhí)行 Wasm 程序時,CPU既執(zhí)行從Wasm字節(jié)碼編譯的本地指令,也執(zhí)行 "Wasmtime Runtime "的一部分,Wasmtime Runtime 用于維護數(shù)據(jù)結構以幫助實現(xiàn)Wasm語義。這兩部分的執(zhí)行有兩個階段:啟動初始化(Wasm代碼的編譯,和運行時的初始化)和 穩(wěn)態(tài)(steady-state)執(zhí)行。這兩個層面的四個組合都對性能有一定的影響,可以分別進行優(yōu)化。

Compiler (Cranelift) Runtime (Wasmtime)
啟動階段 代碼編譯時間 Wasm 模塊實例化時間
穩(wěn)態(tài)階段 生成代碼的速度 運行時的基本速度

wasmtime 對于改善這四個象限中的每一項都做了大量工作。

Wasm 模塊實例化

WebAssembly 之所以安全是因為wasm 模塊每個實例與生俱來的隔離性。為了有效地利用這種隔離性,Wasm的一些應用將每一個工作單元實例化為一個新的實例,例如服務器上每個傳入的請求。因此,極快的模塊實例化是像Wasmtime這樣的Wasm VM的一個關鍵要求。

現(xiàn)在 wasmtime 的模塊實例化速度已經(jīng)被優(yōu)化到了微秒級別。這是如何做到的呢?

虛擬內存技術

在過去,wasmtime 是通過為 wasm 應用初始化一大塊內存(通過malloc或mmap或一些其他分配器),然后將數(shù)據(jù)復制到正確的位置。

現(xiàn)在,是從現(xiàn)代計算機使用的虛擬內存技術獲得靈感,實現(xiàn)了一個 實例分配器[3]使用了mmap 、madvise 和寫時復制(copy-on-write)的技術將實例化的成本大大的降低了。

延遲初始化

Wasmtime運行時在開始執(zhí)行已編譯的Wasm代碼之前,要花費大量時間來初始化數(shù)據(jù)結構。所以,團隊為函數(shù)引用表和它們所指向的函數(shù)閉包對象實現(xiàn)了延遲初始化[4]。

優(yōu)化結果

SpiderMonkey.wasm 的實例化時間從大約2毫秒到5微秒,快了400倍。

運行時性能

Wasm 執(zhí)行過程中的大部分 CPU 時間通常花在Wasm程序本身,或它調用的 "hostcalls"(這是Wasmtime用戶插入Wasmtime的代碼,無法直接控制),除此之外,Wasmtime本身有一些部分在某些情況下必須運行,這部分代碼就是 Wasmtime Runtime 的性能優(yōu)化之處。

加速棧走查(Stack-Walking)

之前,為了讓Wasmtime列舉所有的棧幀(stackframes),Cranelift編譯器產(chǎn)生了所謂的 "unwind info"。這是一種元數(shù)據(jù),描述了編譯后的代碼將在任意給定點上把值放在棧中。利用這些元數(shù)據(jù),Wasmtime的 "unwinder"能夠逆向程序狀態(tài):它理解一個活動函數(shù)每次調用的棧幀,最終找出誰調用了它,并在棧上迭代,直到它到達Wasm的初始入口。整個過程非常慢。

團隊對此進行了改進,確保始終保持一個幀指針的鏈表,從而達到棧走查像遍歷鏈表那么簡單。這種性能改進是一個巨大的質量改進:它允許啟用棧跟蹤,并大幅提高Wasmtime的健壯性。

加速多任務協(xié)作 與 代際(Epoch) 中斷

Wasmtime的一個常見用例是同時并發(fā)運行許多不同的 WebAssembly guests,并在它們之間設置時間片。Wasmtime內置支持在一個異步事件循環(huán)上運行對Wasm的調用。

Wasmtime 用戶在這種情況下可能遇到的一個問題是如何限制 Wasm 程序的執(zhí)行時間。通常,當與事件循環(huán)異步運行時,計算密集型任務應拆分為多個段,以便事件循環(huán)不會停止超過最大“時間片”。

通過將 Wasm 字節(jié)碼標準編譯為本地機器代碼,Wasm 中的循環(huán)成為編譯代碼中的循環(huán),并運行盡可能多的迭代,沒有限制。如果用戶從事件循環(huán)中調用此函數(shù),則該事件循環(huán)可能會無限期停止。

因此,特別是在運行不受信任的代碼時,Wasmtime 用戶必須建立一種在一定時間限制后重新獲得控制權的方法。所以 Wasmtime 必須提供一種在某個時間點中斷 Wasm 執(zhí)行的方法。

之前,實現(xiàn)這一行為的主要方式是通過“燃料(fuel)”。這是一種機制,通過該機制,已編譯的 Wasm 代碼增加了對“操作”進行計數(shù)的代碼,根據(jù)限制檢查當前計數(shù),如果超出限制,則返回給調用者或事件循環(huán)。“燃料(fuel)”是一種有效的機制,但它成本很高:它需要用“計數(shù)”來擴充每一段代碼,并經(jīng)常將該計數(shù)存儲到內存中并檢查它。

團隊使用了基于代際的中斷[5]取代了 “燃料(fuel)”機制,性能提升了兩倍。

使用 “燃料”機制還是代際中斷,是一種權衡。“燃料”機制更加精準,而代際中斷性能更好。

Cranelift 編譯代碼的質量

Cranelift 用于將Wasm字節(jié)碼編譯成計算機可以直接執(zhí)行的本地機器代碼。

寄存器分配器改造:regalloc2

在過去的一年里,wasmtime引入了新的寄存器分配器 regalloc2[6]。寄存器分配器是編譯器的一個部分,它為程序中的值分配存儲位置。在真正的CPU中,指令對寄存器中的數(shù)據(jù)進行操作,寄存器是一些小的存儲位置,每個位置可以容納一個值(例如,一個64位的數(shù)字)。寄存器分配器決定在什么時候將哪些值保存在哪些寄存器中。做好這一點可以大大改善程序的性能,因為它意味著更少的數(shù)值移動。WebAssembly,作為一個抽象的、與硬件無關的虛擬機,沒有大多數(shù)指令的輸入和輸出位置的概念。

regalloc2的設計是為了支持更高級的算法,以決定如何向寄存器分配數(shù)值。當引入時,它將SpiderMonkey.wasm的運行時性能提高了約5%,將另一個CPU密集型基準測試bz2的性能提高了4%。

更好的模式管理:新的后端、ISLE和持續(xù)的調整

指令選擇問題是指選擇最佳的CPU指令來實現(xiàn)一個給定的程序行為。因為每個CPU都有自己獨特的指令集,而且這些指令可以以許多不同的方式組合,這是一個非常難解決的組合難題。Cranelift最初采用了一種新的編譯器后端設計,可以實現(xiàn)更高級的模式匹配,目前采取的方法是用模式匹配DSL(特定領域語言)來表達底層的指令,這樣我們就可以更容易地調整這些模式。

未來:中端優(yōu)化

在未來,我們計劃為Cranelift引入更先進的中端優(yōu)化。中端優(yōu)化器 "是編譯器的一部分,在程序被 "降級"為機器特定的形式之前(也就是在指令選擇之前),以各種方式對程序進行轉換,使其更快。有一套經(jīng)典的優(yōu)化方法,幾乎所有的編譯器都會執(zhí)行,包括簡化常數(shù)表達式(1+1變成2)等基本規(guī)則。但也有許多更復雜和微妙的轉換。

Cranelift: 編譯時優(yōu)化

除了優(yōu)化Cranelift生成的代碼,編譯過程本身如果太慢,那么Wasmtime可能需要很長的時間來啟動新的代碼,將會阻礙生產(chǎn)力(對于Wasm開發(fā)人員)和響應能力(對于訪問新應用程序的最終用戶)。因此,編譯器的速度是一個重要的指標。

廣義上講,我們可以通過在后端關鍵部分選擇更好的算法來提高編譯時間,如寄存器分配器或優(yōu)化通道,或通過做一般的程序優(yōu)化,如減少內存使用。

regalloc2

切換到 regalloc2 顯著改善了編譯時間,因為寄存器分配占編譯時間的很大一部分:測量單線程時間(不是并行編譯),SpiderMonkey.wasm 的構建速度提高了 6%,bz2 的構建速度提高了 10%。

中端優(yōu)化器:將多個passes合并為一

算法重新設計也可以大大縮短編譯時間。在我們的中端優(yōu)化器原型中,我們對編譯器設計的相關部分采取了一種新的方法:幾個不同的 "程序",或以某種方式改造程序的特定算法,被合并成一個統(tǒng)一的框架,只對程序進行一次處理。

標準程序優(yōu)化

一種特別有效的提高速度的改變是減少內存的分配和使用。程序分配的內存越少,它的運行速度就越快,至少有兩個原因:內存分配器本身可能很慢,而且使用更多的內存也會導致更多的緩沖區(qū)未命中和內存流量。由于其多線程編譯模式,Cranelift也傾向于對分配器施加特別大的壓力。

總結

高性能是任何希望成為構建高效、持久系統(tǒng)的基礎的軟件的一個關鍵方面。如果 WebAssembly 想要成功,它的運行速度必須能達到與本地代碼競爭的水平。這也是 wasmtime 性能優(yōu)化的終極目標。

通過該篇文章我們簡單了解了 Wasmtime 和 Cranelift 性能優(yōu)化的相關工作,以及當前 wasmtime 1.0 的性能狀態(tài)(詳細數(shù)據(jù)見原文)。后續(xù)的文章將介紹該團隊如何確保 Wasmtime 安全以及編譯器生成正確的代碼。



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10902

    瀏覽量

    212996
  • 中斷
    +關注

    關注

    5

    文章

    900

    瀏覽量

    41745
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85035
  • 虛擬內存
    +關注

    關注

    0

    文章

    77

    瀏覽量

    8084

原文標題:WebAssembly 動態(tài) | WebAssembly 的發(fā)展風險及Wasmtime 1.0 性能概覽

文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AN29-關于DC-DC轉換器的一些想法

    電子發(fā)燒友網(wǎng)站提供《AN29-關于DC-DC轉換器的一些想法.pdf》資料免費下載
    發(fā)表于 01-08 13:57 ?0次下載
    AN29-關于DC-DC轉換器的<b class='flag-5'>一些</b>想法

    賽靈思低溫失效的原因,有沒有別的方法或者一些見解?

    賽靈思低溫失效的原因,有沒有別的方法或者一些見解。就是芯片工作溫度在100°--40°區(qū)間,然后呢我們到了0°以下就不工作了,然后在低溫的情況下監(jiān)測了電流和電壓都正常,頻率也都正常,頻率不是FPGA的頻率是晶振的頻率,焊接的話七臺都不行都是這個,0°
    發(fā)表于 12-30 16:28

    芯片的失效性分析與應對方法

    老化的內在機理,揭示芯片失效問題的復雜性,并提出針對性的應對策略,為提升芯片可靠性提供全面的分析與解決方案,助力相關行業(yè)在芯片應用中有效應對挑戰(zhàn),保障系統(tǒng)的高效穩(wěn)定
    的頭像 發(fā)表于 12-20 10:02 ?1520次閱讀
    芯片的失效性分析與<b class='flag-5'>應對方法</b>

    一些常見的動態(tài)電路

    無論是模電還是數(shù)電,理論知識相對來說還是比較枯燥,各種電路原理理解清楚不算容易,換種生動形象的方式或許會增加一些趣味性,也更容易理解這些知識。下面整理了一些常見的電路,以動態(tài)圖形的方式展示。 整流
    的頭像 發(fā)表于 11-16 09:26 ?497次閱讀
    <b class='flag-5'>一些</b>常見的動態(tài)電路

    分享一些常見的電路

    理解模電和數(shù)電的電路原理對于初學者來說可能比較困難,但通過一些生動的教學方法和資源,可以有效地提高學習興趣和理解能力。 下面整理了一些常見的電路,以動態(tài)圖形的方式展示。 整流電路 單相橋式整流
    的頭像 發(fā)表于 11-13 09:28 ?421次閱讀
    分享<b class='flag-5'>一些</b>常見的電路

    LED驅動器應用的一些指南和技巧

    電子發(fā)燒友網(wǎng)站提供《LED驅動器應用的一些指南和技巧.pdf》資料免費下載
    發(fā)表于 09-25 11:35 ?0次下載
    LED驅動器應用的<b class='flag-5'>一些</b>指南和技巧

    使用三階低通濾波器對方波經(jīng)行濾波,想使得方波變得平滑一些,可是濾出來結果不滿意怎么解決?

    使用三階低通濾波器對方波經(jīng)行濾波,想使得方波變得平滑一些,可是濾出來結果不滿意。總是在高電平到低電平很陡峭,二低電平到高電平卻平滑。或是說二階或是三階低通濾波器濾出來以后只能是這種效果。求高手指點一二
    發(fā)表于 09-19 06:22

    減少PLC觸點燒毀風險方法

    工業(yè)自動化控制系統(tǒng)中可編程邏輯控制器(PLC)扮演著核心角色。為了確保PLC系統(tǒng)的長期穩(wěn)定運行,采取系列預防措施來避免觸點燒毀至關重要。以下是一些詳細的預防策略,旨在減少PLC觸點燒毀的風險
    的頭像 發(fā)表于 09-16 11:16 ?583次閱讀

    極限失控的大模型使電力系統(tǒng)面臨的跨域攻擊風險應對措施

    分析大規(guī)模生成式預訓練模型(以下簡稱為大模型)發(fā)生極限失控、使電力系統(tǒng)面臨的跨域攻擊風險及相關的應對措施,以期引起業(yè)內對這風險的重視、討論與行動。基于大模型的現(xiàn)狀、發(fā)展趨勢以及它與人
    發(fā)表于 07-22 12:09 ?0次下載

    咨詢一些關于LED燈具的問題

    各位大佬,咨詢一些關于LED燈具的問題 120W的吸頂燈,用的非隔離式電源,用不到1年,燈具就會閃爍、頻閃或不亮,主要是什么原因造成的?是不是驅動芯片太差?
    發(fā)表于 07-02 22:33

    NFC風險:積極應對,享受智慧生活的安全保障

    例外。本文將探討NFC風險,并提出積極的應對措施,以確保我們在享受智慧生活的同時,也能得到充分的安全保障。 、NFC技術的便捷與優(yōu)勢 NFC技術通過無線電波進行非接觸式數(shù)據(jù)傳輸,實現(xiàn)設備之間的快速連接和信息交換。從手機支付到智
    的頭像 發(fā)表于 06-25 18:01 ?577次閱讀

    細談SolidWorks教育版的一些基礎知識

    SolidWorks教育版是款廣泛應用于工程設計和教育領域的三維建模軟件。它具備直觀易用的操作界面和強大的設計功能,為學生提供了個學習和實踐的平臺。在本文中,我們將詳細探討SolidWorks教育版的一些基礎知識,幫助初學者
    的頭像 發(fā)表于 04-01 14:35 ?394次閱讀

    Tekvpi探頭接口的一些好處是什么?

    Tekvpi探針接口的一些好處是什么? Tekvmi探針接口的最大好處是多功能性和易于使用。 示波器 使用Tekvmi接口支持范圍廣泛的 普羅布斯 包括Tekvmi探針,BMC
    的頭像 發(fā)表于 03-22 10:32 ?462次閱讀
    Tekvpi探頭接口的<b class='flag-5'>一些</b>好處是什么?

    一些有關通信電路的資料?

    有關嵌入式之間DSP、ARM、FPGA三者之間和這三款芯片和外部電路之間通信的一些資料,比如說芯片之間的并行通信和芯片和外部電路之間的串行通信,MODBUS、DP、CAN等,一些一些常用的通信協(xié)議的
    發(fā)表于 03-03 18:53

    電源芯片短路恢復過沖的風險應對措施

    可能導致設備無法正常使用。為了保護設備和提高電源芯片的可靠性,我們需要采取相應的應對措施。 首先,讓我們先了解下電源芯片短路和過沖的風險。短路是指電路中的兩個節(jié)點之間出現(xiàn)低阻抗路徑,導致電流異常增大。而過沖
    的頭像 發(fā)表于 02-06 09:46 ?2294次閱讀
    属虎属鼠做生意可以吗| 子山午向的房子24山图| 百家乐现实赌场| 红宝石百家乐官网的玩法技巧和规则| 机械百家乐官网技巧| 百家乐分析软件下| 粤港澳百家乐赌场娱乐网规则| 黄金城百家乐免费下载| 大发888官方备用| 百家乐官网软件辅助| 伯爵百家乐官网娱乐平台| 百家乐斗地主炸金花| 蒙特卡罗国际网址| 真人百家乐官网软件云南景| 百家乐澳门有网站吗| 大发888娱乐城官方网站| 百家乐官网赢家电子书| 上海百家乐赌博| 免费百家乐分析工具| 六合彩公式| 在线百家乐官网平台| 风水罗盘里的24山| 百家乐电器维修| 六合彩 开奖| 功夫百家乐官网的玩法技巧和规则| 广东百家乐扫描分析仪| 葡京娱乐城姚记| 缅甸百家乐官网赌城| 真人游戏排行榜| 百家乐官网几点开奖| 百家乐网上公式| 豪盈国际娱乐| 皇冠网百家乐官网赢钱| 怎么玩百家乐能赢钱| 大发888娱乐大发体育| 百家乐官网赌法博彩正网| 百家乐鞋业| 百家乐开户| 百家乐怎样玩才能赢| 邵阳县| 名仕百家乐官网的玩法技巧和规则|