(文章來自作者維護的社區微信公衆號【虛擬化雲計算】)
在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設備支持內核協議棧。從而實現了用戶態和內核態的數據交互
。
============================================================
關注微信公衆號【虛擬化雲計算】,閱讀更多虛擬化雲計算知識,純技術乾貨更新不停。