存储虚拟化的写入过程

存储虚拟化的场景下,整个写入的过程。

  • 在虚拟机里面,应用层调用 write 系统调用写入文件。
  • write 系统调用进入虚拟机里面的内核,经过 VFS,通用块设备层,I/O 调度层,到达块设备驱动。
  • 虚拟机里面的块设备驱动是 virtio_blk,它和通用的块设备驱动一样,有一个 request  queue,另外有一个函数 make_request_fn 会被设置为 blk_mq_make_request,这个函数用于将请求放入队列。
  • 虚拟机里面的块设备驱动是 virtio_blk 会注册一个中断处理函数 vp_interrupt。当 qemu 写入完成之后,它会通知虚拟机里面的块设备驱动。
  • blk_mq_make_request 最终调用 virtqueue_add,将请求添加到传输队列 virtqueue 中,然后调用 virtqueue_notify 通知 qemu。
  • 在 qemu 中,本来虚拟机正处于 KVM_RUN 的状态,也即处于客户机状态。
  • qemu 收到通知后,通过 VM exit 指令退出客户机状态,进入宿主机状态,根据退出原因,得知有 I/O 需要处理。
  • qemu 调用 virtio_blk_handle_output,最终调用 virtio_blk_handle_vq。
  • virtio_blk_handle_vq 里面有一个循环,在循环中,virtio_blk_get_request 函数从传输队列中拿出请求,然后调用 virtio_blk_handle_request 处理请求。
  • virtio_blk_handle_request 会调用 blk_aio_pwritev,通过 BlockBackend 驱动写入 qcow2 文件。
  • 写入完毕之后,virtio_blk_req_complete 会调用 virtio_notify 通知虚拟机里面的驱动。数据写入完成,刚才注册的中断处理函数 vp_interrupt 会收到这个通知。

此文章为12月Day1学习笔记,内容来源于极客时间《趣谈Linux操作系统》,推荐该课程。

相关推荐

  1. MySQL存储过程

    2023-12-05 21:32:02       42 阅读
  2. 存储过程优点

    2023-12-05 21:32:02       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 21:32:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 21:32:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 21:32:02       87 阅读
  4. Python语言-面向对象

    2023-12-05 21:32:02       96 阅读

热门阅读

  1. Hadoop 概述

    2023-12-05 21:32:02       46 阅读
  2. C++:模板进阶

    2023-12-05 21:32:02       47 阅读
  3. vue 生命周期

    2023-12-05 21:32:02       55 阅读
  4. HuggingFace学习笔记--利用API实现简单的NLP任务

    2023-12-05 21:32:02       51 阅读
  5. HarmonyOS开发(八):动画及网络

    2023-12-05 21:32:02       40 阅读
  6. 用互斥锁、信号量、条件变量实现线程同步

    2023-12-05 21:32:02       52 阅读
  7. C++学习寄录(九.多态)

    2023-12-05 21:32:02       57 阅读
  8. 复杂sql分析 以及 索引合并

    2023-12-05 21:32:02       47 阅读
  9. bitnami Docker 安装ELK(elasticsearch, logstash, kibana)

    2023-12-05 21:32:02       59 阅读
  10. mysql多版本并发控制mvcc

    2023-12-05 21:32:02       58 阅读
  11. python代码块整行缩进与取消整行缩进快捷键

    2023-12-05 21:32:02       57 阅读
  12. 题目 异常处理

    2023-12-05 21:32:02       54 阅读