Skip to the content.

vhost

先用起来

https://kvm-forum.qemu.org/2022/libblkio-kvm-forum-2022.pdf

https://github.com/yandex-cloud/yc-libvhost-server 和 subprojects/libvhost-user/ 是什么关系? 它们是实现同一套 vhost-user 后端协议的两个库。 不过 yc-libvhost-server

https://github.com/rust-vmm/vhost-device

https://github.com/dragonflyoss/nydus/blob/master/src/bin/nydusd/virtiofs.rs

参考文档

问题

在例如 /home/martins3/data/qemu/hw/virtio/vhost-user-blk-pci.c /home/martins3/data/qemu/hw/block/vhost-user-blk.c

简要的代码分析

下面来分析一下,VhostUserState::chr 是如何初始化,以及消息是发送给谁。

https://www.cnblogs.com/ck1020/p/8341914.html

vhost-user 下,UNIX 本地 socket 代替了之前 kernel 模式下的设备文件进行进程间的通信(qemu 和 vhost-user app),而通过 mmap 的方式把 ram 映射到 vhost-user app 的进程空间实现内存的共享。其他的部分和 vhost-kernel 原理基本一致。这种情况下一般 qemu 作为 client,而 vhost-user app 作为 server 如 DPDK。而本文对于 vhost-user server 端的分析主要也是基于 DPDK 源码。本文主要分析涉及到的三个重要机制:qemu 和 vhost-user app 的消息传递,guest memory 和 vhost-user app 的共享,guest 和 vhost-user app 的通知机制。

https://mp.weixin.qq.com/s?__biz=MzA5NDQzODQ3MQ==&mid=2648182374&idx=1&sn=ad3fcffcc9d238a0d2c58bc734f19cc5&chksm=88623b4ebf15b2586f2a7e9cdc2fbb7e5ae6b0988ad2a815a8df05f8938f889a5b685c93fd65&scene=21#wechat_redirect

似乎大家都是只是故

https://wiki.qemu.org/Features/VirtioVhostUser

分析 vhost 下的 vsock.c 和 net.c ,看上去内核中实际上

vhost_vsock_dev_open 中所有的程序都是在注册:

	vqs[VSOCK_VQ_TX] = &vsock->vqs[VSOCK_VQ_TX];
	vqs[VSOCK_VQ_RX] = &vsock->vqs[VSOCK_VQ_RX];
	vsock->vqs[VSOCK_VQ_TX].handle_kick = vhost_vsock_handle_tx_kick;
	vsock->vqs[VSOCK_VQ_RX].handle_kick = vhost_vsock_handle_rx_kick;

具体执行是在 drivers/vhost/vhost.c

相当于在内核中实现的 vhost 机制

vhost_vsock_handle_tx_kick 的调用路径是:

用用 user

name “vhost-user-blk”, bus virtio-bus name “vhost-user-blk-pci”, bus PCI name “vhost-user-blk-pci-non-transitional”, bus PCI name “vhost-user-blk-pci-transitional”, bus PCI name “vhost-user-fs-device”, bus virtio-bus <— 这个应该是 virtio fs 的实现吧 name “vhost-user-fs-pci”, bus PCI name “vhost-user-scsi”, bus virtio-bus name “vhost-user-scsi-pci”, bus PCI name “vhost-user-scsi-pci-non-transitional”, bus PCI name “vhost-user-scsi-pci-transitional”, bus PCI

name “vhost-user-gpio-device”, bus virtio-bus name “vhost-user-gpio-pci”, bus PCI name “vhost-user-i2c-device”, bus virtio-bus name “vhost-user-i2c-pci”, bus PCI name “vhost-user-input”, bus virtio-bus name “vhost-user-input-pci”, bus PCI name “vhost-user-rng”, bus virtio-bus name “vhost-user-rng-pci”, bus PCI

https://stackoverflow.com/questions/75906208/how-to-connect-via-virtio-gui-running-on-host-with-gpio-in-a-qemu-emulated-virtu

几个小问题

  1. vhost 的 backend 如果忽然被 kill 掉 ,恢复后,可以正常运行吗?

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。