本书从概念和操作两方面介绍了虚拟化基础设施的性能。

CPU

虚拟化基础

  1. CPU保护模式
    1. CPU保护模式,也称为保护虚拟地址模式,是一种提供硬件级别内存保护的X86处理器操作模式。
    2. 实模式
      1. 为原始x86处理器设计
      2. 关闭内存保护功能
      3. 只有操作系统内核才可以无限制使用全部硬件资源
    3. 保护模式:
      1. 保护模式的特权等级:Ring0 Ring1 Ring2 Ring3
      2. Ring 0 特权最多,Ring 3 特权做少
      3. Ring 0:Kernel ;Ring 1 设备驱动; Ring 2 设备驱动; Ring 3 应用
  2. 定义CPU虚拟化的类型:
    1. 基于软件的CPU虚拟化:
      1. 运行于Ring1级别
      2. 需要VMM编译执行代码
    2. 基于硬件辅助的CPU虚拟化
      1. 运行于Ring0
      2. 使用Intel VT 或者AMD-V硬件辅助功能,无需软件编译
  3. 物理CPU与虚拟CPU之间的区别
    1. 每一个物理处理器内核被检测为一个pCPU
    2. 每个线程也可以被视为一个pCPU
  4. vCPU状态
    1. 运行状态:在pCPU上被调度来运行指令
    2. 准备状态:在pCPU上准备调度,但由于调度延迟不直接运行
    3. 等待闲置状态:特殊状态(?)
    4. 等待状态:等待I/O操作在外部系统组件上完成

CPU的调度程序

VMware ESXi CPU调度程序的主要目标是调度“world”(VMM的进程或者线程)在pCPU上严格执行,并满足性能、吞吐率、处理器使用率上的要求。同时,调度程序也负责欺骗客户机操作系统,以使其相信自己有pCPU资源。

  1. 比例分配算法
    1. 计算优先级:数值低的优先级被认为是高优先级,数值高的优先级为低优先级
    2. 根据分配资源的消耗动态计算优先级
  2. CPU联合调度
    1. 严格联合调度
    2. 宽松联合调度
  3. CPU调度单元
    1. 调度单元的分布式锁定
      1. 当全部vCPU在不同的处理器上协同调度时,虚拟机的性能表现最好
      2. 限制同级vCPU在任意时刻只在一个单元中调度会更有效率
      3. 调度单元在确保了CPU调度的扩展性的同时,又限制了CPU调度的扩展性
    2. vSphere取消调度单元
      1. 单独使用等于物理CPU内核数的vCPU,会产生一个对全部调度程序调用进行序列化的全局锁定,并导致调度单元无效
      2. 限制了缓存的总量以及共享缓存的多核处理器上的内存带宽
  4. CPU拓扑感知负载均衡
    1. 拉迁移和推迁移
    2. world在物理CPU之间的迁移会有很高的成本
      1. CPU亲和:不推荐人工配置CPU亲和;保证配置给虚拟机上的pCPU数量总比vCPU的数量多至少一个
    3. NUMA 不统一的内存访问
      1. 目的:解决多核处理器上访问内存延迟问题。每个numa节点由一组处理器和指定给处理器的内存组成
      2. 内存在相同节点中访问时,进行本地访问
      3. 内存被其他节点访问时,进行远程访问
      4. NUMA系统的负载平衡
      5. NUMA系统宽虚拟机负载平衡(超线程 numa.vcpu.preferHT)
      6. 虚拟NUMA
      7. 每个插槽的内核
      8. 超线程架构的负载均衡:通过保持处理器流水线的繁忙状态,超线程可以提高性能
  5. 多核感知负载均衡
    1. 基于CPU负载的迁移限流
    2. 虚拟SMP整合(vSMP整合是的多处理器虚拟机上的同级vCPU被单个LLC调度)
    3. 外部VM缓存亲和力(当同一主机上的两个虚机经常发生通信时,CPU调度程序会调度相同LLC上的虚机)

适时调配CPU

  1. vSMP的注意事项
    1. 客户机操作系统硬件抽象层
  2. NUMA与vNUMA的注意事项
  3. CPU资源热插拔

CPU资源管理

  1. CPU保留
  2. CPU限制
  3. 配置CPU保留和限制
  4. 资源池
    1. 资源池的CPU保留
    2. 资源池的CPU限制
    3. 资源池共享

性能问题的故障排除

  1. 使用esxtop诊断CPU性能问题
  2. 高CPU就绪时间
  3. ESXi主机的CPU使用率高
  4. 用户的CPU使用率高

内存

内存管理

  1. 内存虚拟化
    1. 三层内存:主机物理内存、客户机物理内存、客户机虚拟内存
  2. 内存管理
    1. 向虚机分配物理内存前,管理程序将主机物理内存置零
    2. 客户机操作系统释放客户机物理内存时,管理程序不能从虚拟机回收主机物理内存
  3. 硬件辅助MMU虚拟化
    1. AMD(RVI)和Intel(EPT)

虚拟机的内存回收

  1. 透明页共享
    1. 内存过量分配
    2. 使用透明页共享、内存膨胀、内存压缩和管理程序内存交换来实现过量分配
    3. 虚机使用相同版本的客户机操作系统,产生复制内存页
    4. ESXI不会对大内存页使用透明页内存共享
    5. 建议开启大内存页
  2. 内存膨胀
    1. 需要VMTools驱动支持(vmmemctl)
    2. 解决主机物理内存压力,回收主机物理内存页
      1. 配置内存膨胀
      2. 禁用内存膨胀
  3. 内存压缩
    1. 如果可被压缩50%,则执行压缩
    2. 否则交换到磁盘
    3. 虚机压缩默认最大10%的压缩量
  4. 管理程序内存交换
    1. .vswap 交换文件,与客户机物理内存相同
    2. 会产生严重的性能问题
  5. 主机SSD缓存交换
    1. 配置两块SSD RAID-1 作为主机缓存
  6. 主机内存回收
    1. 内存状态:High、Soft、Hard、Low
  7. 空闲页回收
    1. 空闲内存税

管理虚拟机内存分配

  1. 工作集大小
  2. 比例分配算法
    1. 内存共享
    2. 内存保留
    3. 内存限制
    4. 内存和资源池
  3. 改变虚拟机内存大小
  4. 内存开销
  5. 内存过量

解决内存性能问题

  1. 使用 esxtop 来诊断内存性能问题
  2. 高虚拟机已消耗内存
  3. 高内存膨胀
  4. 管理系统内存交换
  5. 客户机操作系统内存交换

网络

创建网络设计

  1. 物理网络的设计
    1. 确保有足够的带宽
    2. 确保有足够的物理网络上行链路,以提供网络隔离和冗余
    3. 检查网络瓶颈,以确保流量的传输速度
  2. ESXi主机网卡需求
    1. TCP校验和卸载
    2. TCP分段卸载(TSO)
    3. 大型接收卸载
    4. 支持巨型帧
    5. 支持网络队列(NetQueue)

选择虚拟交换机

  1. 标准vSwitch
    1. 批量标准化部署,保持vSwitch配置的一致性
    2. 使用powercli脚本来保持一致性
  2. vSphere分布式交换机(dvSwtich)
    1. 链路层发现协议(LLDP)
    2. NetFlow协议
    3. 网络 I/O 控制( NOIC)
      1. 共享 定义共享来控制那些虚机获得网络流量优先级
      2. 限制 限制特定虚机可消耗网络资源的最大限度

选择主机硬件

  1. 主机服务器类型
    1. 刀片服务器
    2. 机架服务器
  2. 网络适配器
    1. 虚机和vmkernel流量分离
    2. 不同的vmkernel流量应当分离
    3. 容错流量应当分离
    4. IP存储流量应当与其他类型流量隔离
    5. 应当为客户机iSCSI流量提供专用的上行链路

性能设计

  1. ESXi主机层性能
    1. vSwitch 负载均衡
      1. 基于始发虚拟端口的路由策略
      2. 基于源MAC哈希的路由策略
      3. 基于IP哈希的路由策略
      4. 基于物理NIC负载的路由策略
    2. CPU使用率
    3. 网络 I/O 控制
    4. 多网卡 vMotion
    5. DirectPath I/O 和 单根 I/O 虚拟化
  2. 虚拟机性能
    1. 准虚拟化网卡驱动程序
      1. 巨型帧
      2. 接收端缩放(RSS)
      3. SplitRX模式
    2. 协同定位网络依赖虚拟机
    3. 网络延迟敏感度
  3. 解决网络问题
    1. 虚拟机网络性能缓慢问题
      1. 虚拟机到物理网卡的映射
      2. 使用高使用率的物理网卡
      3. 检测高使用率的CPU
      4. 检测配置不合理的物理网卡(双工)
      5. 流量整形的不合理配置
      6. 网络包丢失

存储

选择存储平台

  1. SAN
    1. 光纤信道(FC)
    2. 以太网光纤信道协议(FCoE)
    3. iSCSI
  2. NAS
  3. 虚拟 SAN

设计物理存储

  1. 确定需求
    1. 评估性能和容量
    2. 与你的软件供应商合作
    3. 与应用提供商合作
    4. 信息整合
  2. RAID 级别
  3. 闪存基础设施层
  4. IP-SAN

设计vSphere存储

  1. 存储的重要性
  2. VAAI
  3. 存储 I/O 控制
  4. 存储分布式资源调度程序
    1. 不把不同类型的数据存储放在同一个数据存储集群中
    2. 尽量使用大小相近的数据存储作为数据存储集群的构成
    3. 为每种类型创建单独的数据存储集群
    4. 使用相同物理磁盘支持的数据存储将不会使存储DRA平衡I/O负载
  5. 配置驱动存储
    1. 存储感知的vSphere API
    2. 用户定义的存储性能
    3. 虚拟机存储策略
  6. 数据存储大小
  7. vFlash 读缓存
  8. 虚拟SAN
    1. 分布式RAID
    2. 固态硬盘
    3. 存储策略
      1. 容许的失效数
      2. 每个对象的磁盘条带数量
      3. 闪存读缓存预留
      4. 对象空间预留
    4. 为性能设计vSAN
      1. 10GB网络
      2. 专用NIC
      3. 高速SSD
  9. IP存储巨型帧

优化虚拟机性能

  1. 裸映射与VMDK文件
  2. 虚拟磁盘类型
  3. 虚拟SCSI适配器
  4. 客户操作系统磁盘对齐

故障排除

  1. 存储延迟
    1. 理解和观察存储延迟
    2. 解决方法
      1. 后端存储过载
      2. 存储配置错误
      3. 带宽饱和
      4. 其他潜在因素
  2. 错误配置应用程序的存储
  3. 存储队列
    1. 队列监控管理
    2. 存储I/O 控制的使用
  4. 端对端网络

性能设计

准备工作

  1. 确定参数
  2. 构建应用程序
  3. 评估物理性能
  4. 从默认值开始

建立基准

  1. CPU基础设施基准
  2. 内存
  3. 网络
  4. 存储

建立你的工具箱

容量规划工具

  1. 使用容量规划工具
    1. VMware容量规划器
    2. 微软评估和规划工具包
  2. 运行容量管理

性能分析工具

  1. esxtop
  2. vscsiStats

性能基准测试工具

  1. VMmark
  2. vBenchmark

性能仿真工具

  1. CPU/内存
  2. 存储
  3. 网络

构建测试LAB

用途

  1. 测试和复现生产环境的实施以及故障
  2. 新的应用和补丁的测试
  3. 新硬件的基准测试
  4. 学习

成功策略

  1. 建立真实的环境
  2. 建立实验室
  3. 使用合适的测量工具

建立Lab

  1. 测试目标
  2. 实验小结
  3. 供应实验室
  4. 定义工作负载和配置
  5. 实验室的事后分析