DPDK中幾種Exception Path方式

(文章來自作者維護的社區微信公衆號【虛擬化雲計算】)
在DPDK中經常看到一個詞, exception path,它是什麼?
DPDK 使用環境中,物理網卡收到的報文不再進入內核協議棧,而是直接到達 DPDK 應用。但是再有些場景中,用戶希望把報文(如控制報文)再次發送至內核協議棧進行處理。報文從用戶空間再次進入內核的過程在DPDK中稱爲exception path。
DPDK 支持幾種方式讓用戶空間的報文重新進入內核協議棧:

1.TAP/TUN設備
可以使用內核提供的TAP/TUN設備,這種設備的使用需要使用系統調用,並涉及到copy_to_user()和copy_from_user()的開銷。
使用virtual TAP設備實現exception path的流向圖:

2.DPDK Kernel NIC Interface(KNI)
DPDK提供了KNI接口用於提高用戶態和內核態之間報文的處理效率。 KNI是 通過內核模塊構造了一個虛擬網絡接口,並且通過FIFO和用戶態的DPDK應用 交換報文。
正如DPDK官方所講,使用DPDK  KNI 的好處 是:
  • 比現有的Linux TUN / TAP(通過消除系統調用和copy_to_user()/ copy_from_user()操作)。
  • 允許使用標準Linux網絡工具(如ethtool,ifconfig和tcpdump)管理DPDK端口。
  • 允許與內核網絡協議棧的交互。


3.virtio-user+vhost-net
DPDK提供了virtio-user虛擬設備,使用它與現有的vhost-kernel方案配合來實現exception path。需要內核中vhost.ko和vhost-net.ko兩個模塊。

啓動virtio-user,會操作/dev/vhost-net創建一個內核態的虛擬設備tap。從DPDK收到的包進入到virtio-user,通過vhost-kthread進入到tap設備,tap設備支持內核協議棧。從而實現了用戶態和內核態的數據交互

本文圖片全部來自DPDK官方網站 www.dpdk.org


============================================================
關注微信公衆號【虛擬化雲計算】,閱讀更多虛擬化雲計算知識,純技術乾貨更新不停。