KVM原理

kvm原理学习:


Linux as a Hypervisor:

By adding virtualization capabilities to a standard Linux kernel, we can enjoy all

the fine-tuning work that has gone (and is going) into the kernel, and bring that

benefit into a virtualized environment. Under this model, every virtual machine is a regular Linux process scheduled by the standard Linux scheduler. Its memory is allocated by the Linux memory allocator, with its knowledge of NUMA and integration into the scheduler.


A normal Linux process has two modes of execution: kernel and user. Kvm adds a third mode: guest mode (which has its own kernel and user modes, but these do not interest the hypervisor at all).

三种工作模式如下:

 


kvm Components:

The simplicity of kvm is exemplified by its structure; there are two components:

● A device driver for managing the virtualization hardware; this driver exposes its capabilities via a character device /dev/kvm

● A user-space component for emulating PC hardware; this is a lightly modified qemu process,QEMU is a well known processor emulator written by French computer wizard Fabrice  Bellard.

见附件!



What is the difference between kvm and QEMU?  ##kvm和QEMU的不同点
Qemu uses emulation; kvm uses processor extensions for virtualization.


What is the difference between kvm and Xen?   ##xen和kvm的不同点 
Xen is an external hypervisor; it assumes control of the machine and divides resources among guests. On the other hand, kvm is part of Linux and uses the regular Linux 
scheduler and memory management. This means that kvm is much smaller and simpler to use.


On the other hand, Xen supports both full virtualization and a technique called paravirtualization, which allows better performance for modified guests. kvm does not 
at present support paravirtualization.


    1. KVM 所使用的方法是通过简单地加载内核模块而将 Linux 内核转换为一个系统管理程序。这个内核模块导出了一个名为 /dev/kvm 的设备,它可以启用内核的客户模式(除了传统的内核模式和用户模式)。有了 /dev/kvm 设备,VM 使自己的地址空间独立于内核或运行着的任何其他 VM 的地址空间。设备树(/dev)中的设备对于所有用户空间进程来说都是通用的。但是每个打开 /dev/kvm 的进程看到的是不同的映射(为了支持 VM 间的隔离)。KVM安装 KVM 之后,您可以在用户空间启动客户操作系统。每个客户操作系统都是主机操作系统(或系统管理程序)的一个单个进程。 

    2. KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine),2006年10月,由以色列的 Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007年2月发布的 Linux 2.6.20内核第一次包含了KVM 。增加KVM到Linux内核是 Linux发展的一个重要里程碑,这也是第一个整合到Linux主线内核的虚拟化技术。
    3. KVM 在标准 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。
    4. 一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)


    作为VMM,KVM分为两部分,分别是运行于kernel模式的KVM和运行于User模式下的Qemu模块,这里的kernel模式和User模式,实际上指的是VMX根模式下的特权级0和特权级3,KVM将虚拟机所在的运行模式称为Gues模式 当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等).而qemu-kvm是为了针对KVM专门做了修改和优化的QEMU分支.



     

     KVM的所有IO虚拟化工作时借助Qemu完成的,显著降低了实现的工作量!这是KVM的优势之一! ##看下图即可理解

    KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去作事情:还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了




  •    
  • KVM 客户机网络连接有两种方式:

    • 用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。
    • 虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。
    • 启动一台客户机后,主机上多出了一个 tap0 虚拟网络设备,这就是 qemu-kvm 为客户机虚拟的 TAP 网络设备。查看网桥可以看出 tap0 加入了网桥 br0 。客户机就是通过网桥访问的外网。


1:[root@h4 ~]# sh install.sh 
ERROR    Guest name 'linuxvm02' is already in use.
ERROR    A name is required for the virtual machine. (use --prompt to run interactively)
[root@h4 ~]# cat install.sh 
virt-install -n linuxvm02 -r 1024 --vcpus=1 -l http://192.168.1.66 --nographics --os-type=linux --os-variant=rhel5 -f /data/linuxvm02.img -s 20 -w bridge:br0   --extra-args='console=tty0 console=ttyS0,115200n8'   --connect qemu:///system
显然已经安装过了linuxvm02,如果是上一次没有安装成功,删除这个虚拟机,然后重新运行该脚本即可!
删除虚拟机有两种方式:
1.1:图形界面方式,在物理机器图形界面下,运行virt-manager ,找到自己要删除的vm,如果是active状态,先将其关闭,然后点delete按钮删除
1.2: virsh undefine linuxvm02 即可从/etc/libvirt/qemu下将配置文件删除。然后手动删除linuxvm02对应的img文件即可
### KVM虚拟机网络架构及实现原理 #### 1. 网络设备模拟与直通技术 在网络环境中,KVM 使用 QEMU 来模拟各种硬件组件,包括网卡。对于简单的网络配置,QEMU 可以为每个虚拟机提供一个或多个虚拟网卡 (vNIC),这些 vNIC 连接到由 Linux 内核管理的 TAP 设备接口[^3]。 TAP 接口是一种字符设备,它允许用户空间程序读取和写入数据包,就像操作真实的以太网适配器一样。当虚拟机发送或接收数据包时,实际上是在与对应的 TAP 设备通信。为了提高性能,在某些情况下可以采用 SR-IOV 或者 VT-d 技术来实现 PCI 直通,让虚拟机能直接访问物理网卡资源而不经过宿主机的操作系统层,从而减少延迟并提升吞吐量[^4]。 #### 2. 数据传输路径解析 在标准的工作流程下: - 当应用程序尝试通过虚拟网卡发送数据帧时,该请求会被转发给 QEMU; - QEMU 将此流量注入到关联的 TAP 设备中; - 宿主机上的 Linux 内核接收到这些来自 TAP 的数据后,按照常规路由规则决定如何继续传递它们——可能是送往其他本地连接的服务、桥接到实际的物理网络端口或是经 NAT 路径转换地址后再送出公网; - 对于进入系统的外部数据流,则反向穿过上述链路最终抵达目标 VM 中的应用层协议栈处理[^1]。 ```bash # 创建 tap0 设备并与 bridge br0 绑定的例子 ip tuntap add dev tap0 mode tap user $(whoami) brctl addif br0 tap0 ``` #### 3. 常见组网方式介绍 常见的几种 KVM 网络拓扑结构有: - **NAT 模式**: 默认设置下的简单方案,适用于测试环境。所有来宾都共享同一个 IP 地址对外通讯,内部则维持独立子网划分。 - **Bridge 桥接模式**: 提供更灵活且高效的联网选项。每台虚拟机会获得自己专属的真实 MAC 和 IP 配置,并能像普通工作站那样接入局域网参与广播/多播活动。 - **Host-only 主机仅限模式**: 构建封闭的小范围交流圈,适合开发调试阶段隔离外界干扰的同时保持各实例间互通无阻。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值