「VMware vSphere 性能设计」
本书从概念和操作两方面介绍了虚拟化基础设施的性能。
CPU
虚拟化基础
- CPU保护模式
- CPU保护模式,也称为保护虚拟地址模式,是一种提供硬件级别内存保护的X86处理器操作模式。
- 实模式
- 为原始x86处理器设计
- 关闭内存保护功能
- 只有操作系统内核才可以无限制使用全部硬件资源
- 保护模式:
- 保护模式的特权等级:Ring0 Ring1 Ring2 Ring3
- Ring 0 特权最多,Ring 3 特权做少
- Ring 0:Kernel ;Ring 1 设备驱动; Ring 2 设备驱动; Ring 3 应用
- 定义CPU虚拟化的类型:
- 基于软件的CPU虚拟化:
- 运行于Ring1级别
- 需要VMM编译执行代码
- 基于硬件辅助的CPU虚拟化
- 运行于Ring0
- 使用Intel VT 或者AMD-V硬件辅助功能,无需软件编译
- 基于软件的CPU虚拟化:
- 物理CPU与虚拟CPU之间的区别
- 每一个物理处理器内核被检测为一个pCPU
- 每个线程也可以被视为一个pCPU
- vCPU状态
- 运行状态:在pCPU上被调度来运行指令
- 准备状态:在pCPU上准备调度,但由于调度延迟不直接运行
- 等待闲置状态:特殊状态(?)
- 等待状态:等待I/O操作在外部系统组件上完成
CPU的调度程序
VMware ESXi CPU调度程序的主要目标是调度“world”(VMM的进程或者线程)在pCPU上严格执行,并满足性能、吞吐率、处理器使用率上的要求。同时,调度程序也负责欺骗客户机操作系统,以使其相信自己有pCPU资源。
- 比例分配算法
- 计算优先级:数值低的优先级被认为是高优先级,数值高的优先级为低优先级
- 根据分配资源的消耗动态计算优先级
- CPU联合调度
- 严格联合调度
- 宽松联合调度
- CPU调度单元
- 调度单元的分布式锁定
- 当全部vCPU在不同的处理器上协同调度时,虚拟机的性能表现最好
- 限制同级vCPU在任意时刻只在一个单元中调度会更有效率
- 调度单元在确保了CPU调度的扩展性的同时,又限制了CPU调度的扩展性
- vSphere取消调度单元
- 单独使用等于物理CPU内核数的vCPU,会产生一个对全部调度程序调用进行序列化的全局锁定,并导致调度单元无效
- 限制了缓存的总量以及共享缓存的多核处理器上的内存带宽
- 调度单元的分布式锁定
- CPU拓扑感知负载均衡
- 拉迁移和推迁移
- world在物理CPU之间的迁移会有很高的成本
- CPU亲和:不推荐人工配置CPU亲和;保证配置给虚拟机上的pCPU数量总比vCPU的数量多至少一个
- NUMA 不统一的内存访问
- 目的:解决多核处理器上访问内存延迟问题。每个numa节点由一组处理器和指定给处理器的内存组成
- 内存在相同节点中访问时,进行本地访问
- 内存被其他节点访问时,进行远程访问
- NUMA系统的负载平衡
- NUMA系统宽虚拟机负载平衡(超线程 numa.vcpu.preferHT)
- 虚拟NUMA
- 每个插槽的内核
- 超线程架构的负载均衡:通过保持处理器流水线的繁忙状态,超线程可以提高性能
- 多核感知负载均衡
- 基于CPU负载的迁移限流
- 虚拟SMP整合(vSMP整合是的多处理器虚拟机上的同级vCPU被单个LLC调度)
- 外部VM缓存亲和力(当同一主机上的两个虚机经常发生通信时,CPU调度程序会调度相同LLC上的虚机)
适时调配CPU
- vSMP的注意事项
- 客户机操作系统硬件抽象层
- NUMA与vNUMA的注意事项
- CPU资源热插拔
CPU资源管理
- CPU保留
- CPU限制
- 配置CPU保留和限制
- 资源池
- 资源池的CPU保留
- 资源池的CPU限制
- 资源池共享
性能问题的故障排除
- 使用esxtop诊断CPU性能问题
- 高CPU就绪时间
- ESXi主机的CPU使用率高
- 用户的CPU使用率高
内存
内存管理
- 内存虚拟化
- 三层内存:主机物理内存、客户机物理内存、客户机虚拟内存
- 内存管理
- 向虚机分配物理内存前,管理程序将主机物理内存置零
- 客户机操作系统释放客户机物理内存时,管理程序不能从虚拟机回收主机物理内存
- 硬件辅助MMU虚拟化
- AMD(RVI)和Intel(EPT)
虚拟机的内存回收
- 透明页共享
- 内存过量分配
- 使用透明页共享、内存膨胀、内存压缩和管理程序内存交换来实现过量分配
- 虚机使用相同版本的客户机操作系统,产生复制内存页
- ESXI不会对大内存页使用透明页内存共享
- 建议开启大内存页
- 内存膨胀
- 需要VMTools驱动支持(vmmemctl)
- 解决主机物理内存压力,回收主机物理内存页
- 配置内存膨胀
- 禁用内存膨胀
- 内存压缩
- 如果可被压缩50%,则执行压缩
- 否则交换到磁盘
- 虚机压缩默认最大10%的压缩量
- 管理程序内存交换
- .vswap 交换文件,与客户机物理内存相同
- 会产生严重的性能问题
- 主机SSD缓存交换
- 配置两块SSD RAID-1 作为主机缓存
- 主机内存回收
- 内存状态:High、Soft、Hard、Low
- 空闲页回收
- 空闲内存税
管理虚拟机内存分配
- 工作集大小
- 比例分配算法
- 内存共享
- 内存保留
- 内存限制
- 内存和资源池
- 改变虚拟机内存大小
- 内存开销
- 内存过量
解决内存性能问题
- 使用 esxtop 来诊断内存性能问题
- 高虚拟机已消耗内存
- 高内存膨胀
- 管理系统内存交换
- 客户机操作系统内存交换
网络
创建网络设计
- 物理网络的设计
- 确保有足够的带宽
- 确保有足够的物理网络上行链路,以提供网络隔离和冗余
- 检查网络瓶颈,以确保流量的传输速度
- ESXi主机网卡需求
- TCP校验和卸载
- TCP分段卸载(TSO)
- 大型接收卸载
- 支持巨型帧
- 支持网络队列(NetQueue)
选择虚拟交换机
- 标准vSwitch
- 批量标准化部署,保持vSwitch配置的一致性
- 使用powercli脚本来保持一致性
- vSphere分布式交换机(dvSwtich)
- 链路层发现协议(LLDP)
- NetFlow协议
- 网络 I/O 控制( NOIC)
- 共享 定义共享来控制那些虚机获得网络流量优先级
- 限制 限制特定虚机可消耗网络资源的最大限度
选择主机硬件
- 主机服务器类型
- 刀片服务器
- 机架服务器
- 网络适配器
- 虚机和vmkernel流量分离
- 不同的vmkernel流量应当分离
- 容错流量应当分离
- IP存储流量应当与其他类型流量隔离
- 应当为客户机iSCSI流量提供专用的上行链路
性能设计
- ESXi主机层性能
- vSwitch 负载均衡
- 基于始发虚拟端口的路由策略
- 基于源MAC哈希的路由策略
- 基于IP哈希的路由策略
- 基于物理NIC负载的路由策略
- CPU使用率
- 网络 I/O 控制
- 多网卡 vMotion
- DirectPath I/O 和 单根 I/O 虚拟化
- vSwitch 负载均衡
- 虚拟机性能
- 准虚拟化网卡驱动程序
- 巨型帧
- 接收端缩放(RSS)
- SplitRX模式
- 协同定位网络依赖虚拟机
- 网络延迟敏感度
- 准虚拟化网卡驱动程序
- 解决网络问题
- 虚拟机网络性能缓慢问题
- 虚拟机到物理网卡的映射
- 使用高使用率的物理网卡
- 检测高使用率的CPU
- 检测配置不合理的物理网卡(双工)
- 流量整形的不合理配置
- 网络包丢失
- 虚拟机网络性能缓慢问题
存储
选择存储平台
- SAN
- 光纤信道(FC)
- 以太网光纤信道协议(FCoE)
- iSCSI
- NAS
- 虚拟 SAN
设计物理存储
- 确定需求
- 评估性能和容量
- 与你的软件供应商合作
- 与应用提供商合作
- 信息整合
- RAID 级别
- 闪存基础设施层
- IP-SAN
设计vSphere存储
- 存储的重要性
- VAAI
- 存储 I/O 控制
- 存储分布式资源调度程序
- 不把不同类型的数据存储放在同一个数据存储集群中
- 尽量使用大小相近的数据存储作为数据存储集群的构成
- 为每种类型创建单独的数据存储集群
- 使用相同物理磁盘支持的数据存储将不会使存储DRA平衡I/O负载
- 配置驱动存储
- 存储感知的vSphere API
- 用户定义的存储性能
- 虚拟机存储策略
- 数据存储大小
- vFlash 读缓存
- 虚拟SAN
- 分布式RAID
- 固态硬盘
- 存储策略
- 容许的失效数
- 每个对象的磁盘条带数量
- 闪存读缓存预留
- 对象空间预留
- 为性能设计vSAN
- 10GB网络
- 专用NIC
- 高速SSD
- IP存储巨型帧
优化虚拟机性能
- 裸映射与VMDK文件
- 虚拟磁盘类型
- 虚拟SCSI适配器
- 客户操作系统磁盘对齐
故障排除
- 存储延迟
- 理解和观察存储延迟
- 解决方法
- 后端存储过载
- 存储配置错误
- 带宽饱和
- 其他潜在因素
- 错误配置应用程序的存储
- 存储队列
- 队列监控管理
- 存储I/O 控制的使用
- 端对端网络
性能设计
准备工作
- 确定参数
- 构建应用程序
- 评估物理性能
- 从默认值开始
建立基准
- CPU基础设施基准
- 内存
- 网络
- 存储
建立你的工具箱
容量规划工具
- 使用容量规划工具
- VMware容量规划器
- 微软评估和规划工具包
- 运行容量管理
性能分析工具
- esxtop
- vscsiStats
性能基准测试工具
- VMmark
- vBenchmark
性能仿真工具
- CPU/内存
- 存储
- 网络
构建测试LAB
用途
- 测试和复现生产环境的实施以及故障
- 新的应用和补丁的测试
- 新硬件的基准测试
- 学习
成功策略
- 建立真实的环境
- 建立实验室
- 使用合适的测量工具
建立Lab
- 测试目标
- 实验小结
- 供应实验室
- 定义工作负载和配置
- 实验室的事后分析
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.