KVM/QEMU
majieyue
这个作者很懒,什么都没留下…
展开
-
QEMU代码中的QLIST
下面会写一些KVM、QEMU相关的笔记,ge原创 2014-10-20 13:45:47 · 3694 阅读 · 0 评论 -
virtio pci设备基础
这段时间又再次revisit了一把virtio,把笔记整理一下贴出来,大部分内容都是网上找的,+上我个人的一些理解在里面我们首先关注virtio设备的配置空间,virtio设备本身是基于PCI总线的,因此本质上就是一个PCI设备,和所有其他PCI设备一样,virtio也有自己的vendor ID 0x1AF4,device ID从0x1000 - 0x103F,subsystem de原创 2016-04-12 17:45:10 · 11633 阅读 · 0 评论 -
virtio的qemu总线与设备模型
(很多内容是网上找的,+上我个人的一点理解,推荐大家去看 http://mnstory.net/2014/10/qemu-device-simulation 这篇文章)qemu启动时,如果配置了相应virtio设备,会对guest的pci总线,virtio设备等进行模拟,先来看看qemu的设备模拟,那i8254/PIT为例(PIT的硬件规范略过,有兴趣的话可以参考 http://wiki.os原创 2016-04-25 21:15:56 · 15381 阅读 · 0 评论 -
qemu的virtqueue实现
和内核一样,qemu也需要支持virtqueue,VirtQueue的定义如下#define VIRTIO_PCI_VRING_ALIGN 4096typedef struct VRingDesc{ uint64_t addr; uint32_t len; uint16_t flags; uint16_t next;} VRingDesc原创 2016-04-27 16:27:57 · 4534 阅读 · 0 评论 -
virtio的vring队列
上一篇已经提到,在virtio设备初始化的过程中,会通过setup_vp创建virtqueue,目前的virtqueue队列都是通过vring来实际工作的,我们可以把virtqueue当做一个接口类,而把vring_virtqueue当做这个接口的一个实现/** * virtqueue - a queue to register buffers for sending or receivin原创 2016-04-17 02:15:58 · 17994 阅读 · 1 评论 -
virtio后端方案vhost
vhost是virtio的另一种方案,用于跳过qemu,减少qemu和内核之间上下文切换的开销,对于网络IO而言提升尤其明显。vhost目前有两种实现方案,内核态和用户态,本文重点讨论内核态的vhostvhost内核模块主要处理数据面的事情,控制面上还是交给qemu,vhost的数据结构如下struct vhost_dev { MemoryListener memory_liste原创 2016-05-09 11:00:10 · 9902 阅读 · 0 评论 -
virtio network驱动分析
本文以virtio网络驱动为例,分析virtio驱动是如何处理网络IO的,驱动的定义如下static struct virtio_device_id id_table[] = { { VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID }, { 0 },};static unsigned int features[] = { VIRTIO_NET_F原创 2016-05-10 03:04:15 · 10570 阅读 · 0 评论