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

  

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的空间。直到到达链表的尾部。

gearcache在qemu-kvm虚拟化平台下的实现的更多相关文章

  1. 理解 Linux 网络栈(3):QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端)

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

  2. Qemu/kvm虚拟化源码解析学习视频资料

    地址链接:tao宝搜索:Linux云计算KVM Qemu虚拟化视频源码讲解+实践​https://item.taobao.com/item.htm?ft=t&id=646300730262 L ...

  3. kvm虚拟化平台搭建入门

    KVM虚拟化有两种网络模式:1)Bridge网桥模式2)NAT网络地址转换模式Bridge方式适用于服务器主机的虚拟化.NAT方式适用于桌面主机的虚拟化. 环境: 本次实验要开启VMWare中对应Ce ...

  4. KVM虚拟化平台环境部署

    一:安装依赖包 二:配置网卡 三:配置环境 实验环境: KVM01   192.168.200.10 关闭防火墙及相关的安全机制 [root@KVM01 ~]# systemctl stop fire ...

  5. qemu kvm 虚拟化

    虚拟化: KVM是一个基于Linux内核的虚拟机,属于完全虚拟化.虚拟机监控的实现模型有两类:监控模型(Hypervisor)和宿主机模型(Host-based).由于监控模型需要进行处理器调度,还需 ...

  6. kvm虚拟化平台搭建

    一.虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模 拟多CPU并行,允许一个平台同时运行多个操 ...

  7. Linux 部署KVM虚拟化平台

    简单介绍 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案.KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Lin ...

  8. KVM虚拟化技术

    KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machi ...

  9. KVM虚拟化技术实战全过程

    今天准备开始.................... centos安装-kvm 教程: http://www.linuxidc.com/Linux/2017-01/140007.htm http:// ...

随机推荐

  1. 使用JQuery.slideBox实现图片滚动效果

    1.下载JQuery.slideBox和jquery插件,并引用 <link href="css/jquery.slideBox.css" rel="stylesh ...

  2. Fiddler抓包工具手机添加代理后连不上网

    fiddler工具给手机设置代理之后,手机竟然上不了网了,尝试了N种解决方法,终于给解决了,因此,记录下来以备不时之需. 1.fiddler给手机添加代理 打开fiddler工具->Tools- ...

  3. 解决静态utils里面注入mapper对象

    项目中需要在一个utils工具类中,调用mapper对象来进行功能实现,然而静态方法里面直接注入会报空指针的错误,网上查了一些资料得出如下解决办法 重点步骤: 1,utils类上面添加@Compone ...

  4. POJ2014 Flow Layout

      Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3161   Accepted: 2199 Description A f ...

  5. mongodb按照日期分组统计

    目录 1.使用时间格式化方法 2.进行时间补偿(默认当前时区是东八区,即8x3600x1000=28800000) mongodb的默认时间是格林尼治时间,如果是要按照日期进行分组需要注意!!!. 解 ...

  6. 转 asterisk拨号规则

    asterisk拨号规则 一.前言     本文档以asterisk-1.4.32为基础写作而成,可能和其他版本有些区别. 二.Asterisk dialplan 基本结构 Asterisk dial ...

  7. Spring Boot+Profile实现不同环境读取不同配置

    文件结构如下: 但是官方推荐放在config文件夹下. 作用: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中.prod环境下的配 ...

  8. Spring基于Java的JSR-250注解

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration/spring-jsr250-annot ...

  9. paramiko连接sshd使用的hostkey

    1.sshd的hostkey设置: cat /etc/ssh/sshd_config 里面有rsa/dsa/ecdsa/ed25519 2.查看paramiko的keys选择顺序,如图所示 3.由以上 ...

  10. dnsmasq possible DNS-rebind attack detected错误

    最近在做openwrt的平台,dns使用的是dnsmasq,但是通过板子上网,将PC的dns设置成板子的时候,发现百度等都可以,但是公司邮箱打不开.公司邮箱的域名 xx-xx-notes.xxx.co ...