zoukankan      html  css  js  c++  java
  • 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来访问,各种各样。

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

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

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

  • 相关阅读:
    [Go] 实现websocket服务端
    [PHP] php使用event扩展的io复用测试
    [MySQL] 使用force index强制使用索引
    [Go] 使用net包作为tcp客户端读取http
    [Go] golang中的包管理
    [Go] 解决golang.org模块无法下载的问题
    [日常] linux设置环境变量
    [Go] golang定时器与redis结合
    [Go] golang定时器的使用
    [Linux] linux路由表
  • 原文地址:https://www.cnblogs.com/honpey/p/13703317.html
Copyright © 2011-2022 走看看