/images/avatar.png

網路相關 command

簡介

最早 net-tools 起源於 BSD(在 1980 年代,BSD 開發了現代網際網路的雛形——BSD TCP/IP 堆疊。為了管理這個堆疊,開發者編寫了一系列工具),他提供了自己的一些 command 包含:

Iperf 簡介

簡介

根據維基百科,他是一個跨平台工具,可以為任何網路產生標準化的效能測量結果。

最早來自 ttcp,他是最古老的網路效能測試工具之一,起源於 1980 年代的 BRL(美國陸軍彈道研究實驗室),並在 BSD 系統中發揚光大。

WasmEdge Executor 執行詳解

程式碼

可以看程式碼,大概可以看出 Executor 在初始化會做什麼事情。

Expect<std::unique_ptr<Runtime::Instance::ModuleInstance>> Executor::instantiate(Runtime::StoreManager &StoreMgr, const AST::Module &Mod, std::optional<std::string_view> Name)

參數原型如上,可以看到有參數

  1. Runtime::StoreManager &StoreMgr: 提供導入(Import)時所需的外部實例尋找,並在實例化成功後負責「註冊」該模組。它維護了整個運行時的狀態空間
  2. const AST::Module &Mod: 靜態藍圖,這是由載入器(Loader)解析並驗證後的抽象語法樹(AST)。包含了 WebAssembly 檔案的所有原始資訊(如指令、段數據、類型定義)。它是唯讀的(const)
  3. std::optional<std::string_view> Name: 定此模組是否為「具名模組」。若有值,該實例會以該名稱註冊進 StoreMgr,供其他模組後續引用;若無值(std::nullopt),則視為匿名模組

回傳值則是使用 Expect 處理錯誤,並且使用 unique_ptr 保證只有一個獨占此指標,最後回傳一個 Runtime::Instance::ModuleInstance 要,這是最終產物。它包含了所有運行時需要的數據結構:跳轉表、動態分配的記憶體快、初始化的全域變數值,以及指向具體執行代碼的指針。

WasmEdge 基礎介紹跟專案架構

Wasm 基礎背景

檔案格式:

  • .wat (WebAssembly Text Format): 人眼可讀的純文字格式。類似於組合語言,開發者可以用它來進行底層除錯或理解 Wasm 的運行邏輯
  • .wasm (WebAssembly Binary Format): 二進制格式。這是 Wasm 的標準執行檔,體積小且跨平台,是交給瀏覽器或 WasmEdge 等運行環境執行的正式檔案
  • .aot.wasm (Ahead-of-Time Compiled): 預先編譯後的格式,這是 WasmEdge 特有的優化檔案,將 .wasm 事先轉譯成機器碼。執行時不需要再經過「直譯」,速度會比純 .wasm 快非常多

常見工具:

WasmEdge Module 介紹

簡介

簡單介紹 WasmEdge 裡面具名跟匿名模組的差別。

簡單例子

假設我們有兩個簡單的 Wasm 檔案:

  1. provider.wat: 提供一個 add 函式
  2. consumer.wat: 導入 (Import) provideradd 函式並有一個 run 函式執行
// provider.wat
(module
  (func $add (param i32 i32) (result i32)
    local.get 0
    local.get 1
    i32.add)
  (export "add" (func $add))
)

// consumer.wat
(module
  (import "provider" "add" (func $add (param i32 i32) (result i32)))
  (func (export "run") (param i32 i32) (result i32)
    local.get 0
    local.get 1
    call $add)
)

我們可以使用 wat2wasm 工具將它們編譯成 .wasm 檔案,使用 wat2wasm provider.wat -o provider.wasm