qemu

QEMU 和 Ceph 的 I/O QoS 实现

依然范特西╮ 提交于 2020-05-05 15:38:00
目录 文章目录 目录 令牌桶算法 漏桶算法 前端 QoS:通过 QEMU 的块设备 IO 限速机制进行限速 后端 QoS:通过 librbd 的镜像 IO 限速机制进行限速 总结 参考文章 令牌桶算法 令牌桶算法是一个非常老牌的 I/O 控制算法,在网络、存储 I/O 上都有着广泛的应用。即:一个固定容量的桶装着一定数量的令牌,桶的容量即令牌数量上限。桶里的令牌每隔固定间隔补充一个,直到桶被装满。一个 IO 请求将消耗一个令牌,如果桶里有令牌,则该 IO 请求消耗令牌后放行,反之则无法放行。对于限制 IO 请求 bps,只需让一个 IO 请求消耗 M 个令牌即可,N 即为此 IO 请求的字节数。 令牌桶算法可以达到以下效果: 令牌桶算法可以通过控制令牌补充速率来控制处理 IO 请求的速率; 令牌桶算法允许一定程度的突发,只要桶里的令牌没有耗尽,IO 请求即可立即消耗令牌并放行,这段时间内 IO 请求处理速率将大于令牌补充速率,令牌补充速率实际为平均处理速率; 令牌桶算法无法控制突发速率上限和突发时长,突发时长由实际 IO 请求速率决定,若实际 IO 请求大于令牌补充速率且速率恒定,则: 突发时长 = 令牌桶容量 / (实际 IO 请求速率 - 令牌补充速率) 。 在令牌桶算法的描述中,有一个条件是无强制约束的,那就是在桶里的令牌耗尽时,无法放行的 IO 请求该怎么处理

跟踪分析Linux内核5.0系统调用select处理过程

冷暖自知 提交于 2020-05-03 21:47:13
跟踪分析Linux内核5.0系统调用select处理过程 学号:282 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为 系统调用 (system call)的接口呈现给用户。 系统调用 把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。 一、实验目的 基于Linux5.0.1内核和孟宁老师的MenuOS,追踪系统调用的过程。 二、实验步骤 环境搭建 编译5.0.1内核 # 解压 mkdir ~/LinuxKernel tar -xv -f ~/Download/linux-5.0.1.tar.xz -C ~/LinuxKernel # 配置编译 cd ~/LinuxKernel/linux-5.0.1 make menuconfig # 基于文本选单的配置界面 通过方向键,选择 kernel hacking-->Compile-time checks and compiler options-->compile the kernel with debug info Save保存后退出。 # 编译 make #

Linux内核系统调用处理过程

放肆的年华 提交于 2020-05-03 21:01:21
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 学号末三位: 168 下载并编译Linux5.0 1 xz -d linux- 5.0 . 1 . tar .xz 2 3 tar -xvf linux- 5.0 . 1 . tar 4 5 cd linux- 5.0 . 1 View Code 下载完成之后,依次执行: make menuconfig,sudo apt-get install libncurses5-dev libncursesw5-dev,make menuconfig 接着,制作跟系统文件: 1 cd .. 2 mkdir rootfs 3 git clone https: // github.com/mengning/menu.git 4 cd menu 5 sudo apt install gcc - multilib 6 gcc -pthread -o init linktable.c menu.c test.c -m32 - static 7 cd ../ rootfs 8 cp ../menu/init ./ 9 find . | cpio -o -Hnewc | gzip - 9 > ../rootfs.img 然后启动menuOS: qemu-system-i386 -kernel

QEMU和QEMU-KVM的关系

荒凉一梦 提交于 2020-05-03 20:50:24
不同的基于KVM的虚拟化平台,可能会采用不同的虚拟化组件,目前主流的采用QEMU-KVM组件,但在不同的产品里版本有所不同,功能也有差异,下面就几个概念进行梳理下 KVM:Kernel-Based Virtual Machine 基于内核的虚拟机,是Linux内核的一个可加载模块,通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层,需要x86架构的,支持虚拟化功能的硬件支持(比如Intel VT,AMD-V),是一种全虚拟化架构。KVM在2007年年2月被导入Linux 2.6.20内核中。从存在形式来看,它包括两个内核模块:kvm.ko 和 kvm_intel.ko(或kvm_amd.ko),本质上,KVM是管理虚拟硬件设备的驱动,该驱动使用字符设备/dev/kvm(由KVM本身创建)作为管理接口,主要负责vCPU的创建,虚拟内存的分配,vCPU寄存器的读写以及vCPU的运行。 QEMU:是一套由Fabrice Bellard编写的模拟处理器的自由软件,它是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括CPU,内存,IO设备,通过一个特殊的“重编译器”对特定的处理器的二进制代码进行翻译,从而具有了跨平台的通用性。QEMU有两种工作模式:系统模式,可以模拟出整个电脑系统,另一种是用户模式

虚拟化技术实现 — KVM 的内存虚拟化

…衆ロ難τιáo~ 提交于 2020-05-03 15:41:36
目录 文章目录 目录 前文列表 内存虚拟化 常规软件内存虚拟化 影子页表技术 EPT 技术 参考文章 前文列表 《 虚拟化技术实现 — 虚拟化技术发展编年史 》 《 虚拟化技术实现 — QEMU-KVM 》 《 虚拟化技术实现 — KVM 的 CPU 虚拟化 》 内存虚拟化 虚拟化分为软件虚拟化和硬件虚拟化,而且遵循 intercept 和 virtualize 的规律。 内存虚拟化也分为基于软件的内存虚拟化和硬件辅助的内存虚拟化,其中,常用的基于软件的内存虚拟化技术为「影子页表」技术,硬件辅助内存虚拟化技术为 Intel 的 EPT(Extend Page Table,扩展页表)技术。 常规软件内存虚拟化 虚拟机本质上是 Host 机上的一个进程,按理说应该可以使用 Host 机的虚拟地址空间,但由于在虚拟化模式下,虚拟机处于非 Root 模式,无法直接访问 Root 模式下的 Host 机上的内存。 这个时候就需要 VMM 的介入,VMM 需要 intercept (截获)虚拟机的内存访问指令,然后 virtualize(模拟)Host 上的内存,相当于 VMM 在虚拟机的虚拟地址空间和 Host 机的虚拟地址空间中间增加了一层,即虚拟机的物理地址空间,也可以看作是 Qemu 的虚拟地址空间(虚拟机是由 Qemu 模拟生成的)。 所以

kvm libvirt 虚拟机管理

牧云@^-^@ 提交于 2020-05-01 04:54:26
http://www.2cto.com/os/201203/123128.html kvm 虚拟机 管理 一、环境 role hostname ip OS kvm_server target 192.168.32.40/24 rhel6.0_x64 vir_guest1 node4 192.168.32.34/24 rhel5.5_i386 vir_guest2 node5 192.168.32.35/24 rhel5.5_i386 manager manager 192.168.32.33/24 rhel5.5_i386 ESXi ESXi 192.168.2.251/24 ESXi 3.5 二、安裝kvm [root@target ~]# yum install -y qemu-kvm.x86_64 qemu-kvm-tools.x86_64 #安装kvm内核 [root@target ~]# yum install libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 #安装virt管理工具 [root@target ~]# modprobe kvm #加载kvm内核 [root@target ~]# modprobe kvm

IAAS-libvirt介绍。

二次信任 提交于 2020-05-01 03:42:50
Libvirt介绍 Libvirt 与 hypervisor 无关,其提供与多种操作系统虚拟化能力进行交互的 API 与工具库。 Libvirt 提供了一个通用稳定的抽象层,可以安全的操作物理机上的虚拟机,同时为了可以远程交互, Libvirt 在 hypervisor 支持的范围内提供了创建,修改,监控,迁移,停止 domain 的一系列 API ,虽然可以使用 Libvirt 同时访问多个物理机,但是 API 层做了限制,只允许访问单个物理机。 Libvirt 被设计为可以支持多种虚拟化环境,这意味着大部分通用的能力在 API 上是被支持的,也因为此,在于通用型之间为了平衡,一些特殊的能力是不被支持的,譬如不支持虚拟化的告警策略或者多节点管理,不过 API 的稳定性确保这些特性可以在 Libvirt 实现。为了保持这种稳定性, Libvirt 视图隔离这些虚拟化框架中频繁变更的应用。 Libvirt 意在作为单虚拟化节点上的高级管理工具和应用,唯一例外的是虚拟机在多个物理机的迁移能力。提供了一系列 API 用来定义,监控,和使用管理节点的资源,这些资源包括 cpu , memory , storage , network 以及 NUMA 分区,虽然一个单独的物理机可以被管理程序分配一个管理节点,但是这应该确保使用安全的协议来操作。 术语定义: 术语 定义 Domain 运行在被

KVM之文本模式创建虚拟机及使用VNC连接控制虚拟机(非console)

☆樱花仙子☆ 提交于 2020-04-29 10:53:31
1. 安装VNC 关闭防火墙及selinux,修改selinux config文件: [root@localhost ~]# vim /etc/selinux/config 查看selinux状态 [root@localhost ~]# getenforce 临时关闭selinux服务 [root@localhost ~]# setenforce 0 [root@localhost ~]# systemctl stop firewalld 关闭防火墙 [root@localhost ~]# systemctl disable firewalld 禁止防火墙开机启动 不想关闭防火墙可添加VNC服务到防火墙 [root@localhost ~]# firewall-cmd --permanent --add-service vnc-server (注:VNC需要开通5901端口,这里只是测试,出于安全考虑在生产环境建议手动添加端口,不建议关闭防火墙。) 安装主程序: [root@localhost ~]# yum install -y vnc-* [root@localhost ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service 修改vncserver@:1

qemu-system和qemu-user两种模式动态模拟运行嵌入式固件方法总结

*爱你&永不变心* 提交于 2020-04-29 08:24:31
#qemu-system和qemu-user两种模式动态模拟运行嵌入式固件方法总结 ##前言 搭建嵌入式固件的动态模拟环境的过程中遇到了许多的坑,最终终于搭建了起来,很有必要记录下遇到的问题,避免今后再踩坑。 ##工具 ###1.buildroot 下载地址 以buildroot 2019.02.4版本为例,编译mips大端架构环境。 tar zxvf buildroot-2019.02.4.tar.gz apt-get install libncurses5-dev make menuconfig Target options中选择架构为mips big endian: Toolchain中选择的linux内核要尽量的低: Save之后开始 make ,编译时间很久,可以先去完成一次星际旅行。 ###2.qemu apt-get install qemu qemu-user-static ###3.binwalk binwalk项目的github地址 ,安装过程可能会出现小问题。例如cramfsprogs这个包在官方的源中找不到,需要手动下载 cramfsprogs ,使用 dpkg -i install package.deb 安装。 ###4.gdb gdb -v 检查是否已经安装。 ###5.ida pro “度娘,你有没有ida pro给我下载啊?” ##qemu

用 gdb 和 qemu 调试 grub

前提是你 提交于 2020-04-28 21:31:46
因为qemu内置了gdbserver,所以我们可以用gdb调试qemu虚拟机上执行的代码,而且不受客户机系统限制。 以下内容是我调试 grub 0.97 时的一份笔记。 准备 qemu, gdb,以及一份带grub的虚拟机镜像,一份grub源码。 调试过程 启动虚拟机 $ sudo qemu-system-x86_64 -s -S -m 256 -hda test.img 然后使用gdb连接 $ gdb (gdb) target remote localhost: 1234 (gdb) set architecture i8086 (gdb) break * 0x7c00 (gdb) cont 一开始CPU是工作在实模式下,为了gdb显示正常我们把架构设置为i8086 BIOS会把MBR加载到内存0x7c00处,我们在这里下断点,然后执行 查看一下当前的反汇编代码 (gdb) x/ 4i $pc => 0x7c00 : jmp 0x7c4a 0x7c02 : nop 0x7c03 : add %al,(%bx,% si) 0x7c05 : add %al,(%bx,%si) 显示的是 att 风格的汇编代码,如果不习惯可以切换成 intel 风格的。 (gdb) set disassembly- flavor intel (gdb) x / 4i $pc => 0x7c00 :