virtio再说清楚一下

又要看virito的事情了

想想,这部分应该也是比较好理解的,就是guest内核里的io的数据包都放在了一个叫virtio queue的一个环形缓冲区中,在这个缓冲区中,然后唤醒qemu或者是内核线程vhost-net去将缓冲区中的数据给读出来,染后转化成host上的IO,然后IO完成之后,再通知一下guest内核就可以了,这个应该不难理解才对。

因为数据都是直接在内核里的,所以不涉及到那么多的memory copy,所以效率会更高一些。

还有就是对于文件的loop设备,应该是非常简单的事情,比如在文件的offset=8k的地方写一个page,对于loop设备来说,IO请求的处理也是没有必要转到用户态的,直接在内核态完就可以了,因为到了block层之后,你就会知道,你就会知道这是个文件,然后通过文件的话,就能找到相应的page-cache,所以写的话就不成问题了,然后使用类似于slice copy这样的机制,在内核态里直接穿透两个文件系统,进行数据的传输。

所以原理还是很好理解的

至于之前不明白的什么vmExit这些都不是本期应该关注的问题,因为也可以在用户态里实现文件的访问,其实有很多的优化的方向,可以直接用vhost来访问,各种各样。

分析陌生的内核问题要抓住主要矛盾,没必要一开始就陷入到细节的泥沼中;

了解新的内核机制,要快速抓到核心问题,没必要一开始就陷入到细节的泥沼中去;

了解新的内核机制,要快速抓到核心问题,没必要一开始就陷入到细节的泥沼中去;

原文地址:https://www.cnblogs.com/honpey/p/13703317.html