博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gearcache在qemu-kvm虚拟化平台下的实现
阅读量:4984 次
发布时间:2019-06-12

本文共 888 字,大约阅读时间需要 2 分钟。

需要用到的数据结构: 链表,基树。

  

gearcache在qemu-kvm虚拟化平台下的实现主要有以下的步骤:

1.打开镜像文件的时候,为gearcache中的基数池(page_node_pool)和读写数据池(buf_pool)的存储创建相应的内存空间。

2.将qemu-kvm对于镜像文件的读写IO粒度控制在512字节。

3.对于所有的写请求进行拦截:

 -(1)先通过该写请求的offset在基数池当中查找,如果存在该offset,那么将这个写请求复写(overwirte)到基数当中,覆盖对应的数据块。

 -(2)如果该写请求的offset不存在基树池当中,那么就在buf_pool中分配512字节空间存储该数据,并在基数池(page_node_pool)中对应的offset的位置创立一个节点,保存该节点的信息,并将该节点插入(insert_this_write)到链表里面去,每个链表的节点都有一个指针指向对应的buf_pool的数据块中,并存储对应的offset。

 -(3)然后判断buf_pool是否被写满了,如果写满了,就顺着在(2)中所建立的链表的顺序,将每个链表节点所存储的512字节的数据通过pwrite写到镜像文件对应的offset的位置中去。每写完一个节点的数据,释该节点对应的buff_pool 和page_node_pool的空间。直到到达链表的尾部。

4.对所有的读请求进行拦截;

 -(1)通过该读请求的offset在基树池当中查找,如果存在该offset,那么将对应节点里所存储的512字节的数据返回便可。

 -(2)如果该读请求不存在基树池当中,那么就执行qemu原本的读请求的处理。

5.关闭镜像文件的时候:

 将每个链表节点所存储的512字节的数据通过pwrite写到镜像文件对应的offset的位置中去。每写完一个节点的数据,释该节点对应的buff_pool和page_node_pool的空间。直到到达链表的尾部。

 

转载于:https://www.cnblogs.com/jusonalien/p/4915347.html

你可能感兴趣的文章
Blog搬家吧
查看>>
2017-2018-1 20155306 20155315《信息安全系统设计基础》实验二 固件程序设计
查看>>
自定义连接池
查看>>
MySQL 索引
查看>>
应用程序不能全然结束的原因探秘及调试方法
查看>>
单元文件结构
查看>>
DOM、SAX、DOM4J、JDOM、StAX生成XML并返回XML字符串形式
查看>>
60. Permutation Sequence
查看>>
log日志 和回滚日志
查看>>
Hibernate【性能部分】
查看>>
各种抗锯齿模式略解:SSAA MSAA CSAA CFAA
查看>>
Oracle 11g中修改默认密码过期天数和锁定次数
查看>>
分布式开源调度框架TBSchedule原理与应用
查看>>
css3-无缝滚动左右滚动,且可以暂停
查看>>
161101、在Java中如何高效判断数组中是否包含某个元素
查看>>
170518、FastDFS_配置文件详解
查看>>
Scala: Case classes
查看>>
160530、memcached集群(spring集成的配置)
查看>>
2016summer 训练第一场
查看>>
1.1最基本的使用--maven的下载与安装
查看>>