再论KVM超量使用

2023-11-07

转载自:http://www.sohu.com/a/111248295_251444

KVM超量使用一直是热门话题,前段时间发的文章:

群讨论:虚拟机能否使用32个CPU

又引去了群友的激烈讨论,本文为群友根据自己的经验总结投稿,感谢这位热心的群友!

欢迎更多的朋友投稿,将自己的经验发给大家,我们一起进步。

KVM hypervisor支持超量使用CPUs和超量使用内存,超量使用意思是分配多于系统上物理资源的虚拟CPUs和内存。当CPU超量使用,利用率较低的虚拟服务器或桌面可以运行在更少的服务器上,从而节省系统资源的数量,从而节省电力、散热在服务器硬件上的投资。

超量使用内存

大多数操作系统和应用程序不会总是使用有效RAM的100%,这个行为可以被KVM利用。KVM可以分配更多于主机有效物理的内存给来宾。超量使用需要足够的swap空间给所有来宾和所有主机的进程。

在KVM下,虚拟机当作是Linux的进程。在KVM hypervisor上的来宾没有专门的物理RAM块分配给它们,而来宾作为Linux进程活动。Linux内核当进程请求更多的内存时分配给每个进程内存。KVM的来宾当来宾操作系统请求时被分配内存。

警告:确保总的swap和内存空间大于或等于所有运行中来宾的内存配置。如果少于这个总数会导致一个来宾被强制关机。

为超量使用内存配置swap

swap分区用来交换未充分利用的内存到硬盘来提高内存性能。默认的swap分区大小是从主机的物理RAM计算而来的。

swap分区必须足够大来提供所有来宾的虚拟内存和主机系统。

重要:下面的例子只是提供一个配置swap的指导。列出的设置可能在你的环境里是不合适的。

Example 内存超量使用例子

ExampleServer1有32GB的RAM。系统要配置来运行56台有1GB虚拟内存的来宾。主机系统为系统进程,驱动和存储缓存很少使用超过4GB内存。

32GB减去主机4GB剩下28GB物理RAM给来宾。每个来宾使用1GB的RAM,所有来宾总共需要56GB的虚拟RAM。

Red Hat官方知识库建议一个32GB RAM的系统需要8GB的swap。为了安全超量使用内存,需要有足够的给所有来宾作虚拟内存以及主机。主机剩下28GB的RAM给所有来宾(来宾需要56GB的RAM)。因此,系统需要至少28GB的swap给所有来宾。

ExampleServer1需要至少36GB(8GB给主机以及28GB给来宾)的swap来安全超量使用来支持56台来宾。

超量使用内存10倍于系统的物理RAM是有可能。这只适用于某些类型的来宾,例如,小密集使用的桌面虚拟化或几个有KSM的相同运行中的来宾。配置swap和内存超量使用不是一个标准,每一个环境和安装是不一样的。你的环境必须测试和自定义来确保稳定性和性能。

超量使用虚拟CPUs

KVM允许客户机过载使用(over-commit)物理资源,即给客户机分配的CPU和内存数量多于物理上实际存在的资源。

物理资源的过载使用能带来一些资源充分利用方面的好处。试想在一台强大的硬件服务器中运行着Web服务器、图片存储服务器、后台数据统计服务器等作为虚拟客户机,但是它们并非在同一时刻都会负载很高,如Web服务器和图片服务器在白天工作时间负载较重,而后台数据统计服务器则主要在晚上工作,所以如果对物理资源进行合理的过载使用,给这几个客户机分配的系统资源总数多余实际拥有的物理资源,就可能在白天和夜晚都充分利用物理硬件资源,而且由于几个客户机不会同时对物理资源造成很大的压力,它们各自的服务质量(QoS)也是能得到保障的。

CPU的过载使用,是让一个或多个客户机使用vCPU的总数量超过实际拥有的物理CPU数量,QEMU会启动更多的线程来为客户机提供服务,这些线程也是被Linux内核调度运行在物理CPU硬件上。

关于CPU的过载使用,最推荐的做法是对多个单CPU的客户机使用over-commit,比如:在拥有4个逻辑CPU的宿主机中,同时运行多于4个(如8个、16个)客户机,其中每个客户机都被分配一个vCPU。这时,如果每个宿主机的负载不很大的情况下,宿主机Linux对每个客户机的调度是非常有效的,这样的过载使用并不会带来客户机中的性能损失。

关于CPU的过载使用,最不推荐的做法是让某一个客户机的vCPU数量超过物理系统上存在CPU数量。比如,在拥有4个逻辑CPU的宿主机中,同时运行一个或多个客户机,其中每个客户机的vCPU数量多于4个(如16个)。这样的使用方法会带来比较明显的性能下降,其性能反而不如将客户机分配2个(或4个)vCPU,而且如果客户机中负载过重时,可能会让整个系统运行不稳定。不过,在并非100%满负载的情况下,一个(或多个)有4个vCPU的客户机运行在拥有4个逻辑CPU的宿主机中并不会带来明显的性能损失。

总的来说,KVM允许CPU的过载使用,但是并不推荐在实际的生产环境(特别是负载较重的环境)中过载使用CPU。在生产环境中过载使用CPU,有必要在部署前进行严格的性能和稳定性测试。

KSM

共享内存的概念在当今操作系统中是常见的。例如,当一个程序首次启动,它共享父进程所有的内存。当子进程或父进程尝试去更改这个内存,内核分配一个块新内存区域,拷贝原始内容并且允许这个程序去修改这块新区域。这被认为是写时拷贝。

KSM是一个新的Linux特性使用相反的概念。KSM使内核去检查2个或多个已经运行的程序并且比较它们的内存。如果任何内存区域或页面是相同的,KSM减少多个相同的内存页面到一个单独的页面。这个页面然后被标记为写时拷贝。如果来宾更改了这个页面的内容,一个新的页面被创建给那个来宾。

这对KVM虚拟化是非常有用的。当一个来宾启动,它只从父qemu-kvm进程继承内存。当所有来宾运行相同的操作系统或应用程序时,那么来宾运行来宾操作系统镜像的内容可以被共享。KSM只识别和合并相同的页面不会干扰来宾或对主机或来宾的安全性造成影响。KSM允许KVM请求这些被共享的相同的来宾内存区域。

KVM提供增强内存速率和利用率,在KSM下,共同的进程数据被存储在缓存或主要内存中。这为KVM来宾减少缓存遗漏可以提高一些应用程序和操作系统的性能。其次,共享内存减少来宾的整体内存使用率,允许更高密度和更大的资源利用率。

Red Hat EnterpriseLinux使用2个单独的方法控制KSM:

·ksm服务启用和停止KSM内核线程。

·ksmtuned服务控制和调试ksm,动态管理相同页面合并。当内存共享不是必要的,ksmtuned服务启动ksm和关闭ksm服务。ksmtuned服务必须被以返回参数告知来运行当来宾被创建或被销毁。

这2个服务被标准的服务管理工具控制。

KSM服务

ksm服务被包含在qemu-kvm包里面。KSM默认在Red Hat Enterprise Linux 6下

是关闭的。当使用Red Hat Enterprise Linux 6作为一个KVM主机时,然而,它

很有可能被开启由ksm/ksmtuned服务。

当ksm服务没有启动,KSM共享只有2000个页面。这个默认值是低的并且提供

有效的内存节省效益。

当ksm服务器启动,KSM将共享到主机系统的主内存一半。启动ksm服务来开

启KSM共享更多内存。

# service ksm start

Starting ksm: [ OK ]

ksm服务可以被添加到默认启动顺序。使用chkconfig命令让ksm服务持久。

# chkconfig ksm on

KSM调试服务

ksmtuned服务没有任何选项。ksmtuned服务循环并且调整ksm。当一个来宾被创建或销毁,libvirt将通知ksmtuned服务。

# service ksmtuned start

Starting ksmtuned: [ OK ]

ksmtuned服务可以被返回参数调试。返回参数指示ksmtuned手动运行调试功能。

/etc/ksmtuned.conf文件是ksmtuned服务的配置文件。默认的ksmtuned.conf如下文件。

# Configuration file for ksmtuned.

# How long ksmtuned should sleep between tuning adjustments

# KSM_MONITOR_INTERVAL=60

# Millisecond sleep between ksm scans for 16Gb server.

# Smaller servers sleep more, bigger sleep less.

# KSM_SLEEP_MSEC=10

# KSM_NPAGES_BOOST=300

# KSM_NPAGES_DECAY=-50

# KSM_NPAGES_MIN=64

# KSM_NPAGES_MAX=1250

# KSM_THRES_COEF=20

# KSM_THRES_CONST=2048

# uncomment the following to enable ksmtuned debug information

# LOGFILE=/var/log/ksmtuned

# DEBUG = 1

配置文件中最重要的参数是KSM_SLEEP_MSEC。Fedora 16使用的默认值是大型服务器的设置值。当在主机上运行较少的虚拟机,使用KSM时最好让主机休眠更长的时间。例如,尝试设置KSM_SLEEP_MSEC=50,然后测试对虚拟机的影响。

KSM变量和监视

KSM存储监视数据在/sys/kernel/mm/ksm/目录。在这个目录的文件被内核更新并且精确记录KSM的使用和统计。

以下变量同样是/etc/ksmtuned.conf文件里的配置变量。

/sys/kernel/mm/ksm文件

full_scans

全扫描运行。

pages_shared

总的共享页面

pages_sharing

目前共享的页面

pages_to_scan

页面没有扫描

pages_unshared

页面不再共享。

pages_volatile

Volatile页面的数目

run

KSM进程是否运行。

sleep_millisecs

睡眠多少毫秒

如果DEBUG=1被添加到/etc/ksmtuned.conf文件里,KSM调试活动被存储在/var/log/ksmtuned日志文件。日志文件的位置可以被改变通过LOGFILE参数。改变日志文件的位置是不建议的,而且可能需要在SELinux设置中特定配置。

关闭KSM

KSM在某些环境或主机系统中可能性能开销太大。如果目标是运行尽可能多的虚拟机,而且性能不是问题,应该保持KSM处于运行状态。例如KSM允许运行30个虚拟机的主机上运行40个虚拟机,这意味着最大化硬件使用效率。但是,如果服务器在运行相对较少的虚拟机并且性能是个问题时,那么应该关闭KSM。

对任何系统来说,最佳选择将取决于创建虚拟环境时的内存估算。如果在虚拟主机中有足够的物理内存,在没有开启KSM时就能够满足虚拟机的内存需求,那么最好关闭KSM。

KSM可以通过停止ksm服务和ksmtuned服务来关闭。关闭服务停止KSM但是在重启后不会持久。

# service ksm stop

Stopping ksm: [ OK ]

# service ksmtuned stop

Stopping ksmtuned: [ OK ]

永久停止KSM通过chkconfig命令。关闭这两个服务通过运行下面命令:

# chkconfig ksm off

# chkconfig ksmtuned off

重要:确保swap大小是足够的对于承诺的RAM甚至是KSM。KSM减少RAM相同的利用或相似的来宾。超量使用来宾和KSM特性没有足够的swap空间可能但是这是不建议的,因为来宾内存使用可以导致页面变的独享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

再论KVM超量使用 的相关文章

  • KVM下Ubuntu18.04打开设置注销问题

    问题描述 xff1a 在KVM中创建Ubuntu18 04 xff0c 打开系统设置 xff0c 发现直接注销 xff08 不是锁屏 xff0c 因为所有程序都退出 xff09 解决思路 在google上搜索发现大多数都是指向显卡问题 xf
  • 如何在 Ubuntu 20.04 上安装 Kvm

    KVM 基于内核的虚拟机 是内置于 Linux 内核中的开源虚拟化技术 使用 KVM 运行多个 Linux 或 Windows 来宾虚拟机 每个来宾都与其他来宾完全隔离 并拥有自己的操作系统和专用虚拟硬件 例如 CPU 内存 网络接口和存储
  • CentOS 7 virt-install 命令行方式(非图形界面)安装KVM虚拟机

    环境及网卡配置请参考 https blog csdn net mshxuyi article details 98305715 创建镜像目录 mkdir p home vms virt install 配置文件 virt install n
  • oVirt engine安装手册

    oVirt Engine安装需求 硬件需求 Resource Minimum Recommended CPU 双核CPU 四核或者多个双核CPU 内存 4G内存 不安装warehouse并且内存不被其他程序使用 16G 硬盘 25G可用空间
  • Linux上启用kvm嵌套虚拟化功能

    kvm支持嵌套虚拟化 即可以在虚拟机中创建虚拟机 本文主要介绍如何在使用Intel处理器的CentOS7中开启KVM的嵌套虚拟化功能 kvm主要是通过内核模块来实现的 因此我们查看系统是否开启了kvm嵌套虚拟化 只需要 cat sys mo
  • 关于对cpu的理解和kvm虚拟机到物理cpu的绑定

    这段时间一直在想 云计算除了虚拟化之外 还应该有其它的东西 那就是优化 因为我们虚拟出来资源之后怎么用 怎么划分 是并行也好 是租给用户使用也好 都要实现资源调度和使用的最优化 嗯 这是这段时间关于云计算的想法 下面分享一下最近两天做的一些
  • Proxmox VE(PVE) 进行网卡直通

    文章目录 我的设备 介绍 添加CPU支持 开启iommu 查询网卡信息 Intel CPU AMD CPU 新增所需模块 添加PCI设备 命令模式添加 web页面模式添加 验证IOMMU有效 IOMMU中断重映射 查看中断重映射 启用中断重
  • KVM——迁移KVM虚拟机

    一 KVM虚拟机迁移的方式 KVM平台中的KVM虚拟机迁移分为以下两种 1 冷迁移 静态迁移 我们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘 进行冷迁移时 只要在目标主机上挂载这个nfs文件系统 就可以看到要迁移的那个虚拟机的磁
  • 虚拟化原理与应用第一次作业

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

    1 查看usb设备 用lsusb查看宿主机usb设备信息 2 在kvm虚拟机的xml文件中添加如下
  • KVM添加文件夹存储

    创建基于文件夹的存储池 1 定义一个存储池 virsh pool define as kvm images dir kvm images 2 查看创建的存储池信息 virsh pool list all 3 建立基于文件夹的存储池 virs
  • KVM MMU EPT内存管理

    转载请注明 转载自博客xelatex KVM 并附本文链接 谢谢 注 文章中采用的版本 Linux 3 11 https www kernel org pub linux kernel v3 x linux 3 11 tar gz qemu
  • kvm之多网卡队列开启设置

    背景 目前基于dpdk数据平面开发套件的应用越来越多 而dpdk对于上层应用运行时 服务的进程数多于1时 要求网卡支持多队列 否则项nginx这种多进程应用程序只能再默认配置下运行 只能启动一个worker 要求 在kvm虚机中将网卡设置支
  • Android 模拟器在 Ubuntu 18.04 上因 SIGSEGV 崩溃

    Android Studio版本 Android Studio 3 1 2 内部版本 AI 173 4720617 建于 2018 年 4 月 14 日 它是从 Ubuntu 的 snap 商店安装的 我使用安装了kvm1 在 Ubuntu
  • x86 PIC,QEMU 在所有 CPU 上引发中断是否正确?

    我最近不得不解决 x86 PIC 的专有操作系统问题 其中操作系统预期定时器中断仅在 CPU0 上 我启用了 IO APIC 来解决这个问题并进行了 CPU 控制 因此中断仅到达 CPU0 问题解决了 有人告诉我 我们的硬件已经损坏 无法做
  • Xen、QEMU 和 KVM 之间有什么区别?

    我知道Xen使用QEMU 而KVM是QEMU的一个分支 那么 KVM 包括 Xen 添加到 QEMU 中吗 是什么名字 Thanks QEMU 是一个功能强大的模拟器 这意味着它可以模拟多种处理器类型 Xen 使用 QEMUHVM http
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住
  • update-alternatives:错误:arptables 的替代 /usr/sbin/arptables-legacy 未注册;不设置

    我在 Buster 主机上有 Debian 10 Buster KVM 来宾计算机 尝试切换到旧版iptables在以下虚拟机上Debian 维基 https wiki debian org iptables update alternat
  • 如何使用 hostPath 将单个文件映射到 kubernetes pod 中?

    我有一个自己的 nginx 配置 home ubuntu workspace web conf由脚本生成 我更喜欢把它放在下面 etc nginx conf d除了default conf 下面是nginx yaml apiVersion
  • 如何获取文件夹的大小,包括稀疏文件的表观大小? (du太慢了)

    我有一个包含很多KVM qcow2文件的文件夹 它们都是稀疏文件 现在我需要获取文件夹的总大小 qcow2 文件大小应计为表观大小 而不是实际大小 例如 图片 c9f38caf104b4d338cc1bbdd640dca89 qcow2 文

随机推荐

  • List和ArrayList

    List和ArrayList区别 List是一个接口 而ArrayList是List接口的一个实现类 ArrayList类继承并实现了List接口 因此 List接口不能创建实例对象 但是可以为List接口创建一个指向自己的对象引用 而Ar
  • 微信公众号小程序开通方法_微信小程序发布审核大概要多久

    1 如果自己有通过微信公众平台注册认证好微信公众号 那么只需要登录微信公众号账号后在页面左侧找到小程序管理 注册认证小程序账号 注意 公众号账号和小程序账号是独立的两个账号 2 如果自己没有注册认证微信公众号 就可以先到微信公众平台注册个微
  • ubuntu 18.04下virtualbox安装windows虚拟机+增强功能+secureCRT

    先强调一下 我是在Ubuntu里安装windows虚拟机 如果要看如何安装linux虚拟机的话 那么你走错地方了 我一直使用Linux系统做开发的 选择Ubuntu是因为多数常用软件对Ubuntu支持的不错 能少折腾就少折腾 程序员的时间不
  • Qt5.12.3移植rk3399pro笔记

    Qt5 12 3移植到rk3399pro笔记 环境 主机 Ubuntu16 04 目标机 rk3399pro板 x11平台 交叉编译toolchain linux aarch64 gnu 问题描述 我的目标机是debian系统 带lxde桌
  • 【大数据】HiveQL的数据操作

    HiveQL的数据操作 因为 Hive 没有行级别的数据插入 数据更新和删除操作 那么往表中装载数据的唯一途径就是使用一种 大量 的数据装载操作 或者通过其他方式仅仅将文件写入到正确的目录下 1 向管理表中装载数据 LOAD DATA LO
  • SpringFactoriesLoader ServiceLoader区别

    内容简介 IoC 并不仅限于解决模块内类与类之间的依赖耦合问题 其同样适用于模块与模块之间 OSGi 一直致力于这方面的工作 但其实 Java 和 Spring 都提供了对 IoC 的支持 Java 本身提供了一种很简便的方式来支持 IoC
  • 报告

    来源 Prophet 2019年 战略数字化转型的重要性已经不止于IT领域 而影响着全公司的竞争力 企业的相关预算直线攀升 利益相关方所关注的颠覆性技术数量急剧增加 数字化项目开始由首席高管主导 并由相互协作的跨职能团队管理 数字化是整个企
  • 爬虫项目五:最详细的京东商品、评价爬虫、词云展示

    文章目录 前言 一 京东商品信息爬虫 1 分析URL 2 实例化chrome 3 加载完整数据 4 实现翻页 5 解析数据 二 京东商品评价爬虫 1 找到接口 2 分析url 3 解析数据 4 词云 前言 本文内容包含京东商品列表爬虫的详细
  • pycharm启动报错

    1 点击pycharm 报错 2 打开cmd 输入gpedit msc 点击 确定 3 在本地组策略编辑器 选择 Windows设置 安全设置 本地策略 安全选项 用户帐户控制 用于内置管理员帐户的管理员批准模式 4 设置 用户帐户控制 用
  • cuda历史版本和cudnn的下载地址

    cuda历史版本下载地址 https developer nvidia com cuda toolkit archive cudnn下载地址 https developer nvidia com rdp cudnn archive 欢迎大家
  • pthread_mutex_init线程互斥锁的使用

    pthread mutex init 头文件 include
  • Springboot项目中@JsonProperty不生效-如何处理呢?

    转自 Springboot项目中 JsonProperty不生效 如何处理呢 下文笔者讲述SpringBoot中 JsonProperty不生效的相关简介说明 首先笔者将讲述JsonProperty注解的功能简介说明 JsonPropert
  • googlecloud谷歌云的初学体会(1)

    googlecloud谷歌云入门 1 一 纯小白自述 二 云是个什么云 三 装一个软件 资源 服务 四 服务器 爷爷提供服务的电脑 五 PGSQL的安装 六 总结 一 纯小白自述 自己是个小白 仅仅懂得几句sql查询和编程的基础语法 云是啥
  • 第八十七题 UVa12166 Equilibrium Mobile

    A mobile is a type of kinetic sculpture constructed to take advantage of the principle of equilibrium It consists of a n
  • 傻瓜攻略(七)——MATLAB神经网络的保存和调用

    作为科研领域十分重要的计算工具 MATLAB在深度学习方面也一直与时俱进 每一个版本的更新都会引进许多新的机器学习和深度学习案例 下面介绍将训练好的网络进行保存的方法 当再次调用网络时 可以在前一次训练的基础上进一步训练或者直接处理新数据
  • NIPS 2017

    Attention is all you need Author Unit Google Brain Google Research University of Toronto Authors Ashish Vaswani Noam Sha
  • 什么副业可以月赚1万元?做什么副业可以月入上万?

    在当前经济形势下 对于一个普通上班族而言 指望工资生活 日子肯定是过得紧巴巴的 许多人想谋求一份副业收入很正常 那么 在当前社会上 有哪些副业项目 能一个月收入一万多呢 我这里给大家推荐几个 仅供用于调研参考 1 自媒体 也许很多人会说这个
  • 决策树详解(一)

    1 决策树的概念 决策树算法以树状结构表示数据分类的结果 每个决策点实现一个具有离散输出的测试函数 记为分支 决策树的元素有 根节点 非叶子节点 分支 叶节点四种元素 其代表的含义如下图所示 决策树的工作分为两个阶段 1 训练阶段 给定训练
  • 生成以太坊系地址

    代码解析 要首先生成一个新的钱包地址 我们需要导入go ethereum crypto包 该包提供用于生成随机私钥的GenerateKey方法 privateKey err crypto GenerateKey if err nil log
  • 再论KVM超量使用

    转载自 http www sohu com a 111248295 251444 KVM超量使用一直是热门话题 前段时间发的文章 群讨论 虚拟机能否使用32个CPU 又引去了群友的激烈讨论 本文为群友根据自己的经验总结投稿 感谢这位热心的群