天天看點

DPDK加速I/O虛拟化

相關文章:I/O虛拟化介紹

DPDK支援半虛拟化的前端virtio和後端vhost,并且對前後端都有性能加速的設計。而對于I/O透傳,DPDK可以直接在客戶機裡使用,就像在主控端裡,直接接管實體裝置,進行操作。

DPDK加速I/O虛拟化

Virtio網絡裝置Linux核心驅動設計

Virtio網絡裝置Linux核心驅動主要包括三個層次:底層PCI-e裝置層,中間Virtio虛拟隊列層,上層網絡裝置層。

DPDK加速I/O虛拟化
DPDK加速I/O虛拟化
DPDK加速I/O虛拟化

DPDK使用者空間virtio裝置的優化

DPDK使用者空間驅動和Linux核心驅動相比,主要不同點在于DPDK隻暫時實作了Virtio網卡裝置,是以整個構架和優化上面可以暫時隻考慮網卡裝置的應用場景。

  • 關于單幀mbuf的網絡包收發優化:固定了可用環表表項與描述符表項的映射,即可用環表所有表項head_idx指向固定的vring描述符表位置(對于接收過程,可用環表0->描述符表0,1->1,…,255->255的固定映射;對于發送過程,0->128,1->129,…127->255,128->128,129->129,…255->255的固定映射,描述符表0 ~ 127指向mbuf的資料區域,描述符表128 ~ 255指向virtio net header的空間),對可用環表的更新隻需要更新環表自身的指針。固定的可用環表除了能夠避免不同核之間的CACHE遷移,也節省了vring描述符的配置設定和釋放操作,并為使用SIMD指令進行進一步加速提供了便利。
  • Indirect特性在網絡包發送中的支援:如前面介紹,發送的包至少需要兩個描述符。通過支援indirect特性,任何一個要發送的包,無論單幀還是巨型幀(巨型幀的介紹見6.6.1節)都隻需要一個描述符,該描述符指向一塊驅動程式額外配置設定的間接描述符表的記憶體區域。
    DPDK加速I/O虛拟化

DPDK vhost

DPDK vhost支援vhost-cuse(使用者态字元裝置)和vhost-user(使用者态socket服務)兩種消息機制,它負責為客戶機中的virtio-net建立、管理和銷毀vhost裝置。

當使用vhost-user時,首先需要在系統中建立一個Unix domain socket server,用于處理Qemu發送給vhost的消息,其消息機制如圖所示。

DPDK加速I/O虛拟化

DPDK的vhost有兩種封裝形式:vhost lib和vhost PMD。vhost lib實作了使用者态的vhost驅動供vhost應用程式調用,而vhost PMD則對vhost lib進行了封裝,将其抽象成一個虛拟端口,可以使用标準端口的接口來進行管理和封包收發。

對比

DPDK加速I/O虛拟化

原文連結:https://feisky.gitbooks.io/sdn/dpdk/io-virtualization.html