kvm

kvm和qemu交互处理io流程

瘦欲@ 提交于 2021-02-15 10:57:50
1、IO虚拟化的分类 (1)全虚拟化:宿主机截获客户机对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对客户机而言非常透明,无需考虑底层硬件的情况,不需要修改操作系统。 QEMU模拟I/O的情况下,当客户机中的设备驱动程序(device driver)发起I/O操作请求之时,KVM模块中的I/O操作捕获代码会拦截这次I/O请求,然后经过处理后将本次I/O请求的信息存放到I/O共享页,并通知用户控件的QEMU程序。QEMU模拟程序获得I/O操作的具体信息之后,交由硬件模拟代码来模拟出本次的I/O操作,完成之后,将结果放回到I/O共享页,并通知KVM模块中的I/O操作捕获代码。最后,由KVM模块中的捕获代码读取I/O共享页中的操作结果,并把结果返回到客户机中。当然,这个操作过程中客户机作为一个QEMU进程在等待I/O时也可能被阻塞。 另外,当客户机通过 DMA ( Direct Memory Access ) 【DMA外接设备可以不用CPU干预,直接把数据传输到内存的技术,尽量减少CPU干预的输入/输出操作方式。(使用连续物理内存,kmalloc分配)。否则外设一有数据就要中断通知CPU,CPU去读,如果频繁就时间浪费在处理中断,IO速度慢】访问大块I/O之时,QEMU模拟程序将不会把操作结果放到I/O共享页中,而是通过内存映射的方式将结果直接写到客户机的内存中去

专家介绍KVM延长器和KVM切换器的区别

蹲街弑〆低调 提交于 2021-02-15 10:01:30
KVM 是 键盘 (keyboard)、 显示器 (video)、 鼠标 (mouse)三个英文单词的缩写。所以顾名思义KVM延长器和KVM 切换器 都和键盘显示器鼠标有关系。      KVM切换器 :就是通过一组键盘鼠标显示器可以同时控制多台电脑 计算机 主机,通过KVM切换器这个设备我们可以很方便的切换显示内容并对其进行操作,方便用户在同一界面,使用键盘热键或OSD进行 电脑 选择同时管理多个终端。主要使用的接口有:PS/2接口,USB接口, PS/2+USB混编接口以及Cat 5。常见的KVM切换器有2路、4路、8路、16路,同时对应控制电脑主机的台数。   KVM延长器 :是一种能让键盘鼠标控制和视频信号进行延长的一种 KVM 是键盘(keyboard)、显示器(video)、鼠标(mouse)三个英文单词的缩写。所以顾名思义KVM延长器和KVM切换器都和键盘显示器鼠标有关系。设备,一般是分本地端和接收端,通过网线来进行延长。KVM延长器分模拟KVM和数字KVM,常见的我们弱电安防所用到的是模拟KVM延长器,传输距离有一定限制,图像清晰,信号无延迟,且不用接入网络较为安全。而数字KVM延长器则价格较贵,需要接入网络, 布线 方便,适用于机房较大, 服务器 较分散的情况。 通过上面的解释,我们可以很清楚的明白KVM延长器和KVM切换器之间的区别,一个主要目的是进行延长

qemu创建vm和vcpu进入kvm的流程

谁说我不能喝 提交于 2021-02-14 23:00:04
kvm是一个内核模块,它实现了一个/dev/kvm的字符设备来与用户进行交互,通过调用一系列ioctl函数可以实现qemu和kvm之间的切换。 1、qemu发起KVM_CREATE_VM的ioctl创建虚拟机 qemu从vl.c/main开始,通过configure_accelerator根据当前current_machine调用对应的accel_init_machine,如果是kvm则具体是 kvm_init 。当要创建虚拟机,kvm_init函数中会s->fd = qemu_open(" /dev/kvm ", O_RDWR);打开/dev/kvm设备,获取虚拟机句柄fd,在该fd上ret = kvm_ioctl (s, KVM_CREATE_VM , type); s->vmfd = ret;此ioctl函数在kvm中的实现为kvm_main.c中kvm_dev_ioctl函数。当传入的参数为KVM_CREATE_VM时,该函数会创建一个VM,并且返回一个vm_fd,通过该vm_fd可以操作虚拟机。 2、qemu中创建虚拟机的vcpu和qemu线程关系,并切换到kvm中 在vl.c/main的最开始会module_call_init(MODULE_INIT_MACHINE)本质就是把pc_init1赋值给了mc->init。在kvm_init创建完虚拟机后,会返回到main中

什么是裸金属服务器?

纵然是瞬间 提交于 2021-02-12 06:46:45
昨天关于云计算的文章里面,我提到一个名词,叫做“裸金属服务器”。 不知道为什么,很多读者对这个东东产生了浓厚的兴趣,纷纷在后台私信问我相关的情况。 本着消灭所有知识死角的精神,今天我们就来了解一下,到底什么是裸金属服务器。 乍一看裸金属服务器这个名字,确实是让人感到困惑——服务器难道不都是金属的么?难道有木质或者塑料的? 这个“ 裸 ”字,莫非是指服务器连外壳都没有? 其实,裸金属服务器(Bare Metal Server)之所以有这么个奇怪的名字,主要是为了和虚拟化服务器划清界限。 我在昨天的文章说过,云计算的一大特点,就是从买到租,用户向云服务提供商租用计算资源。而这些租用的计算资源, 大部分 都不是物理资源,而是虚拟资源。 没错,这个“ 大部分 ”,就是意味着有特例。而 裸 金属服务器 ,就是其中一个典型特例。 裸金属服务器,也属于云计算产品 为什么在全面云化的大背景下,还要“ 开倒车 ”,提供物理服务器呢? 原因当然是因为虚拟化也有搞不定的地方。 虚拟化并不是完美无缺的。它有两个无法回避的缺陷。 首先第一点,是性能损失。 虽然虚拟化云化吹得天花乱坠,但是,毕竟引入了“第三者”,操作系统和应用程序在调用硬件资源的时候,没有直接掌控来得那么得心应手。 虚拟化 对于一些性能要求高的业务(例如高性能运算),虚拟化会带来性能延迟。如果发生密集的I/O(输入/输出)操作

linux内核调试+qemu+eclipse【转】

橙三吉。 提交于 2021-02-11 07:04:50
本文转载自: https://blog.csdn.net/WANG__RONGWEI/article/details/54922727 一、调试环境: 在ubuntu16.04下,在虚拟机里边运行的ubuntu,装32位的运行较快,选择较新的ubuntu版本是因为安装qemu、eclipse比较简单,在安装软件上节约时间。 二、安装的软件 1----安装qemu相关软件:sudo apt-get install kvm qemu libvirt-bin virtinst virt-manager virt-viewer 创建一个kvm目录,以后会用到:sudo mkdir /opt/kvm 2----安装eclipse-cdt软件,当然不是安装jdk,eclipse cdt是一个非常强大的c/c++ ide:sudo apt install eclipse-cdt。 三、下载linux内核,建eclipse工程 在ubuntu16.04版本下,最好选择跟他本身差不多的内核版本--linux-4.4。 具体可参考: http://blog.csdn.net/ustc_dylan/article/details/5991490 ,描述比较详细,只不过如果我们选择的是较新的eclipse版本,有一点差别。 1---编译内核:内核可选择放在home目录下,好处就是以后运行eclipse

kvm虚拟机管理

℡╲_俬逩灬. 提交于 2021-02-08 23:49:32
一、virt-manager创建虚机 (1)首先通过命令 virt-manager 启动图形界面: 点下面的图标创建虚机 (2)给虚机命名为 kvm1,这里选择从哪里启动虚机。如果是安装新的 OS,可以选择第一项。如果已经有安装好的镜像文件,选最后一项(如下图)。 (3)接下来需要告诉 virt-manager 镜像的位置,点击 “Browser” (4)需要在系统中上传一个镜像文件到属主机上,放到 /var/lib/libvirt/images/ 目录下,这是 KVM 默认查找镜像文件的地方。 (5)为虚拟机分配 CPU、内存和磁盘 (6)为虚拟机命名,并在安装前配置硬件参数,点击“Finish”。网络选择三节课创建的br0网桥,点击绿色“对勾”开始安装 (7)控制台弹出如下图,安装linux安装步骤安装即可: virt-manager 可以对虚机进行各种管理操作,界面直观友好,很容易上手。 同时我们也可以用命令 virsh 管理虚机,比如查看宿主机上的虚机: 二、远程管理kvm虚机 (1)上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机。其实 virt-manager 也可以管理其他宿主机上的虚机。只需要简单的将宿主机添加进来,如下图: 接下来,我们就可以像管理本地虚机一样去管理远程宿主机上的虚机了 (2)有些情况下,有一个要配置的地方。 因为

linux 连接 NAS

回眸只為那壹抹淺笑 提交于 2021-02-07 06:36:57
[root@kvm-server ~]# mount -o username=user01,password=1234567890 //192.168.31.20/share /mnt/nas Couldn't chdir to /mnt/nas: No such file or directory [root@kvm-server ~]# [root@kvm-server ~]# mkdir /mnt/nas [root@kvm-server ~]# mount -o username=user01,password=1234567890 //192.168.31.20/share /mnt/nas [root@kvm-server ~]# df -TH 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 48G 4.1G 44G 9% / devtmpfs devtmpfs 4.1G 0 4.1G 0% /dev tmpfs tmpfs 4.2G 0 4.2G 0% /dev/shm tmpfs tmpfs 4.2G 9.4M 4.1G 1% /run tmpfs tmpfs 4.2G 0 4.2G 0% /sys/fs/cgroup /dev/sda1 xfs 1.1G 189M 876M 18% /boot tmpfs

Write to QEMU guest system registers & memory?

一笑奈何 提交于 2021-02-06 13:58:09
问题 How do you write to the processor registers and specific memory addresses of a virtual system running in QEMU? My desire would be to accomplish this from a user space program running outside of QEMU. This would be to induce interrupts and finely control execution of the processor and virtual hardware. The QEMU Monitor is supposed to read parameters or do simple injects of mouse or keyboard events, but I haven't seen anything about writing. 回答1: GDB server within QEMU Monitor seems to be the

KVM克隆VM无法网卡无法启动

放肆的年华 提交于 2021-02-05 11:30:26
#在KVM中克隆出新的CentOS虚拟机时,出现如下问题: service network restart Shutting down loopback insterface: [ OK ] Bringing up loopback insterface: [ OK ] Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED] 用ifconfig查看发现缺少eth0,只有lo;用ifconfig -a查看发现多出了eth1的信息 #解决办法1: mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etcsysconfig/network-scripts/ifcfg-eth1 将eth0的mac地址改为eth1的mac地址,同时改变其DEVICE名称为eth1,再重启网络即可 #解决办法2: rm -rf /etc/udev/rules.d/70-persistent-net.rules reboot 总之,只要保证/etc/sysconfig/network-scripts/ifcfg-eth0 与/etc/udev/rules.d/70-persistent-net.rules的信息一致即可

KVM常见问题问题汇总

空扰寡人 提交于 2021-02-05 11:28:49
1、KVM中宿主机通过console无法连接虚拟机 1)为KVM客户机添加virsh console支持 http://www.linuxidc.com/Linux/2013-02/79556.htm 2)利用vnc或宿主机的桌面进入客户机vm01中添加参数 #添加ttyS0的安全许可,允许root登录: echo "ttyS0" >> /etc/securetty #在/etc/grub.conf文件中为内核添加参数: console=ttyS0 这步要注意: console=ttyS0一定要放在kernel这行中(大约在第16行),不能单独一行,即console=ttyS0是kernel的一个参数,不是单独的,如下(往右拉进度条,在最后): vim /boot/grub2/grub.cfg #grub.conf generated by anaconda #...... kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv