cpu虚拟化内存虚拟化io虚拟化(cpu虚拟化和内存虚拟化)

CPU虚拟化

 

  1. 完全虚拟化:可以依靠虚拟化层来对虚拟出虚机所需要的全部资源,这时候我们的OS是完全无感知的,并且完全不需要更改内核,这是一个纯软件驱动的虚拟化,优点是移植性较好。这种架构的情况下,用户OS对硬件发送指令会产生异常事件(因为此时OS无法直接驱动硬件,但是自己却没有感知),这些异常事件会被VMM虚拟化层捕捉到,然后VMM进行翻译向硬件发送请求。但是在intel-X86的OS中,一些敏感指令无法产生异常事件,那么就不会被捕捉,进而无法对硬件进行操作,这是完全虚拟化的一种瓶颈。但是现在完全虚拟化是进行二进制翻译,对特权指令进行二进制的翻译,提高翻译率。这对VMM的要求高。
  2. 半虚拟化:和完全虚拟化的架构一样,但是这个是需要来修改OS的内核来使得OS可以感知到自己在虚拟化层之上。用户发送特权指令是触发一个hypercall来翻译用户的指令,性能好点。
  3. 硬件辅助虚拟化:将CPU分为两种状态root mode和non-root mode,特权指令在root模式下,非特权是non-root,这种模式下VMM只是一种透传的功能,但是前提是硬件支持虚拟化。
  4. 举例说明:
    一个物理设备16核,复用率是2,然后虚拟化层给我们虚拟出了32个vCPU,那么如果我分给一个虚机16个VCPU,是对应物理的设备的一个核或者几个核,还是分别对应16个核?
    答案是16核一一对应的。算法会尽量地并行处理任务。以此来提高事件处理的速度。

 

内存虚拟化

内存复用技术,可以提高50%虚拟机的密度,最高可以提高150%,但是虚拟机的密度越高,用户的体验就越差。

1.内存共享,写时复制:多个虚机未用的空间会映射到同一个物理内存未用的空间,此时这个空间只有只读的权限。当虚机需要对内存写数据的时候,会临时开辟一个新的空间给虚机使用。

2.内存置换:如果此时虚机需要30G的内存并且都是数据跑满的情况下,但是物理内存只有20G,此时内存会拿DISK10G内存,而VMM会把热数据(访问次数较高的数据)存储在物理内存中,把冷数据(长时间不被别人访问的数据)存储在磁盘disk中,这样来回的置换,以此来提高用户的体验,这样置换的原因是假如这个disk是机械硬盘的话,用户的访问就会特别慢。体验也会变差。

3.内存气泡:VMM通过映射表把虚机内空闲的碎片化的内存拼凑起来,拼成一个大的内存,来给更多的虚机使用(注意:在实际当中,如果这些技术在都打开的情况下,那么这三种技术都会混合使用,我们是不知道是使用的哪一种,虚机的密度越高的话用户的体验就越差。)

 

I/0虚拟化

1.完全虚拟:完全使用软件来模拟真实的硬件,这样捕捉的话路径较长,性能较差。

2.半虚拟化:虚机的前驱指令会直接由VMM转发给硬件的后驱Doamin0原生驱动处理,然后驱动程序在转发给相应的外设,VMM参与较少,路径会减少,性能会变好。

3.IO-through:I/O透传:直接分配给虚拟的物理设备,此时的设备需要支持虚拟化,在VMM上安装驱动,直接映射到虚机上,VMM只是做透传作用,这样的话是最优的一种方案。

目前完全虚拟化和半虚拟化都是朝着硬件虚拟化上发展,随着硬件虚拟化的发展,VMM的瓶颈会降低,用户的体验也会大大的增加!

cpu虚拟化内存虚拟化io虚拟化(cpu虚拟化和内存虚拟化)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论