原创 netback再分析

以konrad的dom0 tree ( http://git.kernel.org/cgit/linux/kernel/git/konrad/xen.git/ ) 爲base tree,分析下netback這兩年的代碼變化和相應patch

原创 QEMU代碼中的QLIST

下面會陸續寫一些KVM、QEMU相關的學習筆記,個人覺得KVM相比Xen而言真的簡單很多,當然前提是你對Linux內核得非常熟悉,我也建議虛擬化的初學者不要去碰Xen,直接學習KVM就好。而QEMU則是另一個大頭,無論Xen還是KVM都繞

原创 xen grant table機制分析

grant table是xen基於共享內存的,在不同domain之間進行通信的一種機制,grant table需要domain和xen共同配合才能進行  * Xen's grant tables provide a generic mec

原创 virtio的qemu總線與設備模型

(很多內容是網上找的,+上我個人的一點理解,推薦大家去看 http://mnstory.net/2014/10/qemu-device-simulation 這篇文章) qemu啓動時,如果配置了相應virtio設備,會對guest的pc

原创 virtio network驅動分析

本文以virtio網絡驅動爲例,分析virtio驅動是如何處理網絡IO的,驅動的定義如下 static struct virtio_device_id id_table[] = { { VIRTIO_ID_NET, VIRTIO_

原创 io端口與io內存詳解(zz)

(一)地址的概念 1)物理地址:CPU地址總線傳來的地址,由硬件電路控制其具體含義。物理地址中很大一部分是留給內存條中的內存的,但也常被映射到其他存儲器上(如顯存、BIOS等)。在程序指令中的虛擬地址經過段映射和頁面映射後,就生成了物理

原创 qemu的virtqueue實現

和內核一樣,qemu也需要支持virtqueue,VirtQueue的定義如下 #define VIRTIO_PCI_VRING_ALIGN 4096 typedef struct VRingDesc { uin

原创 GSO revisit

GSO用來擴展之前的TSO,目前已經併入upstream內核。TSO只能支持tcp協議,而GSO可以支持tcpv4, tcpv6, udp等協議。在GSO之前,skb_shinfo(skb)有兩個成員ufo_size, tso_size,

原创 per_cpu變量用法

per_cpu的原理就是一個變量結構在所有CPU cache上都存一份,這樣每次讀寫就可以避免鎖開銷,上下文切換和cache miss等一系列問題,一般來說,最好把per_cpu變量聲明爲CPU cache對齊的,e.g. struct

原创 xen網絡後端驅動分析(發送篇)

這篇來研究netback的報文發送,後端設備創建過程中會調用netif_map,映射tx, rx的IO ring,同時綁定event channel中斷。當netfront要發送skb時,會觸發irq讓後端發送,對應的ISR爲netif_