虚机cpu和mem的配置(cputune和numatune)

本文深入探讨了虚拟机资源管理,包括CPU分配、内存管理、NUMA策略等关键概念。详细解析了vCPU放置、内存分配策略、巨页内存使用、内存锁定及NUMA节点优化等技术细节。

1.cpu
1)CPU Allocation

<domain>
 
  ...
 
  <vcpu placement='static' cpuset="1-4,^3,6" current="1">2</vcpu>
 
  <vcpus>
 
    <vcpu id='0' enabled='yes' hotpluggable='no' order='1'/>
 
    <vcpu id='1' enabled='no' hotpluggable='yes'/>
 
  </vcpus>
 
  ...
<
</domain>


vcpu
cpuset:qemu进程的绑定范围,如果未指定默认绑定到所有可用的物理核心上,对emulator和vcpu都生效。如果指定了emulatorpin,该配置对qemu主进程失效。如果指定了vcpupin,该配置对指定了vcpupin的vcpu失效。对其它未配置vcpupin的vcpu仍然有效。
placement:cpuset的分布方式,可以是auto或者static。如果指定了cpuset,默认为static或者numatune的placement。如果指定auto,libvirt会与numad服务通信获取建议的分布方式,cpuset参数指定的配置失效。
cputune
vcpupin cpuset: 优先级最高,如果指定按照该值绑定vcpu,vcpu的cpuset失效。
emulatorpin cpuset: 优先级最高,如果指定按照该值绑定emulator。vcpu的cpuset失效。
2..内存
1)内存分配

<domain>
  ...
  <maxMemory slots='16' unit='KiB'>1524288</maxMemory>
  <memory unit='KiB'>524288</memory>
  <currentMemory unit='KiB'>524288</currentMemory>
  ...
</domain>


maxMemory:为虚机分配的最大可运行内存,unit为单位
memory:为虚机分配的启动时的最大内存
currentMemory:为虚机分配的实际内存大小,无此项,默认等于memory
区别:当guest需要使用RAM时,qemu-kvm就在自己的进程内存空间中划分一段给guest用。对于guest OS设置了MaxMemory和CurrentMemory之后,guest OS的RAM上限也就有了,就是MaxMemory,如果当前的guest实际使用不了那么多RAM,就可以将CurrentMemory调小,将多余的内存还给host,guest中看到的内存大小就是CurrentMemory,这就是Memory Balloon特性。
2)Memory Backing:包含主机如何提供虚拟内存页给虚机

<domain>
  ...
  <memoryBacking>
    <hugepages>
      <page size="1" unit="G" nodeset="0-3,5"/>
      <page size="2" unit="M" nodeset="4"/>
    </hugepages>
    <nosharepages/>
    <locked/>
    <source type="file|anonymous|memfd"/>
    <access mode="shared|private"/>
    <allocation mode="immediate|ondemand"/>
    <discard/>
  </memoryBacking>
  ...
</domain>


hugepages:虚机使用的内存是巨页而非普通页面。
nosharepages:禁止虚机共享页面(内存合并,KSM)
locked:禁止swap,在一些实时场合使用
source:使用的内存类型;可以使用file内存或保持默认的anonymous类型,4.10之后支持memfd(仅QEMU/KVM)
access:模式属性,指明内存是共享的还是私有的,可能会被每numa node的memAccess重写
allocation:模式属性,指明什么时候分配内存,通过immediate和ondemand选项
discard:指明关机前什么时候丢弃内存中的内容
3)NUMA Node Tuning:设置虚机的numa策略来优化numa主机性能,仅由QEMU驱动程序支持。

<domain>
  ...
  <numatune>
    <memory mode="strict" nodeset="1-4,^3"/>
    <memnode cellid="0" mode="strict" nodeset="1"/>
    <memnode cellid="2" mode="preferred" nodeset="2"/>
  </numatune>
  ...
</domain>


memory:可选项,指明如何从物理node上给虚机分配内存
   mode: interleave, strict和preferred, 默认为strict,根据mode决定虚机的内存是否严格遵守nodeset的规则。
        1)interleave:    
        2)strict:根据指定的nodeset设置qemu内存分布亲和性
        3)preferred:要求nodeset中只能有一个target node
    nodeset 指定内存分配的具体节点
   placement static/auto可选,默认为static,默认与vcpu placement一致,当指定了nodeset时默认为static。如果指定了auto,nodeset将被忽略,云主机将只从numad返回结果的node上申请内存。如果vcpu的placement指定了auto,会默认增加一个numatune的配置,placement的值为auto,mode为strict。

<think>好的,用户想在Linux中安装配置守护进程。我需要先回忆相关的知识,并结合提供的引用内容来整理步骤。首先,用户提到的引用里有关于Redis、MongoDB的安装配置,特别是提到修改Redis为守护进程模式,这可能用户的问题直接相关。 守护进程是在后台运行的服务进程,通常独立于控制终端。常见的配置方法包括修改服务的配置文件,设置daemonize为yes,如Redis的配置。同时,可能需要使用systemd来管理服务,这样可以通过系统命令启动、停止服务,并设置开启动。 根据引用1,安装Redis时需要修改配置文件为守护进程模式,并指定配置文件启动。而引用3提到使用make install安装Redis后,生成的可执行文件会被安装到系统路径,这样方便后续管理。引用4中MongoDB的安装步骤包括解压、创建必要目录,可能也需要类似的守护进程配置。 接下来,应该分步骤说明如何安装配置守护进程。首先以Redis为例,因为引用中有较多相关信息。然后扩展一般方法,比如使用systemd创建服务单元文件,这样适用于其他服务如MongoDB。需要确保用户了解修改配置文件的关键参数,以及如何通过systemd管理服务。此外,可能还需要提醒用户防火墙设置权限问题,确保服务可以远程访问或正常运行。 用户可能还关心如何验证配置是否成功,比如检查服务状态、日志查看等。同时,应该提到常见问题,比如配置错误导致服务无法启动,需要检查配置文件语法。最后,生成相关问题,帮助用户进一步学习,比如优化守护进程、日志管理、安全配置等。</think>### Linux中安装配置守护进程的方法 #### 1. 通过配置文件设置守护进程(以Redis为例) 1. 修改服务配置文件,找到`daemonize`参数并设置为`yes`: ```bash vi /usr/local/redis/redis.conf # 修改配置项 daemonize yes ``` 2. 保存后使用配置文件启动服务: ```bash /usr/local/redis/bin/redis-server /usr/local/red
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值