您的位置:首页 > 其它

虚拟化技术基础原理详解

2018-01-18 11:59 495 查看
Disk:
    IO Scheduler(IO调度器):
        CFQ
        deadline
        anticipatory
        NOOP

        /sys/block/<device>/queue/scheduler
linux调度器:https://www.cnblogs.com/cobbliu/p/5389556.html
Memory:
  MMU
  TLB
MMU和TLB:https://www.cnblogs.com/findumars/p/4068418.html

vm.swappiness={0..100}:使用交换分区的倾向性, 60
    overcommit_memory=2: 过量使用
    overcommit_ratio=50:
        swap+RAM*ratio
            swap: 2G
            RAM: 8G
                memory=2G+4G=6G
http://blog.csdn.net/u010616985/article/details/44943361
    充分使用物理内存:
        1、swap跟RAM一样大;swappiness=0;
        2、    overcommit_memory=2, overcommit_ratio=100:swappiness=0;
            memory: swap+ram





IPC(进程间通信):
    message(消息)
        msgmni
        msgmax
        msgmnb
    shm(共享内存)
        shmall
        shmmax
        shmmni

内存监控命令:sar, dstat, vmstat, mpstat, iostat, top, free, iotop, uptime, cat /proc/meminfo, ss, netstat, lsof, time, perf, strace
评估io工作情况:blktrace, blkparse, btt
文件系统压力测试:dd, iozone, io-stress, fio




cpu:全量CPU时间片
内存:连续、全部内存空间(0x0000,最大)
I/O:全部可用IO
虚拟化:将一个物理硬件虚拟化为多个虚拟硬件平台





1974年,Popek和Goldberg在一篇论文中定义了“经典虚拟化(Classical virtualization)”的基本需求,他们认为,一款真正意义上的VMM至少要符合三个方面的标准:
◇ 等价执行(Equivalient execution):除了资源的可用性及时间上的不同之外,程序在虚拟化环境中及真实环境中的执行是完全相同的;
◇ 性能(Performance):指令集中的大部分指令要能够直接运行于CPU上;
◇ 安全(Safety):VMM要能够完全控制系统资源;

1.1 x86平台实现虚拟化技术的挑战
x86处理器有4个特权级别,Ring 0 ~ Ring 3,只有运行在Ring 0 ~ 2 级时,处理器才可以访问特权资源或执行特权指令;运行在 Ring 0级时,处理器可以运行所有的特权指令。x86平台上的操作系统一般只使用Ring 0和Ring 3这两个级别,其中,操作系统运行在Ring 0级,用户进程运行在 Ring 3 级。
1.1.1 特权级压缩(ring compression)
为了满足上面所述的需求,VMM自身必须运行在Ring 0级,同时为了避免GuestOS控制系统资源,GuestOS不得不降低自身的运行级别而运行于Ring 3(Ring 1、2 不使用)。

此外,VMM使用分页或段限制的方式保护物理内存的访问,但是64位模式下段限制不起作用,而分页又不区分Ring 0,1,2。为了统一和简化VMM的设计,GuestOS只能和用户进程一样运行在 Ring 3。VMM必须监视GuestOS对GDT、IDT等特权资源的设置,防止GuestOS运行在Ring 0级,同时又要保护降级后的GuestOS不受Guest进程的主动攻击或无意破坏。

1.1.2 特权级别名(Ring Alias)
设计上的原因,操作系统假设自己运行于ring 0,然而虚拟化环境中的GuestOS实际上运行于Ring 1或Ring 3,由此,VMM必须保证各GuestOS不能得知其正运行于虚拟机中这一事实,以免其打破前面的“等价执行”标准。例如,x86处理器的特权级别存放在CS代码段寄存器内,GuestOS却可以使用非特权PUSH指令将CS寄存器压栈,然后POP出来检查该值;又如,GuestOS在低特权级别时读取特权寄存器GDT、LDT、IDT和TR时并不发生异常。这些行为都不同于GuestOS的正常期望。

1.1.3 地址空间压缩(Address Space Compression)
地址空间压缩是指VMM必须在GuestOS的地址空间中保留一段供自己使用,这是x86虚拟化技术面临的另一个挑战。VMM可以完全运行于自有的地址空间,也可以部分地运行于GuestOS的地址空间。前一种方式,需在VMM模式与GuestOS模式之间切换,这会带来较大的开销;此外,尽管运行于自己的地址空间,VMM仍需要在GuestOS的地址空间保留出一部分来保存控制结构,如IDT和GDT。无论是哪一种方式,VMM必须保证自己用到地址空间不会受到GuestOS的访问或修改。

1.1.4 非特权敏感指令
x86使用的敏感指令并不完全隶属于特权指令集,VMM将无法正确捕获此类指令并作出处理。例如,非特权指令SMSW在寄存器中存储的机器状态就能够被GuestOS所读取,这违反了经典虚拟化理论的要求。

1.1.5 静默特权失败(Silent Privilege Failures)
x86的某些特权指令在失败时并不返回错误,因此,其错误将无法被VMM捕获,这将导致其违反经典虚拟化信条中的“等价执行”法则。

1.1.6 中断虚拟化(Interrupt Virtualization)
虚拟化环境中,屏蔽中断及非屏蔽中断的管理都应该由VMM进行;然而,GuestOS对特权资源的每次访问都会触发处理器异常,这必然会频繁屏蔽或启用中断,如果这些请求均由VMM处理,势必会极大影响整体系统性能。

1.2  X86平台虚拟化
完整意义上的计算机由硬件平台和软件平台共同组成。根据计算机体系结构理论,其硬件平台包括CPU、内存和各种I/O设备;而软件平台则包括BIOS、操作系统、运行时库及各种应用程序等。对于主机虚拟化技术来讲,其主要负责虚拟硬件平台及BIOS,而操作系统、运行时库及各种应用程序可以使用以往在物理平台上各种现有技术及产品。

内存虚拟化






Intel和AMD分别通过EPT(ExtendedPage Tables)和NPT(NestedPage Tables)为虚拟化应用提升影子MMU的性能,并通过标记(tagged)TLB来避免虚拟机切换时频繁清写(flush)TLB以提高TLB缓存的命中率。Full-Virtualization: 完全虚拟化
    CPU不支持硬件虚拟化技术:模拟特权指令: 模拟
    CPU支持硬件虚拟化技术:VMM运行ring -1,而GuestOS运行在ring 0; HVM (Hardware-asistant VM)

para-virtualization: 半虚拟化, pv
    cpu, io, memory
io虚拟化





cpu虚拟化:

基于“二进制翻译(BinaryTranslation)”技术的完全虚拟化操作系统辅助的虚拟化,也即半虚拟化(paravirtualization)或准虚拟化硬件辅助的虚拟化Binary Translation (BT)


虚拟化模型:













KVM: Virtulization
    KVM:virtio(pv IO)




















内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: