kvm qemu内幕介绍

2023-11-01

2012-09-14 11:10  6923人阅读  评论(4)  收藏  举报
  分类:

版权声明:本文为博主原创文章,未经博主允许不得转载。

====================================
目录
1 硬件虚拟化技术背景

2 KVM的内部实现概述
  2.1 KVM的抽象对象
  2.2 KVM的vcpu
  2.3 KVM的IO虚拟化
      2.3.1 IO的虚拟化
      2.3.2 VirtIO

3 KVM-IO可能优化地方
  3.1 Virt-IO的硬盘优化
  3.2 普通设备的直接分配(Direct Assign)
  3.3 普通设备的复用

===================================

1 硬件虚拟化技术背景

	硬件虚拟化技术通过虚拟化指令集、MMU(Memory Map Unit)以及IO来运行不加修改的操作系统。

	传统的处理器通过选择不同的运行(Ring 特权)模式,来选择指令集的范围,内存的寻址方式,中断发生方式等操作。在原有的Ring特权等级的基础上,处理器的硬件虚拟化技术带来了一个新的运行模式:Guest模式[1],来实现指令集的虚拟化。当切换到Guest模式时,处理器提供了先前完整的特权等级,让Guest操作系统可以不加修改的运行在物理的处理器上。Guest与Host模式的处理器上下文完全由硬件进行保存与切换。此时,虚拟机监视器(Virtual Machine Monitor)通过一个位于内存的数据结构(Intel称为VMCS, AMD称为VMCB)来控制Guest系统同Host系统的交互,以完成整个平台的虚拟化。

	传统的操作系统通过硬件MMU完成虚拟地址到物理地址的映射。在虚拟化环境中,Guest的虚拟地址需要更多一层的转换,才能放到地址总线上:

    Guest虚拟地址 -> Guest物理地址 -> Host物理地址
                 ^               ^
                 |               |
                MMU1            MMU2

其中MMU1可以由软件模拟(Shadow paging中的vTLB)或者硬件实现(Intel EPT、AMD NPT)。MMU2由硬件提供。

	系统的IO虚拟化技术,通常是VMM捕捉Guest的IO请求,通过软件模拟的传统设备将其请求传递给物理设备。一些新的支持虚拟化技术的设备,通过硬件技术(如Intel VT-d),可以将其直接分配给Guest操作系统,避免软件开销。

[1]X86处理器的生产厂商有自己的称谓,比如英特尔将Guest模式称为non-root operation,与之相对的是root operation,本文称为host模式。


2 KVM的内部实现概述

	KVM是Linux内核的一个模块,基于硬件虚拟化技术实现VMM的功能。该模块的工作主要是通过操作与处理器共享的数据结构来实现指令集以及MMU的虚拟化,捕捉Guest的IO指令(包括Port IO和mmap IO)以及实现中断虚拟化。至于IO设备的软件模拟,是通过用户程序QEMU来实现的。QEMU负责解释IO指令流,并将其请求换成系统调用或者库函数传给Host操作系统,让Host上的驱动去完成真正的IO操作。她们之间的关系如下图所示:

    +--------------+               +--------+    
    | Qemu         |               |        |   
    |              |               |        |               
    | +---+  +----+|               | Guest  |               
    | |vHD|  |vNIC||<-----+        |        |               
    | +---+  +----+|      |        |        |               
    +--------------+      |        +--------+               
         ^                |            ^                    
         | syscall        |IO stream   |                    
         | via FDs        |            |                      
    +----|----------------|------------|--------+             
    |    |                |            v        |             
    |    v                |       +----------+  |   
    |  +--------+         +------>|          |  |
    |  |drivers |<--+             |  kvm.ko  |  |
    |  +--------+   |             +----------+  |
    |    ^          |   Host kernel             |   
    +----|----------|---------------------------+
         v          v                      
    +--------+    +---+                    
    | HDD    |    |NIC|                    
    +--------+    +---+    
                           图 1

	从Host操作系统的角度来看,KVM Guest操作系统相当于一个进程运行在系统上,普通的命令如kill、top、taskset等可以作用于该Guest。该进程的用户虚拟空间就是Guest的物理空间,该进程的线程对应着Guest的处理器。

	从Qemu的角度来看,KVM模块抽象出了三个对象,她们分别代表KVM自己,Guest的虚拟空间以(VM)及运行虚拟处理器(VCPU)。这三个对象分别对应着三个文件描述符,Qemu通过文件描述符用系统调用IOCTL来操作这三个对象,同KVM交互。此时,Qemu主要只模拟设备,她以前的CPU和MMU的模拟逻辑都被kvm.ko取代了。

2.1 KVM的抽象对象

	KVM同应用程序(Qemu)的交互接口为/dev/kvm,通过open以及ioctl系统调用可以获取并操作KVM抽象出来的三个对象,Guest的虚拟处理器(fd_vcpu[N]), Guest的地址空间(fd_vm), KVM本身(fd_kvm)。其中每一个Guest可以含有多个vcpu,每一个vcpu对应着Host系统上的一个线程。

	Qemu启动Guest系统时,通过/dev/kvm获取fd_kvm和fd_vm,然后通过fd_vm将Guest的“物理空间”mmap到Qemu进程的虚拟空间,并根据配置信息创建vcpu[N]线程,返回fd_vcpu[N]。然后Qemu将操作fd_vcpu在其自己的进程空间mmap一块KVM的数据结构区域。该数据结构(下图中的shared)用于同kvm.ko交互,包含Guest的IO信息,如端口号,读写方向,内存地址等。Qemu通过这些信息,调用虚拟设备注册的回调函数来模拟设备的行为,并将Guest IO请求换成系统请求发送给Host系统。由于Guest的地址空间已经映射到Qemu的进程空间里面,Qemu的虚拟设备逻辑可以很方便的存取Guest地址空间里面的数据。三个对象之间的关系如下图所示:
                            
    +----------+            |         +--------+
    | Qemu     | Host user  |         |        |
    |          |            |         |        |
    |          |            |         | Guest  |
    |  +------+|            |         | user   |
    |  |shared||            |         |        |
    |  +------+|            |         |        |
    |       ^  |            |         |        |
    +-------|--+            |         |        |
        |   |               |         |        |
     fds|   |               |         |        |
  ------|---|---------------|         |--------|
        |   |               |         |        |
        v   v   Host kernel |         | Guest  |
     +---------+            |         | kernel |
     |         |            |         |        |
     |  kvm.ko |----+       |         |        |
     |         |    |fd_kvm |         |        |
     +---------+    |       |         +--------+
                    v                     ^
                  +----+       fd_vm      |
                  |vmcs|----+--------------
      +------+    +----+    |          +------+
      | host |              |          | Guest|
      | mode |              |fd_vcpu   | mode |       
      +------+              |          +------+
          ^                 v             ^
          |             +-------+         |
          | vm exit     |  Phy  | vm entry|
          +-------------|  CPU  |---------+
                        +-------+
                           图 2

	图中vm-exit代表处理器进入host模式,执行kvm和Qemu的逻辑。vm-entry代表处理器进入Guest模式,执行整个Guest系统的逻辑。如图所示,Qemu通过三个文件描述符同kvm.ko交互,然后kvm.ko通过vmcs这个数据结构同处理器交互,最终达到控制Guest系统的效果。其中fd_kvm主要用于Qemu同KVM本身的交互,比如获取KVM的版本号,创建地址空间、vcpu等。fd_vcpu主要用于控制处理器的模式切换,设置进入Guest mode前的处理器状态等等(内存寻址模式,段寄存器、控制寄存器、指令指针等),同时Qemu需要通过fd_vcpu来mmap一块KVM的数据结构区域。fd_vm主要用于Qemu控制Guest的地址空间,向Guest注入虚拟中断等。

2.2 KVM的vcpu
	
	如前文所述,KVM的vcpu对应着host系统上的一个线程。从Qemu的角度来看,她运行在一个loop中:

	for (;;) {
		kvm_run(vcpu);
		switch (shared_data->exit_reason) {
		...
		case KVM_IO: 
			handle_io(vcpu);
			break;
		case KVM_MMIO:
			handle_mmio(vcpu);
			break;
		...
		}
	}

该线程同Guest的vcpu紧密相连。如果我们把线程的执行看作Guest vcpu的一部分,那么从Host的角度来看,该vcpu在三种不同的上下文中运行:Host user/Host kernel/Guest,将运行于一个更大的循环当中。该vcpu的运行逻辑如下图:

      Host user   |  Host kernel  | Guest mode   |
                  |               |              |
                  |               |              |
 +->kvm_run(vcpu)-------+         |              | 
 |                |     v         |              |
 |                | +->vm entry----------+       |     
 |                | |             |      v       |
 |                | |             |   Execute    |
 |                | |             |   Natively   |
 |                | |             |      |       |
 |                | |  vm exit<----------+       |  
 |                | |    |        |              |  
 |                | |    |        |              |
 |            Yes | |    v        |              |   
 |     +----------------I/O ?     |              |    
 |     |          | |    | No     |              |
 |     |          | |    |        |              |      
 |     |          | |    v        |              |
 |     v      Yes | |  Signal     |              |
 +--Handle IO<---------Pending?   |              |
                  | |    | No     |              |
                  | +----+        |              |
                           图 3

实际上,在host上通过ps命令看到的关于vcpu这个线程的运行时间正是这三种上下文的总和。

2.3 KVM的IO虚拟化

2.3.1 IO的虚拟化
	
	传统系统中,设备都直接或间接的挂在PCI总线上。PCI设备通过PCI配置空间以及设备地址空间接收操作系统的驱动请求和命令,通过中断机制通知反馈操作系统。配置空间和设备地址空间都将映射到处理器Port空间或者操作系统内存空间中,所以设备的软件模拟需要VMM将相关的Guest PIO和MMIO请求截获,通过硬件虚拟化提供的机制将其传送给软件。模拟软件处理完后再通过VMM提供的虚拟中断机制反馈Guest。如下图所示:

        +-----------------------------------+
        | +--------------+                  |   
        | | PCI config   |     +----------+ |
        | +--------------+<--->| driver   | | 
        | +--------------+<--->|          | | 
        | | Device memory|     +----------+ |
        | +--------------+           ^      |   
        |       ^                    |      |   
        +-------|--------------------|------+  
                |                    | vINTR via VMM    
PIO/MMIO via VMM|         +----------+           
                v         |                       
         +------------------------+    
         | +--------+  +--------+ |    
         | |  PCI   |  | Device | |    
         | | config |  | memory | |  Virtual Device    
         | +--------+  +--------+ |              
         +------------------------+    
                      |   
                      v   
                +------------+
                |host driver |
                +------------+
                             图 4

	虚拟设备的软件逻辑放在用户层也可以放在内核中。完全的虚拟设备模拟,可以处理在Guest中不加修改的驱动请求。通常这将消耗大量的处理器cycle去模拟设备。如果可以修改或者重写Guest的驱动代码,那么虚拟设备和驱动之间的IO接口可以根据虚拟化的特性重新定义为更高层更加高效的接口,如下图所示:

        +----------------+
        |                |
        | +-----------+  |
        | |para-driver|  |
        | +-----------+  |
        +-------^--------+
                |         
                | new I/O interface via VMM
                v
            +---------+                      
            |Virtual  |                       
            |device   |                       
            +---------+                       
                |                             
                v
           +------------+
           |host driver |
           +------------+
                          图 5

KVM的virtio正是通过这种方式提供了高速IO通道。

	除了软件模拟,现有的硬件虚拟化技术还可以将一些支持虚拟化技术的新兴硬件直接分配给Guest。除了需要支持虚拟化技术的硬件(可以发起remmappable的MSI中断请求),设备的直接分配一般还需要主板上的芯片以及CPU支持,比如英特尔的VT-d技术。支持虚拟化技术的硬件平台主要做两件事,一个是DMA Remapping,将DMA请求中的Guest的物理地址映射到Host的物理地址,另一个是中断Remapping,将能remappable的中断请求根据由VMM设置,位于内存的IRT(Interrupt Remapping Table)发送到指定的vcpu上。

	PC平台上,通常北桥(或者类似结构的root-complex)连接着CPU、内存以及外设。用于DMA Remapping和中断Remapping的硬件逻辑位于北桥中。如下所示:

      +-------------+
      |cpu0, cpu1...|              
      +-------------+    
            ^    
            |        <-- System Bus  
            |                |   
            v                v   
   +---------------------+  
   |  North Bridge       |   
   |                     |       +--------+
   |    +--------+       |<----->| Memory |
   |    |  vt-d  |       |       +--------+
   |    +--------+       |   
   +---------------------+   
         ^            ^          
         |            |   
         v            v    
    +--------+    +--------+
    | PCI-e  |    | South  |<-----> PCI legacy devices...
    | device |    | Bridge |
    +--------+    +--------+
                            图 6

目前,只有支持MSI的PCI/PCI-e设备才能直接分配给Guest。其中PCI-e设备可以直接与北桥相连或者桥连,然后单独分配给一个Guest。在一个桥后的所有的桥连PCI设备只能作为一个整体分配给一个Guest。KVM在硬件虚拟化的平台上支持PCI-e/PCI设备的直接分配。

2.3.2 VirtIO

	VirtIO为Guest和Qemu提供了高速的IO通道。Guest的磁盘和网络都是通过VirtIO来实现数据传输的。由于Guest的地址空间mmap到Qemu的进程空间中,VirtIO以共享内存的数据传输方式以及半虚拟化(para-virtualized)接口为Guest提供了高效的硬盘以及网络IO性能。其中,KVM为VirtIO设备与Guest的VirtIO驱动提供消息通知机制,如下图所示:

     +---------------+
     |  Qemu         |
     |    +--------+ |        +-------------------+
     |    | VirtIO | |        | +---------+       |
     |    | Device | |        | | VirtIO  | Guest |
     |    +--------+ |        | | Driver  |       |  
     +------|--^-----+        | +---------+       |  
            |  |              +---|---^-----------+  
      irqfd |  |              PIO |   |               
      fd_vm |  |ioeventfd         |   |vInterrupt             
   ---------|--|------------------|---|------------
            v  |                  v   |
        +----------+         +--------------+ Host
        | eventfd  |<------->|  KVM.ko      | kernel
        | core     |         |              |
        +----------+         +--------------+
                           图 7

如图所示,Guest VirtIO驱动通过访问port空间向Qemu的VirtIO设备发送IO发起消息。而设备通过读写irqfd或者IOCTL fd_vm通知Guest驱动IO完成情况。irqfd和ioeventfd是KVM为用户程序基于内核eventfd机制提供的通知机制,以实现异步的IO处理(这样发起IO请求的vcpu将不会阻塞)。之所以使用PIO而不是MMIO,是因为
KVM处理PIO的速度快于MMIO。


3 KVM-IO可能优化地方

3.1 Virt-IO的硬盘优化

	从图1中可以看到,Guest的IO请求需要经过Qemu处理后通过系统调用才会转换成Host的IO请求发送给Host的驱动。虽然共享内存以及半虚拟化接口的通信协议减轻了IO虚拟化的开销,但是Qemu与内核之间的系统模式切换带来的开销是避免不了的。
	目前Linux内核社区中的vhost就是将用户态的Virt-IO网络设备放在了内核中,避免系统模式切换以及简化算法逻辑最终达到IO减少延迟以及增大吞吐量的目的。如下图所示:

                             +-------------------+
                             | +---------+       |
                             | | VirtIO  | Guest |
                             | | Driver  |       |  
                             | +-----+---+       |  
                             +---|---^-----------+  
                             PIO |   |               
                                 |   | vInterrupt             
   ------------------------------|---|--------------
                                 v   |
        +----------+         +--------------+  Host
        | Vhost    |<------->|  KVM.ko      |  kernel
        | net      |         |              |
        +----^-----+         +--------------+
             |               
             |               
         +---v----+          
         | NIC    |          
         | Driver |          
         +--------+      
                             图 8

	目前KVM的磁盘虚拟化还是在用户层通过Qemu模拟设备。我们可以通过vhost框架将磁盘的设备模拟放到内核中达到优化的效果。

3.2 普通设备的直接分配(Direct Assign)

	如前文所述,目前只有特殊的PCI设备才能直接分配给相应的Guest,即VMM-bypass,避免额外的软件开销。我们可以在KVM中软实现DMA以及中断的remapping功能,然后将现有的普通设备直接分配给Guest。如下图所示:

               +----------------+
               |  Guest         |
               |  +---------+   |
     +-------->|  | Driver  |   |
     |         |  +---------+   |
     |         +------------^---+
   D |              |       |    
   M |      DMA Req.|       | vINTR
   A |              |       |
     |      +-------|-------|----------+   
   O |      |       v KVM   |          |  
   p |      |   +------------------+   |  
   e |      |   | DMA remmapping   |   |              
   r |      |   |                  |   |  
   a |      |   | INTR remmapping  |   |              
   t |      |   +-----------^------+   |  
   i |      +-------|-------|----------+  
   o |              |       | INTR        
   n |              v       |             
     |              +---------+           
     +------------->| Deivce  |           
                    +---------+
                             图 9

这将大大减少Guest驱动同物理设备之间的路径(省去了KVM的涉入),去掉了虚拟设备的模拟逻辑,不过IO性能的提高是以增加KVM的逻辑复杂度的代价换来的。此时,IO的性能瓶颈从Qemu/KVM转移到物理设备,但是IO的稳定性、安全性将会更加依赖于KVM的remapping逻辑实现。

3.3 普通设备的复用

	在普通设备的直接分配的基础上,我们甚至可以在多个Guest之间复用设备,好比m个进程跑在n个处理器上一样(n < m)。比如将一个硬盘分成多个区,每一个分区作为一个块设备直接分配给Guest;或者直接将n个网卡分配给m个Guest(n < m)。其中磁盘的复用,只需在KVM中添加分区管理的逻辑,而网卡的复用则要复杂一些:KVM需要为设备提供多个设备上下文(每一个设备上下文对应着一个Guest),同时还需要提供算法逻辑对设备上下文进行切换和调度。如下图所示:
                                                 
                        |                  KVM   |
                        |  Device context        |
                        |  queue                 |
           +------+     |     +-+                |
           |Guest |---------->| |                |
           -------+     |     +-+                |
                        |      |                 |
           +------+     |     +-+                |
           |Guest |---------->| |   +----------+ |
           +------+     |     +-+   | Device   | |
                        |      |    | Scheduler| |
           +------+     |     +-+   +----------+ |
           |Guest |---------->| |-----+          |
           +------+     |     +-+     |          |
                        |          +--v--------+ |
                        | Current--->+--+  DM  | |     +-----+
                        | Context  | +--+------------->| NIC |
                        |          +-----------+ |     +-----+
                        |                        |

                               图 10

其中,Device Modle(DM)实现前文提到的remapping逻辑,Device Scheduler用于选择和切换设备上下文实现物理设备的复用。在普通设备直接分配的基础上,通过对现有普通设备的复用,将会带来廉价、灵活、高效的IO性能。与之相对的是,目前已经有支持SR-IOV的网卡,从硬件上实现复用功能,支持多个(静态,即最大数目是内置的)虚拟的PCI网卡设备,价格昂贵,且受到一个网口总带宽有限的限制(软件复用技术,可以复用多个网卡,进而提高系统总的带宽)。

参考:
1[代码] qemu-kvm. git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
2[代码] Linux-2.6{/virt/kvm/*, arch/x86/kvm/*, drivers/virtio/*, drivers/block/virtio_blk.c, drivers/vhost/*}
3[手册] Intel® Virtualization Technology for Directed I/O
4[手册] Intel® 64 and IA-32 Architectures Software Developer’s Manual 3B.
5[论文] Towards Virtual Passthrough I/O on Commodity Devices. 2008.
6[论文] kvm: the Linux Virtual Machine Monitor. 2007.
7[论文] virtio: Towards a De-Facto Standard For Virtual I/O Devices. 2008
8[论文] High Performance Network Virtualization with SR-IOV. 2010.
9[论文] QEMU, a Fast and Portable Dynamic Translator. 2005.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kvm qemu内幕介绍 的相关文章

  • KVM虚拟机创建功能详细讲解

    KVM虚拟机创建功能详细讲解 一 KVM虚拟机创建的用户操作 对于用户或者管理员来说 xff0c 虚拟机的创建有着很多的方法 xff0c 例如 xff1a kvm自带命令行工 具 使用virsh命令来创建 使用具有图形界面的virt man
  • kvm虚拟化_KVM 虚拟化环境搭建 - WebVirtMgr

    前文 KVM 虚拟化环境搭建 ProxmoxVE 已经给大家介绍了开箱即用的 PVE 系统 xff0c PVE 是方便 xff0c 但还是有几点问题 xff1a 第一 xff1a 始终是商用软件 xff0c 虽然可以免费用 xff0c 但未
  • Centos7搭建KVM虚拟化环境

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 1 查看系统版本 root 64 openstack cat etc centos release CentOS Linux releas
  • 如何在 Ubuntu 20.04 上安装 Kvm

    KVM 基于内核的虚拟机 是内置于 Linux 内核中的开源虚拟化技术 使用 KVM 运行多个 Linux 或 Windows 来宾虚拟机 每个来宾都与其他来宾完全隔离 并拥有自己的操作系统和专用虚拟硬件 例如 CPU 内存 网络接口和存储
  • linux编译安装kvm、qemu

    kvm作为主流虚拟化产品 其实它的用户层使用的是qemu 所以要安装使用kvm 一般需要安装kvm kmod以及qemu两部分 安装kvm kmod 1 首先下载kvm kmod源码并解压 2 进入源码目录 3 configure kern
  • qemu-system-x86_64方式创建KVM虚拟机

    一 QEMU介绍 QEMU是一款高效而实用的模拟器及虚拟机监管器 Virtual Machine Monitor VMM 主要提供两种功能给用户使用 一是作为用户态模拟器 利用动态代码翻译机制来执行不同于主机架构的代码 二是作为虚拟机监管器
  • CentOS 7 virt-install 命令行方式(非图形界面)安装KVM虚拟机

    环境及网卡配置请参考 https blog csdn net mshxuyi article details 98305715 创建镜像目录 mkdir p home vms virt install 配置文件 virt install n
  • KVM源代码分析4:内存虚拟化

    终于把KVM源代码分析3 CPU虚拟化写完了 虽然还有run的部分另外在写 还是先看一下内存虚拟化部分 代码版本 https git kernel org pub scm linux kernel git stable linux stab
  • kvm虚拟化技术

    前言 kvm是一种虚拟化技术 使用 概念 kvm是linux内核的模块 它需要CPU支持 采用硬件辅助虚拟化技术Intel VT AMD V 内存的相关技术如Intel的EPT和AMD的RVI 是底层虚拟化内核模块 检查cpu是否支持虚拟化
  • Linux 桌面虚拟化技术 KVM

    KVM 是 Kernel based Virtual Machine 的简称 是一个开源的系统虚拟化模块 自Linux 2 6 20之后集成在Linux的各个主要发行版本中 它使用Linux自身的调度器进行管理 所以相对于Xen 其核心源码
  • 使用VMware完成KVM虚拟化实验并运行Centos

    本次实验在VMware中的Ubuntu18内安装KVM并运行centos 首先 在VMware下开启虚拟化 更新软件索引 apt get update 安装依赖 apt get install qemu kvm qemu virt mana
  • 虚拟化原理与应用第一次作业

    知识点 一 选择题 1 Intel对虚拟化技术的支持不包括以下哪项技术 D A VT x B VT i C VT d D AMD V 2 如果一个虚拟机因为错误而崩溃 同一主机上的其他虚拟机不会受到影响 这属于虚拟机的哪个属性 A A 隔离
  • KVM添加文件夹存储

    创建基于文件夹的存储池 1 定义一个存储池 virsh pool define as kvm images dir kvm images 2 查看创建的存储池信息 virsh pool list all 3 建立基于文件夹的存储池 virs
  • 详解KVM虚拟化原理

    详解KVM虚拟化原理 KVM架构 KVM Kernel based Virtual Machine 包含一个为处理器提供底层虚拟化 可加载的核心 模块kvm ko kvm intel ko或kvm amd ko 使用QEMU QEMU KV
  • KVM无法进入virt-manager,提示Unable to init server: Could not connect: Connection refused

    1 KVM virt manager不能以root用户进入 需切换成普通用户或者sudo用户 2 需要配置ssh 密钥 3 需要安装Xming或者Xmanager等KVM可用等图形界面软件 无法连接kvm 设置用户到组 一定要当前用户不要r
  • kvm-ovirt-vdsm安装记录

    小技巧 1 fedaro 19自动查找最快yum源 yum install yum fastestmirror 2 libvirt启动sasl添加用户 saslpasswd2 c a libvirt admin 3 查看kvm模块 lsmo
  • 60 KVM Skylark虚拟机混部-安装和配置

    文章目录 60 KVM Skylark虚拟机混部 安装和配置 60 1 安装Skylark 60 1 1 硬件要求 60 1 2 软件要求 60 1 3 安装方法 60 2 配置Skylark 60 2 1 日志 60 2 2 功耗干扰控制
  • kvm之多网卡队列开启设置

    背景 目前基于dpdk数据平面开发套件的应用越来越多 而dpdk对于上层应用运行时 服务的进程数多于1时 要求网卡支持多队列 否则项nginx这种多进程应用程序只能再默认配置下运行 只能启动一个worker 要求 在kvm虚机中将网卡设置支
  • x86 PIC,QEMU 在所有 CPU 上引发中断是否正确?

    我最近不得不解决 x86 PIC 的专有操作系统问题 其中操作系统预期定时器中断仅在 CPU0 上 我启用了 IO APIC 来解决这个问题并进行了 CPU 控制 因此中断仅到达 CPU0 问题解决了 有人告诉我 我们的硬件已经损坏 无法做
  • 当 KVM-QEMU 打开时,Intel-PT 不记录任何数据包

    我尝试在主机上使用 Intel PT 同时在客户机上运行通用软件程序 所以我期望主机中运行的 Intel PT 将记录所有相关数据包 如 PIP FUP TSC 等 以及所有基于 VM 的数据包 如 VMCS 我使用以下命令 perf kv

随机推荐

  • windows多个服务器之间共享文件夹,windows server 2008 R2 部署NFS,实现多台服务器间、客户端间的共享目录。...

    如何通过Windows Server 2008 R2建立NFS存储服务 通过Windows Server 2008 R2 我们可以很容易地将其作为一台NFS存储服务器 得到一个NFS软存储 轻松解决某些环境下的问题 接下来以Windows
  • RAID5容量计算方式:单块磁盘容量*(n-1)

    2017 02 07 15 05 37 RAID 5因为要容错 并行读取 就是少一个盘符的容量 容错备份用了 话说RAID 0更是减少一半盘符容量 具体的懒得自己打了 copy过来了 RAID5的可用磁盘数为 n 1 也就是说磁盘做RAID
  • ubuntu openGL入门(旧版本)

    1 环境安装 1 1
  • 导出文件之CSV格式

    import CsvExportor from csv exportor userData表格数据是从后端数据库获取来的 let csvData this userData 表头 与数据库字段一一对应 let head ID 用户名 联系人
  • Unity3D 简单待机状态图片循环淡入淡出

    说明 由于近期项目需求 在网上找了淡入淡出的代码 但都是两张图片淡入淡出结束后就没有了 可能我没找到其他好的作品 所以我做了简单的扩展 简单思路 既然待机状态下的图片淡入淡出切换 所以 首先要判断何时为待机状态 即屏幕没有任何操作的情况下
  • gdb加载so库符号失败的解决方法

    问题现象 gdb调试core文件或进程时 出现加载so库符号失败 错误信息如下 warning Could not load shared library symbols for libadd so Do you need set soli
  • VUE多页面配置

    vue config js 配置 module exports pages index page 的入口 entry src index main js 模板来源 template public index html 在 dist inde
  • 爬取杂志所有期刊的文章案例

    爬取杂志所有期刊的文章案例 前言 这次给大家带来一个简单的爬虫案例 就是爬取意林杂志所有期刊的文章 本案例网址 https www yilinzazhi com 一 分析网页 可以看出这个网站的网页很规整 而且没有反爬 每一年的期刊日期都是
  • Flutter绘制系列03---绘制图片文字

    1 绘制图片系列 因为读取图片是一个异步的操作 在读取完毕之后 需要重新渲染界面 也就是可变状态 现在要有一个概念 画布只承担绘制工作 一切数据的来源由使用者来提供 也就是将ui Image对象作为参数传递給PaperPainter 画板质
  • PowerVM 分区快速划分配置工具的使用方法

    在 PowerVM 虚拟化配置实施时 管理员经常要面对数十台物理服务器 数百个分区 如果采取手工配置与实施 工作量大 繁琐 且会造成大量的重复劳动 针对这种情况 IBM 系统科技实验室服务部推出了 PowerVM 分区快速划分与配置工具 P
  • flask - 定义API接口

    flask自行定义API接口 并且可以实现接口调试的增删查改 需要两个工具 pip install flask restful pip install flask marshmallow 初始化app 初始化app的两种方式 Api app
  • 用Python实现PDF转Word文档

    Refer to 只需2行代码 轻松将PDF转换成Word Introduce 要用Python实现PDF转Word 需要通过python内的PYMuPDF库提取PDF文件中的数据然后采用python docx库解析内容的布局 段落 图片
  • php中session超时严格控制的解决方案

    php中session默认是30分钟超时 但是有的时间压根就没到30分钟就自动超时了 这对很多操作带来不便 下面我们来看看解决30分钟超时的办法 第一种回答 最常见的一种回答是 设置Session的过期时间 也就是session gc ma
  • 荒野大镖客ol 服务器位置,荒野大镖客OL盗贼据点分布位置

    玩家们好 本次小编为大家介绍一下荒野大镖客OL盗贼据点分布位置 一起来看看吧 有关盗贼据点的相关事项 1 地点都差不多不会变 最多是稍有一点点偏差 这一点我很确定 因为同地点我刷过两三次 2 如果其它玩家灭过该位置的盗贼据点的话 一定时间内
  • “errcode“:60020,“errmsg“:“not allow to access from your ip,from ip: 183.198.X.X

    企业微信开发过程中 添加组织人员遇到的问题 主要是这个ip没有被认可 需要添加白名单 步骤如下 管理工具 通讯录同步 通讯录同步 企业可信IP 配置本地ip加入白名单即可
  • 一枚芯片的实际成本是多少?(2)晶片的成本

    晶片的成本 由于在将晶圆加工 切割成晶片的时候 并不是能保证100 利用率的 因而存在一个成品率的问题 所以晶片的成本用公式表示就是 晶片的成本 晶圆的成本 每片晶圆的晶片数 晶片成品率 由于晶圆是圆形的 而晶片是矩形的 必然导致一些边角料
  • 【Kubernetes】神乎其技的K8s到底是什么,为什么被越来越多人使用

    欢迎来到本文 个人简介 陈童学哦 目前学习C C 算法 Python Java等方向 一个正在慢慢前行的普通人 系列专栏 陈童学的日记 其他专栏 C STL 感兴趣的小伙伴可以看看 希望各位 点赞 收藏 留言 万物从心起 心动则万物动 前言
  • 自定义训练大型语言模型(LLM):带有代码示例的详细指南

    自定义训练大型语言模型 LLM 带有代码示例的详细指南 这篇文章提供了一个综合指南 描述了关于如何使用代码示例和实例来自定义训练大型语言模型 例如GPT 4 的方法 近年来 大型语言模型 LLM 如GPT 4因其在自然语言理解和生成方面的惊
  • 如何在VC++IDE 环境下生成.MAK文件

    转载自以下 同样只适用于EVC VC6 不适用于VS2003及以上 http blog csdn net lantian1099 article details 1833253 通过VC IDE 环境中的 TOOLS gt OPTIONS
  • kvm qemu内幕介绍

    kvm qemu内幕介绍 标签 虚拟化io数据结构linux内核优化磁盘 2012 09 14 11 10 6923人阅读 评论 4 收藏 举报 分类 linux 56 版权声明 本文为博主原创文章 未经博主允许不得转载 目录 1 硬件虚拟