原创 xen網絡後端驅動分析(設備篇)
netback和通用網絡設備差不多,其priv結構體爲xen_netif(netfront爲netfront_info,igb叫igb_adapter,都是一個調調。注,priv結構體是跟着net_device後面的一塊線性內存區域,用來
原创 linux內核網絡協議棧學習筆記(7)
本篇繼續討論IP包的收發 ip_local_deliver: ip_local_deliver用來把數據包接收到本地,代碼很短 /* * Deliver IP Packets to the higher protocol la
原创 open vswitch研究:vswitchd
vswitchd是用戶態的daemon進程,其核心是執行ofproto的邏輯。我們知道ovs是遵從openflow交換機的規範實現的,就拿二層包轉發爲例,傳統交換機(包括Linux bridge的實現)是通過查找cam表,找到dst ma
原创 xen網絡後端驅動分析(接收篇)
首先來看下netback收包的過程,netback的收包是通過調用netif_be_start_xmit來進行的。在這之前,netfront要分配好page,通過GR交給netback,這樣netback纔可以把包的內容copy到這些GR
原创 xen網絡前端驅動代碼分析(設備初始化篇)
無論是塊設備還是網絡設備,前端驅動模塊的安裝和卸載都通過xenbus_register_frontend,xenbus_unregister_driver來完成。 其中netfront_driver也是一個xenbus_driver結構
原创 virtio pci設備基礎
這段時間又再次revisit了一把virtio,把筆記整理一下貼出來,大部分內容都是網上找的,+上我個人的一些理解在裏面 我們首先關注virtio設備的配置空間,virtio設備本身是基於PCI總線的,因此本質上就是一個PCI設備,和
原创 virtio後端方案vhost
vhost是virtio的另一種方案,用於跳過qemu,減少qemu和內核之間上下文切換的開銷,對於網絡IO而言提升尤其明顯。vhost目前有兩種實現方案,內核態和用戶態,本文重點討論內核態的vhost vhost內核模塊主要處理數據面的
原创 ovs的netdev, ofproto以及dpif etc.
How to Port Open vSwitch to New Software or Hardware ==================================================== Open vSwit
原创 ovs的upcall及ofproto-dpif處理細節
無論是內核態datapath還是基於dpdk的用戶態datapath,當flow table查不到之後都會進入upcall的處理(我喜歡管這條路徑叫做慢速路徑,那麼datapath裏就是快速路徑啦~~) upcall的處理函數udpif_
原创 virtio的vring隊列
上一篇已經提到,在virtio設備初始化的過程中,會通過setup_vp創建virtqueue,目前的virtqueue隊列都是通過vring來實際工作的,我們可以把virtqueue當做一個接口類,而把vring_virtqueue當做
原创 ovs vswitchd的啓動分析
ovs vswitchd的啓動 vswitchd啓動代碼可參考ovs-vswitchd.c的main函數,其中最重要的兩個函數是bridge_run以及netdev_run bridge_run void bridge_run() {
原创 Virtio 基本概念和設備操作(zz)
Linux Kernel 支持很多 Hypervisor,比如 KVM、Xen 和 VMware 的 VMI 等。每個 Hypervisor 都有自己獨特的 block、network、console 等設備模型,設備驅動多樣化的特性和
原创 OVS datapath流表結構及匹配過程
datapath流表的查找函數是ovs_flow_tbl_lookup_stats,在此之前,先看下datapath組織流表的方式。 最新2.6的ovs流表,已經不是最早單純的精確匹配了,而是一種精確匹配+帶掩碼匹配合併在一起的方式,叫
原创 PCI學習筆記(zz)
1.PCI設備編號 每一個PCI device都有其unique PFA(PCI Fcntion Address) PFA由 bus number、device number、function number組成。
原创 xen網絡前後端交互
前後端交互,依賴於include/xen/interface/io/ring.h, include/xen/interface/io/netif.h裏的定義 /* * Calculate size of a shared ring,