virtio 1.2 來了!龍蜥社群攜手業界打造新版虛擬化 IO 標準
一、virtio spec 是什麼?
在雲端計算如火如荼的今天,我們應該經常可以在雲端計算平臺上看 "virtio" 這個詞,它出現在雲端計算機的各種裝置上:
它是怎樣的一種存在,在虛擬化的技術領域扮演著一種怎樣的角色呢?virtio 是一種 I/O 半虛擬化解決方案,是一套通用 I/O 裝置虛擬化的程式,是對半虛擬化 Hypervisor 中的一組通用 I/O 裝置的抽象。一般來說,我們所說的 virtio 包含三個部分:
-
虛擬機器中的 virtio 網路卡驅動
-
宿主機或者 CIPU 上面的 virtio 裝置的實現
-
virtio spec (規範)
前面兩個是 virtio 在不同的作業系統及計算機模擬器中具體實現的 driver 和 device,driver 和 device 如何實現並沒有嚴格的規定,基於其所處的環境不同而有所區別,但是 driver 與 device 之間的互動必須嚴格遵守 virtio spec 的定義。這樣才能保證所有的 OS 在不同的 host 上的模擬器裡面都可以正常執行。
所以 virtio spec 是 virtio 的靈魂。
virto spec 透過定義一套 virtqueue 機制,實現 guest 和 host 的通訊。這套機制可以應用於多種裝置(網路裝置、塊裝置等)。所以 virtio spec 發展出了多種裝置,基本完成了對於虛擬化場景下各種裝置的覆蓋。
1.1 那我們為什麼選擇它呢?
virtio 是一種半虛擬化的技術,如果對於裝置進行全虛擬化,hypervisor 就要對於所有的硬體請求指令進行截獲,這對於效能的影響是巨大的。
但是實際上 guest 本質上是一個 host 上的程式,它與 hypervisor 進行互動並不用這麼麻煩,完全可以基於程式之間的通訊方式進行互動。只是這種方式要 guest 進行配合。所以基於此實現的 virtio 可以獲得更高的效能。這也就是 virtio 獲得廣泛支援的原因。
1.2 virtio spec 的歷史
2012 最早由 Rusty Russell 起草的並不是一個正式的規範。後續 virtio spec 由 virtio 技術委員會負責,併發布了多個版本。在委員會的主持下,社群的廣泛參與下,不斷地為 virtio spec 增加新的特性與能力,目前 virtio spec 已經推進到 v1.2 版本。
1.3 virtio spec 1.2 關鍵時間點
-
25 Jan 2022 virtio spec 凍結
-
10 May 2022 - 08 June 2022 Public Review
-
01 July 2022 virtio v1.2 正式版本完成 html
-
15 July 2022 virtio v1.2 正式對外宣佈釋出 announcement
經過半年多的努力,vrtio 1.2 終於正式釋出了。
1.4 virtio spec 1.2 新特性
首先 virtio spec 1.2 對更早的版本是完全相容的,virtio spec 定義的所有特性都是透過 features 進行協商的,所以在實現上可以平滑地進行過渡。並不存在升級之後不同版本之間的不相容問題。
在裝置方面 virtio spec 1.2 新支援了一些裝置: virtio-pmem,virtio-fs, virtio-rpmb......一些主流的裝置也支援了一些新的特性,比如 virtio-net 增加了這些新的特性:
-
UDP segmentation offload
-
Receive Side Scaling
-
Per-packet hash reporting
-
Guest hdrlen optimization
-
Link speed and duplex reporting
此外, virtio core 還增加了一些新的基礎特性:
-
Per-virtqueue reset
-
Shared memory resources
-
Object resources for inter-device sharing
-
Virtio-pci vendor-specific capabilities
-
Virtio-pci queue_notify_data optimization
總體而言,這次 virtio spec 1.2 的釋出帶來了很多讓人激動的新特性。相信等這些功能正式實現之後,我們會感受到更加現代化的 virtio。同時也是一個驅動各個廠家完善自家 virtio 實現的機會。
二、Per-virtqueue reset
virtio spec 1.2 中的 Per-virtqueue reset 是由阿里雲的 Xuan Zhuo 起草的,引入這個特性的目的是解決 virtio-net 不支援佇列級別的 reset 操作的問題。這在很多現代化的網路卡中是一個比較常見的功能, 是實現很多功能的基礎能力, 為了讓 virtio-net 支援更多能力, 這個特性的引入是必須的。但是 Per-virtqueue reset 並不只限於 virtio-net 這一種裝置,它是一個 virtio 的基礎能力,相信其它的 virtio 裝置也會慢慢支援這個 feature。
2.1 Per-virtqueue reset 的實現過程
Per-virtqueue reset 由 driver 針對某一個佇列發起,基於某一種 transport(比如 PCIe) 通知 device。device 停止使用佇列,driver 在 reset 之後可以重新 re-enable 佇列。virtio spec 定義了這個過程中詳細的互動流程和資訊。
以下是 virtio spec 中定義的詳細流程:
-
driver 基於 transport 通知 device 某個指定的佇列要 reset。
-
device 收到請求之後設定 reset 狀態為 1,停止此佇列的所有操作,包括中斷等,並設定佇列的所有的狀態到初始值。在 device 完成 reset 操作之前,返回給 driver 的 reset 狀態都是 1,直到 reset 操作完成。reset 完成之後 reset 及 enable 的值都要設定成 0。
-
driver 在檢查到佇列的 reset 狀態變成 0 之後,就表示device reset 操作已經完成了。這個時候開始,driver 就可以安全地回收佇列佔用的相關資源了。
到此 driver 對於佇列的 reset 操作就已經完成了。
-
之後 virtio driver 可選地進行 re-enable 操作,在操作的過程中,driver 可以給 device 新的引數來 re-enable 這個佇列。比如新的佇列大小。
以上是一個完整的 reset & re-enable 的過程,理論上 re-enable 是可選的。
2.2 Per-virtqueue reset 的意義
對於現代的很多硬體裝置來講,對於佇列進行 reset 是一個比較常見的功能,所以這個功能的引入讓 virtio 裝置更加現代化。早期 virtio 的出現是伴隨著高效能的需求而來的,我們原來更加關注它在效能上的基本功能,一些高階功能並不重視。per-virtqueue reset 讓 virtio 對於佇列的使用更加靈活,譬如我們可以基於 per-vertqueue reset 實現下面兩個功能:
1.調整virtio-net 網路卡佇列的ring size。在 virtio-net 的場景下,基於 per-virtqueue reset 我們可以實現網路卡佇列 ring size 的調整。目前一般的網路卡都支援使用 ethtool -G eth0 rx <new size> tx <new size>來調整佇列的大小,但是原來的 virtio-net 一直是不支援這樣一個簡單的功能的,現在基於 per-virtqueue reset,我們很快就可以在 Linux 下使用這個命令來調整佇列的大小。
2.支援AF_XDP,擴充套件雲上應用的邊界。除了應用於上述簡單的場景之外,我們還可以在更高階的場景應用到這個功能。per-virtqueue reset 也可以視作一種資源的快速回收機制。比如在 virtio-net 的情況下,我們必須要等待收到新的資料包或者硬體完成資料包的傳送才能完成對於 buffer 資源的回收。而現在基於 per-virtqueue reset,driver 可以不用被動地等待而是可以主動呼叫 reset 快速地讓 device 釋放對於某個佇列上的 buffer 資源的佔用,實現資源的快速回收。這可以讓 virtio-net 支援 AF_XDP 這樣的高階功能,實現在 linux 核心框架下的高效能收發包。
更多的應用場景還等待大家的探索。
2.3 實現及進展
以上都是 virtio spec 的定義,Xuan Zhuo作為這個 feature 的起草人,在這個 feature 正式進入 virtio spec 之後,就開始向 Linux kernel 社群開源相關的實現,其它 device 後端實現也都在推進中:
-
virtio core 支援 per-virtqueue reset 功能的 patch set 近期應該可以進入 linux 核心主線,這個 patch set 裡面包含 virtio-net 支援 ring size 的實現。
-
virtio-net 支援 AF_XDP 的實現也會近期開源到社群。
-
qemu/vhost-user(DPDK)/vhost-kernel 的後端實現也在推進中 @Kangjie Xu 。
相信大家不久之後就可以在新版本的 Qemu 及 linux kernel 上體驗到這個功能了。
三、高效能網路 Virtio SIG
3.1 背景
virtio 作為一個雲端計算大範圍使用的技術,國內的各大雲廠家基本都是基於它實現的,但是這麼些年我們對它的反饋與參與是非常少的,基本都是拿來主義的狀態。最近,我們開始注意到,阿里等國內的雲廠家開始積極地參與其中,修復 bug,參與標準制定,推進實現等, 一起推廣及做強雲基礎技術。這對於國內雲技術的長遠發展是非常好的一件事。希望這樣的深度的參與越來越多,共同推進 virtio 的發展。
為了更好地支援更多的特性和最佳化在龍蜥作業系統的落地,我們在龍蜥社群高效能網路SIG下組建了 virtio 興趣小組,透過加強社群內各個 virtio 相關的團隊及公司之間的合作,增強彼此在這一塊的溝通和了解,從而推動 virtio 本身以及其在龍蜥更好的發展。希望後續有更多的社群夥伴來共同參與進來,也歡迎大家積極參與討論,提問題或需求,大家以一種平等的關係共構建龍蜥社群的 virtio SIG。我們認為這是一個共贏的過程。
3.2 原則
共贏、平等、開源。
3.3 願景
-
探索 virtio 標準的更多可能性,推進 virtio 標準實現與落地
-
促進技術交流
-
提供技術幫助
-
為各個夥伴提供需求輸入
-
同步各個夥伴的開發進展
-
促進各個夥伴之間的合作
四、SIG 成員
丁雪峰(阿里)、衡琪(阿里)、許康捷(阿里)、馬江英(Intel CNDP)、 顧正國(雲豹智慧)、 張明禮(雲豹智慧)、 楊濤(雲豹智慧)、孫傳明(雲豹智慧)、龔有華(雲脈芯聯)、孟祥宏(雲脈芯聯)、陳楊(雲脈芯聯)、錢榮(雲脈芯聯)。
加入我們
歡迎大家加入高效能網路 Virtio SIG。
SIG 地址連結:
—— 完 ——
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2910420/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 杉巖資料加入龍蜥社群,攜手打造堅實資料儲存底座
- 中興通訊攜手龍蜥社群,共創繁榮生態 | 2023龍蜥作業系統大會作業系統
- 雲上人和物聯科技加入龍蜥社群,攜手打造軟硬體服務生態
- 如何保證 Java 應用安全?標準答案來了 | 龍蜥技術Java
- 華創視訊加入龍蜥社群,攜手共建開源新生態
- 虛擬化解決方案 virtio 的技術趨勢與 DPU 實踐解讀 | 龍蜥技術
- 墨芯人工智慧加入龍蜥,攜手打造軟硬協同稀疏化計算平臺人工智慧
- 知名整機廠商中科曙光加入,攜手龍蜥社群共建應用生態
- 濤思資料加入龍蜥社群,攜手共建時序資料庫生態資料庫
- 數盾科技加入,攜手龍蜥社群提升網路安全整體防護能力
- 老牌軟體廠商亞信科技加入,攜手龍蜥社群共建開源生態
- 萬里資料庫加入龍蜥社群,打造基於“龍蜥+GreatSQL”的開源技術底座資料庫SQL
- 中興新支點國產系統將聯合阿里龍蜥社群制定多項行業標準阿里行業
- 天數智芯攜手龍蜥社群,以高效能算力助力開源發展
- 中國 PostgreSQL 分會加入龍蜥社群,攜手共建基礎軟體開源新生態SQL
- 致敬 hacker :盤點記憶體虛擬化探索之路|龍蜥技術記憶體
- 中介軟體頭部廠商加入,龍蜥社群攜手東方通共創開源新生態
- 開始報名!龍蜥社群走進 Arm MeetUp 議程硬核劇透來了
- 大資料儲存領導廠商創新科加入,攜手龍蜥社群共建開源生態大資料
- 龍蜥開發者說:首次觸電,原來你是這樣的龍蜥社群? | 第 8 期
- 鈦星數安加入龍蜥社群,共同打造網路安全生態
- 【原創】Linux虛擬化KVM-Qemu分析(八)之virtio初探Linux
- 龍蜥開發者說來了,來看看社群一週動態還有什麼? | 3.07-3.11
- “網際網路+”大學生創新創業大賽來了,歡迎報名龍蜥社群賽題!創業
- 常用標準io
- 通用 GPU 領先企業登臨科技加入龍蜥社群,完成與龍蜥作業系統的相容適配GPU作業系統
- 易捷行雲EasyStack 加入龍蜥社群,共同打造多樣化算力創新雲平臺
- 【原創】Linux虛擬化KVM-Qemu分析(十)之virtio驅動Linux
- 【原創】Linux虛擬化KVM-Qemu分析(九)之virtio裝置Linux
- 技術門檻高?來看 Intel 機密計算技術在龍蜥社群的實踐 | 龍蜥技術Intel
- SSD 儲存領域廠商大普微加入龍蜥社群,完成與龍蜥作業系統適配作業系統
- InfoQ專訪龍蜥社群陳緒:從CentOS 停服說起,龍蜥作業系統的開源觀CentOS作業系統
- OrangeBusinessServices攜手俄羅斯勱龍時裝集團打造虛擬試衣間助其改善全球化生產製造模式模式
- 讓 AI 更簡單 人工智慧平臺 SEAL 攜手龍蜥落地達摩院演算法能力 | 龍蜥案例AI人工智慧演算法
- 浪潮雲洲攜手魯泰化學打造智慧充裝新標杆
- 安全廠商中睿天下加入龍蜥社群
- 龍蜥社群一週動態 | 3.14-3.18
- 龍蜥社群一週動態 | 1.10-1.14