virtio
阿新 • • 發佈:2020-10-23
https://blogs.oracle.com/linux/how-to-emulate-block-devices-with-qemu
virtio_pci
在probe(接管)每一個裝置時,根據每個pci裝置的subsystem device id來識別出這具體是哪一種virtio裝置,然後相應的向核心註冊一個 virtio 裝置。見include/uapi/linux/virtio_ids.h。
1
|
|
在啟動virtio device後,Guest OS中不但在/sys/bus/pci/devices中出現一個對應的pci裝置,而且在/sys/bus/virtio/devices中也會出現一個virtio型別裝置。
比如
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=m
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
但是本文不討論如何使用9P檔案系統來達成這一目標的具體步驟,而是討論其幕後實現中的一個技術細節:pci匯流排與virtio匯流排的關係。
在上述的背景下,如果我們使用QEMU命令列來啟動一個VM,在命令列中加入類似: -device virtio-9p-pci 這樣的引數選項時, 那麼在Guest OS中不但在/sys/bus/pci/devices中出現一個對應的pci裝置,而且在/sys/bus/virtio/devices中也會出現一個virtio型別裝置。
root@srv6:~# ls /sys/bus/virtio/devices virtio0 virtio1 virtio2 root@srv6:~# ls /sys/bus/virtio/devices/virtio ls: cannot access '/sys/bus/virtio/devices/virtio': No such file or directory root@srv6:~# ls /sys/bus/virtio/devices/virtio0/ device driver features modalias net power status subsystem uevent vendor root@srv6:~# ls /sys/bus/virtio/devices/virtio0/driver bind module uevent unbind virtio0 root@srv6:~# ls /sys/bus/virtio/devices/virtio0/driver/module coresize drivers holders initsize initstate notes parameters refcnt sections srcversion taint uevent root@srv6:~# ls /sys/bus/virtio/devices/virtio0/driver/module/drivers/ virtio:virtio_net root@srv6:~# ls /sys/bus/virtio/devices/virtio1/driver/module/drivers/ virtio:virtio_blk root@srv6:~# ls /sys/bus/virtio/devices/virtio2/driver/ bind uevent unbind virtio2 root@srv6:~# ls /sys/bus/virtio/devices/virtio2/driver/virtio2 device driver features modalias power status subsystem uevent vendor root@srv6:~# ls /sys/bus/virtio/devices/virtio2/driver/virtio2/driver bind uevent unbind virtio2 root@srv6:~#
root@ubuntu:~/kata_container# netstat -ax -p | grep sock Active UNIX domain sockets (servers and established) unix 2 [ ACC ] STREAM LISTENING 9997365 12361/containerd-sh @/containerd-shim/ab1fc007b160aa73bae415d6dfd7bf32f442b5696ba7700b5ce9b45d8947cec8.sock@ unix 2 [ ACC ] STREAM LISTENING 10015781 14617/containerd-sh @/containerd-shim/d6b2419da7062ef5a53ccb11dcd4488f4553cef4f6c3e8d1105e147ed624bd06.sock@ unix 2 [ ACC ] STREAM LISTENING 12011393 6166/kata-proxy /run/vc/sbs/mycontainer/proxy.sock unix 2 [ ACC ] STREAM LISTENING 9952925 13761/containerd-sh @/containerd-shim/6c2ca0d641866746f4a953912952bd3f1bf2b67e870aa39c0431b7c14d1b3263.sock@ unix 2 [ ACC ] STREAM LISTENING 11758007 1/init /var/run/docker.sock unix 2 [ ACC ] STREAM LISTENING 11328035 34127/containerd-sh @/containerd-shim/k8s.io/64abb3931350d2762e805122d39ecbcee47e59a40331d1e09a5823dd0d11fa27/shim.sock@ unix 2 [ ACC ] STREAM LISTENING 9969581 13100/containerd-sh @/containerd-shim/c58597f53055bfca1289054c91c034613fc4a8da797ea6f9f7c0c5fd0639767c.sock@ unix 2 [ ACC ] STREAM LISTENING 9031555 33824/containerd-sh @/containerd-shim/1ca62d91c442c34e31054080bef78a032bc8ccc5a4fdc8a13fbcd18e06921c2d.sock@ unix 2 [ ACC ] STREAM LISTENING 9782233 21667/containerd /run/containerd/containerd.sock.ttrpc unix 2 [ ACC ] STREAM LISTENING 9782234 21667/containerd /run/containerd/containerd.sock unix 2 [ ACC ] STREAM LISTENING 629318 1/init /var/run/libvirt/virtlockd-sock unix 2 [ ACC ] STREAM LISTENING 639142 1/init /var/run/libvirt/virtlogd-sock unix 2 [ ACC ] STREAM LISTENING 28061 1719/irqbalance @irqbalance1719.sock unix 2 [ ACC ] STREAM LISTENING 9144111 34005/containerd-sh @/containerd-shim/6f115e0f633f5dea385365ebd1e1f7f273da5b08272ac6f0a7ada95e32223303.sock@ unix 2 [ ACC ] STREAM LISTENING 9921340 13444/containerd-sh @/containerd-shim/19694df11cdb2f50566953edd191b3a7ac8c40ddcfbc8b006af4cf8281a24767.sock@ unix 2 [ ACC ] STREAM LISTENING 9995828 13798/containerd-sh @/containerd-shim/7cf4457a90b56831354543ad5ee83838338e3752b1fc8a172d031686302b0efd.sock@ unix 2 [ ACC ] STREAM LISTENING 9053017 34079/containerd-sh @/containerd-shim/58ad464be8db76d1b0ea3afe9672eed9343e48bbf799e9d1e562dd24f7b20e97.sock@ unix 2 [ ACC ] STREAM LISTENING 26901 1/init /var/lib/lxd/unix.socket unix 2 [ ACC ] STREAM LISTENING 44207 1/init /run/lvm/lvmpolld.socket unix 2 [ ACC ] STREAM LISTENING 44209 1/init /run/lvm/lvmetad.socket unix 9 [ ] DGRAM 44213 1/init /run/systemd/journal/socket unix 2 [ ACC ] STREAM LISTENING 630482 11270/libvirtd /var/run/libvirt/libvirt-sock unix 2 [ ACC ] STREAM LISTENING 630483 11270/libvirtd /var/run/libvirt/libvirt-sock-ro unix 2 [ ACC ] STREAM LISTENING 630484 11270/libvirtd /var/run/libvirt/libvirt-admin-sock unix 2 [ ACC ] STREAM LISTENING 9984728 13253/containerd-sh @/containerd-shim/295f0dc91f1270559370e64cdaf8e9861b70a41c72a1beaa7a61e7bc85fbf8dd.sock@ unix 2 [ ACC ] STREAM LISTENING 26899 1/init /run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 9971063 12848/kubelet /var/lib/kubelet/device-plugins/kubelet.sock unix 2 [ ACC ] STREAM LISTENING 9985656 12336/containerd-sh @/containerd-shim/6da10307571a03a7a26c3d94d4acf339f98bb4456f0129e72db786cce06ce229.sock@ unix 2 [ ACC ] STREAM LISTENING 26903 1/init /run/snapd.socket unix 2 [ ACC ] STREAM LISTENING 26905 1/init /run/snapd-snap.socket unix 2 [ ACC ] STREAM LISTENING 26907 1/init /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 9978737 13654/containerd-sh @/containerd-shim/a8b59d166076095cd78eed57fbccbad6e82cfc49126d97c797be6751587825a3.sock@ unix 2 [ ACC ] STREAM LISTENING 10015800 14829/containerd-sh @/containerd-shim/6d912dfe3499c3edb33b0010bcc0f742b1ac5f448e76427a1c5a68eb2074b970.sock@ unix 2 [ ACC ] STREAM LISTENING 15202502 34081/containerd-sh @/containerd-shim/k8s.io/bc6b585703b6cb29f5f1d6f5865f5eddeee474b330a08b8eac1e17a3e5f5367b/shim.sock@ unix 2 [ ACC ] STREAM LISTENING 11713916 65115/dockerd /var/run/docker/libnetwork/3ced1a442325.sock unix 2 [ ACC ] STREAM LISTENING 9162991 33945/containerd-sh @/containerd-shim/e400710f07b23c235f42475d23ede80e2b9da0962d75d9951de7320d053374c5.sock@ unix 2 [ ACC ] STREAM LISTENING 11605978 65115/dockerd /var/run/docker.sock unix 2 [ ACC ] STREAM LISTENING 9968206 13615/containerd-sh @/containerd-shim/c80bdd12afde75e0b41d8c35f04bea11f5113892f2cbc57501616725ecde3430.sock@ unix 2 [ ACC ] STREAM LISTENING 11776041 65115/dockerd /var/run/docker/metrics.sock unix 2 [ ACC ] STREAM LISTENING 9933780 13591/containerd-sh @/containerd-shim/ade08ec2d9afa0c53cfaf535aece93b65a17fc0c7c1887de5fbffe82dd777b4d.sock@ unix 3 [ ] STREAM CONNECTED 40024 1613/dbus-daemon /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 9965086 13591/containerd-sh @/containerd-shim/ade08ec2d9afa0c53cfaf535aece93b65a17fc0c7c1887de5fbffe82dd777b4d.sock@ unix 3 [ ] STREAM CONNECTED 10005687 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 9965104 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 40023 1613/dbus-daemon /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 11309567 34127/containerd-sh @/containerd-shim/k8s.io/64abb3931350d2762e805122d39ecbcee47e59a40331d1e09a5823dd0d11fa27/shim.sock@ unix 3 [ ] STREAM CONNECTED 9993587 13761/containerd-sh @/containerd-shim/6c2ca0d641866746f4a953912952bd3f1bf2b67e870aa39c0431b7c14d1b3263.sock@ unix 3 [ ] STREAM CONNECTED 9928663 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 9952204 21667/containerd /run/containerd/containerd.sock unix 3 [ ] STREAM CONNECTED 15232045 34103/qemu-system-a /run/vc/vm/bc6b585703b6cb29f5f1d6f5865f5eddeee474b330a08b8eac1e17a3e5f5367b/qmp.sock unix 3 [ ] STREAM CONNECTED 11342015 34143/qemu-system-a /run/vc/vm/64abb3931350d2762e805122d39ecbcee47e59a40331d1e09a5823dd0d11fa27/qmp.sock unix 3 [ ] STREAM CONNECTED 9985660 12336/containerd-sh @/containerd-shim/6da10307571a03a7a26c3d94d4acf339f98bb4456f0129e72db786cce06ce229.sock@ unix 3 [ ] STREAM CONNECTED 11319701 34127/containerd-sh @/containerd-shim/k8s.io/64abb3931350d2762e805122d39ecbcee47e59a40331d1e09a5823dd0d11fa27/shim.sock@ unix 3 [ ] STREAM CONNECTED 9996565 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 9924121 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 9978716 13100/containerd-sh @/containerd-shim/c58597f53055bfca1289054c91c034613fc4a8da797ea6f9f7c0c5fd0639767c.sock@ unix 3 [ ] STREAM CONNECTED 33928 1613/dbus-daemon /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 11996656 65115/dockerd /var/run/docker.sock unix 3 [ ] STREAM CONNECTED 10018074 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 10012695 13444/containerd-sh @/containerd-shim/19694df11cdb2f50566953edd191b3a7ac8c40ddcfbc8b006af4cf8281a24767.sock@ unix 3 [ ] STREAM CONNECTED 9946625 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 9844373 33824/containerd-sh @/containerd-shim/1ca62d91c442c34e31054080bef78a032bc8ccc5a4fdc8a13fbcd18e06921c2d.sock@ unix 3 [ ] STREAM CONNECTED 9991890 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 10015748 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 15242561 51399/guestmount /tmp/libguestfsSR9Fcs/guestfsd.sock unix 3 [ ] STREAM CONNECTED 9953652 12361/containerd-sh @/containerd-shim/ab1fc007b160aa73bae415d6dfd7bf32f442b5696ba7700b5ce9b45d8947cec8.sock@ unix 3 [ ] STREAM CONNECTED 11767959 65115/dockerd /var/run/docker.sock unix 3 [ ] STREAM CONNECTED 11780288 21667/containerd /run/containerd/containerd.sock unix 3 [ ] STREAM CONNECTED 15136422 34103/qemu-system-a /run/vc/vm/bc6b585703b6cb29f5f1d6f5865f5eddeee474b330a08b8eac1e17a3e5f5367b/kata.sock unix 3 [ ] STREAM CONNECTED 9952191 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 33931 1613/dbus-daemon /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 9987432 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 9996591 13798/containerd-sh @/containerd-shim/7cf4457a90b56831354543ad5ee83838338e3752b1fc8a172d031686302b0efd.sock@ unix 3 [ ] STREAM CONNECTED 40025 1613/dbus-daemon /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 9873593 34005/containerd-sh @/containerd-shim/6f115e0f633f5dea385365ebd1e1f7f273da5b08272ac6f0a7ada95e32223303.sock@ unix 3 [ ] STREAM CONNECTED 9953706 21667/containerd /run/containerd/containerd.sock unix 3 [ ] STREAM CONNECTED 33932 1613/dbus-daemon /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 11751844 21667/containerd /run/containerd/containerd.sock unix 3 [ ] STREAM CONNECTED 9852164 34079/containerd-sh @/containerd-shim/58ad464be8db76d1b0ea3afe9672eed9343e48bbf799e9d1e562dd24f7b20e97.sock@ unix 3 [ ] STREAM CONNECTED 9970644 13654/containerd-sh @/containerd-shim/a8b59d166076095cd78eed57fbccbad6e82cfc49126d97c797be6751587825a3.sock@ unix 3 [ ] STREAM CONNECTED 15155706 34081/containerd-sh @/containerd-shim/k8s.io/bc6b585703b6cb29f5f1d6f5865f5eddeee474b330a08b8eac1e17a3e5f5367b/shim.sock@ unix 3 [ ] STREAM CONNECTED 9869602 33945/containerd-sh @/containerd-shim/e400710f07b23c235f42475d23ede80e2b9da0962d75d9951de7320d053374c5.sock@ unix 3 [ ] STREAM CONNECTED 9953061 14617/containerd-sh @/containerd-shim/d6b2419da7062ef5a53ccb11dcd4488f4553cef4f6c3e8d1105e147ed624bd06.sock@ unix 3 [ ] STREAM CONNECTED 9952203 21667/containerd /run/containerd/containerd.sock unix 3 [ ] STREAM CONNECTED 9883582 13615/containerd-sh @/containerd-shim/c80bdd12afde75e0b41d8c35f04bea11f5113892f2cbc57501616725ecde3430.sock@ unix 3 [ ] STREAM CONNECTED 9967503 14829/containerd-sh @/containerd-shim/6d912dfe3499c3edb33b0010bcc0f742b1ac5f448e76427a1c5a68eb2074b970.sock@ unix 3 [ ] STREAM CONNECTED 12033699 6158/qemu-system-aa /run/vc/vm/mycontainer/kata.sock unix 3 [ ] STREAM CONNECTED 647040 1613/dbus-daemon /var/run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 10002885 13253/containerd-sh @/containerd-shim/295f0dc91f1270559370e64cdaf8e9861b70a41c72a1beaa7a61e7bc85fbf8dd.sock@ unix 3 [ ] STREAM CONNECTED 15219762 34081/containerd-sh @/containerd-shim/k8s.io/bc6b585703b6cb29f5f1d6f5865f5eddeee474b330a08b8eac1e17a3e5f5367b/shim.sock@ unix 3 [ ] STREAM CONNECTED 9953065 21667/containerd /run/containerd/containerd.sock.ttrpc unix 3 [ ] STREAM CONNECTED 11333037 34143/qemu-system-a /run/vc/vm/64abb3931350d2762e805122d39ecbcee47e59a40331d1e09a5823dd0d11fa27/kata.sock unix 3 [ ] STREAM CONNECTED 33929 1613/dbus-daemon /var/run/dbus/system_bus_socket root@ubuntu:~/kata_container#