wasm runtime 性能測試

上一篇文章分享了wasmer runtime,編譯好的openssl.wasm文件能夠獨立運行,這篇文章分享openssl.wasm和原生openssl之間的性能對比。html

測試硬件

  • 主機 MacBook Pro
  • CPU 6-Core Intel Core i7 2.2 GHz/啓動超線程
  • 內存 16GB
  • 磁盤 SSD

測試軟件

  • Openssl LibreSSL 2.8.3
  • Openssl WASM openssl安裝包版本 openssl 1.1.1d
  • WASMER 1.0.0-alpha4

測試方法

分別對 100/300/500 MB 進行屢次加密解密,獲得均值結果。注意,這裏有些模式並非標準的,因此沒有所有模擬,僅供參考。web

openssl 測試命令npm

#!/bin/bash

key="A665A45920422F9D417E4867EFDC4FB8"
iv="4632527467615238616971576a466653"
#file100、file300、file500
fileName="file100"
ecbEnFileName="ecb-en-${fileName}"
ecbDeFileName="ecb-de-${fileName}"
cbcEnFileName="cbc-en-${fileName}"
cbcDeFileName="cbc-de-${fileName}"
ctrEnFileName="ctr-en-${fileName}"
ctrDeFileName="ctr-de-${fileName}"
gcmEnFileName="gcm-en-${fileName}"
gcmDeFileName="gcm-dn-${fileName}"
echo "------start openssl-aes-128 encryption-------"
echo "------ECB Encryption-------"
time openssl enc -aes-128-ecb -in ${fileName} -out ${ecbEnFileName} -K ${key} -p
echo "------CBC Encryption-------"
time openssl enc -aes-128-cbc -in ${fileName} -out ${cbcEnFileName} -K ${key} -iv ${iv} -p
echo "------CTR Encryption-------"
time openssl enc -aes-128-ctr -in ${fileName} -out ${ctrEnFileName} -K ${key} -iv ${iv} -p
echo "------GCM Encryption-------"
time openssl enc -aes-128-gcm -in ${fileName} -out ${gcmEnFileName} -K ${key} -iv ${iv} -p

echo "#############################################################"
echo "------start openssl-aes-128 Decrypt-------"
echo "------ECB Decrypt-------"
time openssl enc -aes-128-ecb -d -in ${ecbEnFileName} -out ${ecbDeFileName} -K ${key} -p
echo "------CBC Decrypt-------"
time openssl enc -aes-128-cbc -d -in ${cbcEnFileName} -out ${cbcDeFileName} -K ${key} -iv ${iv} -p
echo "------CTR Decrypt-------"
time openssl enc -aes-128-ctr -d -in ${ctrEnFileName} -out ${ctrDeFileName} -K ${key} -iv ${iv} -p
echo "------GCM Decrypt-------"
time openssl enc -aes-128-gcm -d -in ${gcmEnFileName} -out ${gcmDeFileName} -K ${key} -iv ${iv} -p

openssl.wasm 測試命令瀏覽器

#!/bin/bash

key="A665A45920422F9D417E4867EFDC4FB8"
iv="4632527467615238616971576a466653"
#file100、file300、file500
fileName="file500"
ecbEnFileName="aes/ecb-en-${fileName}"
ecbDeFileName="aes/ecb-de-${fileName}"
cbcEnFileName="aes/cbc-en-${fileName}"
cbcDeFileName="aes/cbc-de-${fileName}"
ctrEnFileName="aes/ctr-en-${fileName}"
ctrDeFileName="aes/ctr-de-${fileName}"

# 建立須要的文件,wasm文件運行,不會把數據寫入磁盤,因此須要提早準備文件
touch ${ecbEnFileName}
touch ${ecbDeFileName}
touch ${cbcEnFileName}
touch ${cbcDeFileName}
touch ${ctrEnFileName}
touch ${ctrDeFileName}

echo "------start openssl-aes-128 encryption-------"
echo "------ECB Encryption-------"
time wasmer run openssl.wasm --dir=. -- enc -aes-128-ecb -in ${fileName} -out ${ecbEnFileName} --nosalt -K ${key}
echo "------CBC Encryption-------"
time wasmer run openssl.wasm --dir=. -- enc -aes-128-cbc -in ${fileName} -out ${cbcEnFileName} --nosalt -K ${key} -iv ${iv}
echo "------CTR Encryption-------"
time wasmer run openssl.wasm --dir=. -- enc -aes-128-ctr -in ${fileName} -out ${ctrEnFileName} --nosalt -K ${key} -iv ${iv}

echo "#############################################################"
echo "------start openssl-aes-128 Decrypt-------"
echo "------ECB Decrypt-------"
time wasmer run openssl.wasm --dir=. -- enc -aes-128-ecb -d -in ${ecbEnFileName} -out ${ecbDeFileName} --nosalt -K ${key}
echo "------CBC Decrypt-------"
time wasmer run openssl.wasm --dir=. -- enc -aes-128-cbc -d -in ${cbcEnFileName} -out ${cbcDeFileName} --nosalt -K ${key} -iv ${iv}
echo "------CTR Decrypt-------"
time wasmer run openssl.wasm --dir=. -- enc -aes-128-ctr -d -in ${ctrEnFileName} -out ${ctrDeFileName} --nosalt -K ${key} -iv ${iv}

測試結果

Openssl

加密安全

模式/文件大小 100M 300M 500M key數據大小
ECB 0.197s 0.970s 1.418s 128bit
CBC 0.244s 1.421s 1.278s 128bit
CTR 0.203s 0.587s 1.145s 128bit
GCM 0.303s 1.123s 1.710s 128bit

解密bash

模式/文件大小 100M 300M 500M key數據大小
ECB 0.309s 1.014s 1.275s 128bit
CBC 0.260s 0.946s 1.630s 128bit
CTR 0.322s 1.081s 1.591s 128bit
GCM 0.429s 1.283s 1.842s 128bit

Openssl.wasm

加密網絡

模式/文件大小 100M 300M 500M key數據大小
ECB 1.775s 5.326s 8.996s 128bit
CBC 1.805s 5.563s 9.452s 128bit
CTR 2.011s 6.133s 10.350s 128bit

解密併發

模式/文件大小 100M 300M 500M key數據大小
ECB 1.894s 5.780s 9.186s 128bit
CBC 1.880s 5.892s 10.123s 128bit
CTR 2.168s 6.297s 11.424s 128bit

結論

openssl.wasm與openssl根據不一樣加解密模式以及不一樣大小文件進行耗時對比來看,openssl.wasm速度沒有原生的openssl執行效率高。具體什麼緣由,我也很好奇,網上的資料並非不少,經過以前對wasm的研究我的理解多是由於wasm虛擬機致使運行速度不是那麼快。分佈式

WebAssembly的定義是基於堆棧的虛擬機的二進制指令格式。堆棧虛擬機模型是常見的內存管理結構,將數據和操做符壓入棧中並彈出逐次執行。wasm的二進制指令是虛擬指令集,虛擬指令集(V-ISA)能夠認爲是對平臺無關的一系列自定義操做符(如JVM),相對的,物理指令集(ISA)則是強依賴物理系統的(如Intel的x86-64)。ide

由於WASM依賴的是V-ISA指令集,即徹底依賴宿主環境提供的操做指令。因此若是要在真實的操做系統上運行,必需要有一個「虛擬機」來翻譯這些指令並屏蔽具體系統調用之間的差別。即須要相似JVM的WASM VM,WASI即是定義這些抽象的系統調用抽象層,WASM平臺的系統接口。從而實現"一次編譯,處處運行"的特色。

另外一個特色是WASM安全性,WASM採用了沙箱機制。這意味着代碼不能直接與操做系統交互。那麼它是如何利用系統資源的呢?宿主機(多是瀏覽器,也多是 WASM 運行時)將函數放入代碼可使用的沙箱中。即虛擬機徹底負責權限的控制,全部系統調用由外圍控制,隔離出沙箱環境,這樣能夠避免第三方庫帶來的安全問題。

從可移植性和安全性上來分析,openssl.wasm對比直接在主機上安裝的openssl,效率低一點是有道理的,不只如此,在不一樣平臺上wasm的速度也是有差別的。目前wasm還在發展階段,感興趣的朋友能夠繼續關注wasm動態。

使用場景

瀏覽器中應用 WebAssembly 的場景,好比:

  • 將 C、C++、Rust 等語言編寫的程序移植到瀏覽器
  • 遊戲:
    • 須要快速打開的小遊戲
    • AAA 級,資源量很大的遊戲。
    • 遊戲門戶(代理/原創遊戲平臺)
  • 圖形圖像處理領域,如頁遊、數據可視化等
  • 加密工具
  • CAD 軟件
  • 音視頻編解碼等等

非瀏覽器應用場景,官方文檔中也列了一些,不過都比較抽象

  • Fastly 與其餘服務商的邊緣雲
  • Node 與 npm(參見譯文)

    • 「WebAssembly 能夠解決 Node 中最大的問題之一——如何得到接近原生速度,並像使用原生模塊同樣複用其餘語言(如 C 與 C++)編寫的代碼,同時仍保持可移植性與安全性。 標準化這個系統接口是實現這一目標的第一步。」
    • 「npm 極爲感興趣的是,WebAssembly 潛在具備擴展 npm 生態系統、並同時極大地簡化在服務端 JavaScript 應用程序中運行原生代碼過程的能力。 咱們期待這個過程的結果。」
  • 插件系統。不管瀏覽器、IDE 仍是任何其餘地方的插件系統若是採用 WebAssembly 既能保證安全性避免插件代碼越權,也能與開發語言解耦、有利於插件生態的繁榮。

更多使用場景參見官方文檔:http://webassembly.org.cn/docs/use-cases/

將來方向

  • 添加後續特性到 WebAssembly 標準的過程
    • 直接操做 DOM
    • 共享內存的併發性
    • SIMD(單指令,多數據)
    • 異常處理
    • 其餘改進——使開發者開發起來更簡單
      • 一流的開發者工具
      • 垃圾回收
      • ES6 模塊集成。

參考文檔


Netwarps 由國內資深的雲計算和分佈式技術開發團隊組成,該團隊在金融、電力、通訊及互聯網行業有很是豐富的落地經驗。Netwarps 目前在深圳、北京均設立了研發中心,團隊規模30+,其中大部分爲具有十年以上開發經驗的技術人員,分別來自互聯網、金融、雲計算、區塊鏈以及科研機構等專業領域。Netwarps 專一於安全存儲技術產品的研發與應用,主要產品有去中心化文件系統(DFS)、去中心化計算平臺(DCP),致力於提供基於去中心化網絡技術實現的分佈式存儲和分佈式計算平臺,具備高可用、低功耗和低網絡的技術特色,適用於物聯網、工業互聯網等場景。公衆號:Netwarps

相關文章
相關標籤/搜索