rhel中,tuned提供了两个默认配置文件virtual-host和virtual-guest
RHEL默认启用自动NUMA均衡功能。该特性允许进程自动放置NUMA和定期取消内存映射,这将导致迁移到不同的NUMA节点,从而增加NUMA故障。
正常推荐手动NUMA放置覆盖自动NUMA平衡。
建议将客户机内存大小限制为单个NUMA节点上的物理内存量,以防止在NUMA节点之间分配资源
这里介绍
- cpu调优
- 内存调优
- IO调优
网络调优比较复杂,不介绍
虚拟机cpu调优
虚机的虚拟CPU在宿主机上作为用户空间进程运行,可以使虚拟CPU进程pin在主机物理CPU上,以提高性能。可以增加CPU缓存命中率
1 | virsh vcpupin <vm-name> |
虚拟机内存调优
限制host内存
- 最大分配值:客户机运行时分配的最大内存
- 当前分配值:小于或等于最大分配
1 | 通过virsh dominfo查看 |
内核同页合并
当客户虚拟机运行相同的操作系统或工作负载时,很有可能许多内存页具有相同的内容。
内核共享内存,通过将相同的页面合并到一个内存页面来减少总内存使用量
当客户端必须通过写入来修改共享内存页面时,KSM克隆共享页面以给客户端一个新的非共享副本。这个过程称为写时复制(COW-copy on write)。
使用KSM需要两个服务,KSM是执行内存扫描和页面合并的服务,ksmtuned是控制KSM扫描内存的时间和力度的服务。
1 | KSM可调项: |
要调优KSM,使用ksmtuned服务通常比手工调优更有用。使用/etc/ksmtuning.conf文件配置ksmtuning服务。
磁盘I/O调优
客户虚拟磁盘可以是块设备,也可以是映像文件。块设备是虚拟磁盘的首选设备。与块设备相比,基于文件的映像文件增加了I/O操作的额外资源需求。与块设备相比,映像文件需要更多的资源进行I/O操作,因此需要进行磁盘调优。
qcow2镜像格式
qcow2格式的开销更大,因为它执行额外的任务。比如扩的时候会产生开销
特点
1.使用稀疏映像文件,这会导致过度分配主机存储。(精简置备)
qcow2 文件在创建时不会立即占用全部空间,而是按需增长。
2.将更改存储到另一个磁盘映像,而不实际影响原始映像的内容,该映像称为写时复制映像
修改操作不会直接写入基础镜像,而是记录到单独文件,
3.支持快照。快照是指使用Redirect-on-Write引用原始图像以避免更改原始图像的图像
快照是只读的
快照冻结原始状态,新数据写入独立空间
1 | # 创建快照 |
4.支持压缩,并允许使用zlib压缩每个集群。使用集群存储设备的内容。
以 64KB 为单元压缩存储
5.支持集群加密
创建qcow2镜像
1 | qemu-image create -f qcow2 -o preallocation-metadata disk.qcow2 1G |
磁盘缓存模式
KVM允许在配置客户虚拟机时指定各种磁盘缓存。
磁盘缓存模式影响如何读取和写入主机页缓存中的数据。
1 | cache=none(默认) |
模式 | 数据安全 | 速度 | 类比 | 使用场景 |
---|---|---|---|---|
none | ★★★★☆ | ★★★☆☆ | 直发不存仓 | 日常生产环境 (推荐默认) |
writethrough | ★★★★★ | ★★☆☆☆ | 存仓+立即发货 | 金融/医疗等关键数据 |
writeback | ★★☆☆☆ | ★★★★★ | 存仓=签收,延迟发货 | 非关键业务/高性能需求 |
directsync | ★★★★★ | ★☆☆☆☆ | 亲自押运全程监控 | 极端安全需求 |
unsafe | ☆☆☆☆☆ | ★★★★★ | 假签收永不发货 | 临时操作/绝对禁止生产环境 |
磁盘IO线程
I/O线程是受支持的磁盘设备的专用线程,用于执行块I/O请求,以提高可伸缩性。
一个主机CPU必须固定一个或两个I/O线程,每个虚拟块设备必须配置一个I/O线程以获得良好的性能
1 | 查看客户机每个IO线程数和CPU亲和性 |
虚拟磁盘调优
使用virsh blkdeviotune命令查看和设置连接到客户机的每个块设备上的吞吐量和I/O操作的限制。
1 | virsh blkdeviotune <vm-name> vdb --total-iops-sec 1000 \ |
cgroup管理KVM虚拟机limit
默认情况下,libvirtd为主机上运行的虚拟机配置控制组。使用lscgroups命令查看cgroups定义。
但libvirtd守护进程提供了一个API,用于与分配给各个运行客户机的cgroup限制进行交互,所以可以直接使用virsh schedinfo命令查看和设置虚拟机的CPU相关限制。
1 | 设置CPU限制: |
可调项 | 默认值 | 含义说明 | 应用场景 |
---|---|---|---|
cpu_shares | 1024 | CPU时间片相对权重,值越高获得的CPU时间越多。1024=标准权重,2048=2倍权重 | CPU密集型负载 |
vcpu_period | 100000 | CPU配额周期长度(微秒),定义重新分配CPU时间的时间窗口 | 精确CPU控制 |
vcpu_quota | -1(无限) | 每个周期内允许的最大CPU时间(微秒)。-1=无限制,50000=单核50% | CPU节流控制 |
emulator_period | 100000 | QEMU模拟器进程的CPU周期长度(微秒) | 模拟器资源控制 |
emulator_quota | -1(无限) | QEMU模拟器在每个周期内允许的最大CPU时间(微秒) | 模拟器节流 |
global_period | 100000 | 整个虚拟机(vCPU+模拟器)的全局CPU周期长度(微秒) | 整体资源控制 |
global_quota | -1(无限) | 整个虚拟机在每个全局周期内允许的最大CPU时间(微秒) | 整体CPU限制 |
iothread_period | 100000 | 虚拟机I/O线程的CPU周期长度(微秒) | I/O性能优化 |
iothread_quota | -1(无限) | I/O线程在每个周期内允许的最大CPU时间(微秒) | I/O节流控制 |
cap | 0(禁用) | 最大CPU使用率(百分比),200=2个vCPU满负载 | 绝对CPU限制 |