原创 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,