基于 ARM 的 QorIQ SoC 上的 KVM 可铸就卓越的虚拟化性能 FTF-DES-N1887 DIANA CRĂCIUN 软件工程师 2016 年 5 月 16 日
软件产品和服务 开发工具 CodeWarrior 运行时产品 VortiQa 软件解决方案 加快客户产品上市时间 解决方案参考 物联网网关 OpenWRT+ 集成服务 安全咨询 强化 Linux 提供商用软件 支持 服务和解决方案 简化与恩智浦的软件合作 Linux 服务 商业支持 性能调谐 1 请在线访问 :www.nxp.com/networking-services 创造成功!
引领网络中的 64 位 ARM 浪潮 第 1 个 ARM64 采用小于 10x10mm 的封装 第 1 个 10G WAN ARM64 用于家庭网关 家庭 SMB 网关路由器和接入点 LS1024A Cortex-A9 LS1012A PPFE Cortex-A53 2Gbps PPFE 3 至 5W 2Gbps 数据包 1 Gbps 加密 1 至 2W 智能边缘网络设备 Cortex-A72 LS1043A DPAA1 Cortex-A53 LS1043/23 10Gbps 加密 10Gbps 数据包 10 至 12W 5Gbps 加密 5 至 10W LS1088A LS1046 Cortex-A53 DPAA2 20Gbps 数据包 10Gbps 加密 10 至 20Gbps 数据包 15 至 20W SDN NFV 路由 云端 LS2085A Cortex-A57 LS2085/45 DPAA2 40Gbps 数据包 20Gbps 加密 20 至 35W LS2088A Cortex-A72 LS2084/48/44 DPAA2 50Gbps 数据包 20Gbps 加密 20 至 35W 行业最具扩展性的 ARM64 通信处理器系列 LX2 和 LS3 Cortex-A72 和 Ares 16 核或更多 DPAA2 100Gbps 数据包 100Gbps 加密 2
议程 简介 KVM/QEMU ARM 虚拟化扩展 ARM 上的 KVM 结果 结论 3 3
简介 4
虚拟化和 Hypervisor 虚拟化 能够提供一个抽象层以在单个计算机系统上运行多个操作系统的硬件和软件技术 Hypervisor 是一种可创建和管理能够运行 Guest 操作系统的虚拟机的软件组件 应用 应用 应用 应用 应用 Guest 操作系统 Guest 操作系统 Guest 操作系统 应用 Guest 操作系统 Guest 操作系统 Hypervisor 主机操作系统 硬件 硬件 Hypervisor 可运行 裸机 Hypervisor 集成在主机操作系统中 - 复用操作系统基础设施 主机操作系统可运行其他应用程序 5
KVM/QEMU 6
KVM/QEMU KVM/QEMU 基于 Linux 内核的开源虚拟化技术 KVM 是一个 Linux 内核模块 虚拟机 1 虚拟机 2 QEMU 应用 QEMU 应用 QEMU 是一个使用 KVM 进行加速的用户空间仿真器 应用 操作系统 操作系统 同时运行虚拟机和 Linux 应用程序 Linux KVM 操作系统无需更改或仅需小幅更改 多核硬件 虚拟 I/O 功能 Direct / pass through I/O 为 VM 分配 I/O 设备 7
ARM 虚拟化扩展 8
ARM 虚拟化扩展 特权级别 页表虚拟化 无需重读指令 捕获和仿真 内存虚拟化 MMU SMMU EL2 syndrome 寄存器 可配置捕获 CPU 设备 Guest 接口 中断 虚拟定时器 超级调用 GIC 虚拟化支持 9
特权级别 最高特权 Hypervisor 处理捕获 / 仿真 通过异常向 EL2 过渡 捕获和仿真 中断 超级调用 EL2 捕获 返回 为每个 EL 使用单独的堆栈指针 特权指令 EL1 Guest 操作系统 最低特权 EL0 应用 10
内存虚拟化 应用 Guest 操作系统 Hypervisor 硬件 VA( 虚拟地址 ) IPA( 中间物理地址 ) PA( 物理地址 ) 2 级内存转换 首次转换将内存从 VA 转换至 IPA 由 Guest 所有 二级转换从 IPA 转换至 PA 表项由 Hypervisor 维护 首页转换 第二页转换 VA IPA PA 11
中断虚拟化 GIC (v3) 设备 中断转换服务 再分配器 CPU 接口 CPU ITS 转换服务仿真 设备 分配器 再分配器 CPU 接口 CPU 系统中存在一个分配器 需要仿真 Guest 访问虚拟 CPU 接口的直接通道 Guest 可直接 : 屏蔽中断 ACK 中断 EOI 中断 12
中断流 产生 设备产生中断 Guest 处理中断 分配 交付 设备 直接中断注入 激活 处理 禁用 中断确认 (ACK) 并变成活动状态 中断禁用 允许中断再次挂起 (EOI) 接收到中断后 Guest 被中断 硬件支持中断注入 某些情况下可能存在额外退出 ( 但应该很少 ) KVM 13
IPI 流 内核 0 内核 1 Guest Guest 程序 IPI Trap 恢复 退出 中断注入硬件支持 KVM KVM 仿真 发送 IPI 注入中断 14
ARM 上的 KVM 15
ARM 上的 KVM/QEMU 主机用户 VM 用户 QEMU 运行 vcpu 大负荷退出 EL 0(user) QEMU 应用 应用 KVM EL1 主机内核 小负荷退出 EL1(Supervisor) KVM VM 内核 Trap KVM EL2 EL 2(Hypervisor) Trap Guest 进入 Guest 退出 Guest 16
结果 17
开销来源 虚拟化可能附带成本 : 开销 但是在我们具有硬件扩展时是什么导致开销呢? 因 Guest 退出导致开销 陷阱 (Trap) 中断 Guest 速度 内存转换步骤更多 TLB/ 缓存污染 / 竞争 锁竞争 应用延迟 延迟敏感型应用在虚拟化环境中的工作特性可能不同 18
Guest 退出 示例 退出定时框架 为各种退出类型报告了在 Hypervisor 中花费的时间 类型 计数 最小值 (cycle) 最大值 (cycle) 平均值 (cycle) 合计 (cycle) 标准差 (cycle) 计数 合计 WFX 0 0 0 0 0 0 0 0 CPC15_32 0 0 0 0 0 0 0 0 CPC15_64 0 0 0 0 0 0 0 0 CP14_MR 0 0 0 0 0 0 0 0 CP14_LS 0 0 0 0 0 0 0 0 CP14_64 0 0 0 0 0 0 0 0 HVC32 0 0 0 0 0 0 0 0 SMC32 0 0 0 0 0 0 0 0 HVC64 0 0 0 0 0 0 0 0 SMC64 0 0 0 0 0 0 0 0 SYS64 0 0 0 0 0 0 0 0 IABT_LOW 0 0 0 0 0 0 0 0 DABT_LOW 0 0 0 0 0 0 0 0 DABT_IO_MEM 0 0 0 0 0 0 0 0 DABT_USER_MEM 0 0 0 0 0 0 0 0 DABT_IO_MEM_IPI 157225 10090 57218 13385 2.104.548.054 172 15722,5 210.454.805,40 INTERRUPT 159395 4963 39654 6792 1.082.746.418 226 15939,5 108.274.641,80 TIMEINGUEST 316620 163 356454 47376 15.000.203.563 1230 31662 1.500.020.356,30 DESCHEDULED 2 7036 7036 7036 14072 0 0,2 1.407,20 19
KVM Benchmark 考虑因素 QEMU VCPU 1 VCPU 2 VCPU 3 Worker (s) iothread 1 Iothread 2? VM scaling 集群 (Cluster) QEMU 线程亲和性 CPU scaling 空闲 / 繁忙主机 复现性 中断亲和性 20
测试方法和分析工具 Benchmark Coremark Lmbench 分析工具 退出定时测量 Perf 计数器 ( 硬件计数器 ) 平台 LS2080 QorIQ 硬件 21
CoreMark Microbenchmark Core centric 22
CoreMark 结果 guest/native[%] 100.40% 100.20% 100.00% 99.80% 99.60% 99.40% 99.20% 99.00% 64b CoreMark /MHz - 虚拟化与 本机 100.40% 100.20% 100.00% 99.80% 99.60% 99.40% 99.20% 99.00% 64b CoreMark /MHz - 2VM 与 1VM LXC KVM LXC KVM 23
CoreMark VM 的并行性 过量预订 (Oversubscription) Host:2 个 CoreMark 进程在同一 CPU 上运行 Guest:2 个 VM (VCPU) 在同一 CPU 上运行, 每个均在同一 CPU 上运行一个 CoreMark 实例 120% 100% 80% 60% 40% 20% 0% 64b CoreMark /MHz guest vs native VM1 VM2 VM1 + VM2 VM1 VM2 VM1 + VM2 guest/native[%] 24
LMbench Synthetic microbenchmark 带宽 Benchmark 存储器带宽 IPC 带宽 缓存 I/O 带宽 Latency Benchmark 存储器读取 信号处理 进程创建 上下文切换 进程间通信 文件系统 25
LMBench 通信带宽 guest/native[%] 文件读取带宽 读取 open2close 带宽 106% 104% 102% 100% 98% 96% 94% 92% 90% 88% 86% 102% 100% 98% 96% 94% 92% 90% 88% Mmap 读取带宽 Mmap 读取 open2close 带宽 105% 100% 95% 90% 85% 80% 75% 102% 101% 100% 99% 98% 97% 96% 95% 26
LMBench 内存带宽 内存读取带宽 guest/native[%] 内存写入带宽 102% 100% 98% 96% 94% 92% 90% 88% 86% 84% 100% 100% 100% 99% 99% 99% 99% 99% 98% 内存部分读取 / 写入带宽 110% 105% 100% 95% 90% 85% 27
LMBench 上下文切换 sub-benchmark 平衡 所有进程在同一内核上 唯一 每个进程都在不同内核上 P1 P4 P2 接收令牌开销工作发送令牌 P3 28
LMBench 上下文切换延迟 guest/native[%] 大小 = 0K( 平衡 ) 大小 = 0K( 唯一 ) 102% 100% 98% 96% 94% 92% 90% 88% 86% 84% 82% 2 4 8 16 24 32 64 96 大小 = 4K( 平衡 ) 50% 45% 40% 35% 30% 25% 20% 15% 10% 5% 0% 2 4 8 16 24 32 64 96 大小 = 4K( 唯一 ) IPI 104% 102% 100% 98% 96% 94% 92% 90% 88% 86% 84% 82% 2 4 8 16 24 32 64 96 44% 42% 40% 38% 36% 34% 32% 2 4 8 16 24 32 64 96 29
LMBench 上下文切换延迟 Scaling 大小 = 0K( 平衡 ) 大小 = 0K( 唯一 ) guest/native[%] 102% 60% 100% 98% 50% 96% 94% 40% 92% 30% 90% 88% 20% 86% 84% 10% 82% 2 4 8 16 24 32 64 96 0% 2 4 8 16 24 32 64 96 大小 = 4K( 平衡 ) 大小 = 4K( 唯一 ) 105% 60% 100% 50% 95% 40% 30% 90% 20% 85% 10% 30 80% 2 4 8 16 24 32 64 96 0% 2 4 8 16 24 32 64 96
31 上下文切换延迟分配 0 10000 20000 30000 40000 50000 60000 70000 80000 4000 4130 4260 4390 4520 4650 4780 4910 5040 5170 5300 5430 5560 5690 5820 5950 6080 6210 6340 6470 6600 6730 6860 6990 7120 7250 7380 7510 7640 7770 7900 >8000 # IPI cycle 编程 IPI 0 10000 20000 30000 40000 50000 60000 70000 80000 4000 4130 4260 4390 4520 4650 4780 4910 5040 5170 5300 5430 5560 5690 5820 5950 6080 6210 6340 6470 6600 6730 6860 6990 7120 7250 7380 7510 7640 7770 7900 >8000 # IPI cycle 接收 IPI
存储器加载延迟 VM 与本机 存储器加载延迟 线性 存储器加载延迟 随机 120% 100% 80% 60% 40% 20% 0% 120% 100% 80% 60% 40% 20% 0% 32
结论 33
结论 对于与内核相关的 benchmark, 由于退出很少, 因此性能良好 开销来源为 : 特别是由 IPI 和中断仿真造成的 Guest 退出 通过重新设计 GIC 分配器仿真而提升性能 与内存相关的 benchmark 在虚拟化环境中没有显示出重要的开销 页表级数不会产生重大影响 34
版权声明 恩智浦 恩智浦徽标 恩智浦 智慧生活, 安全连结 CoolFlux EMBRACE GREENCHIP HITAG I2C BUS ICODE JCOP LIFE VIBES MIFARE MIFARE Classic MIFARE DESFire MIFARE Plus MIFARE FleX MANTIS MIFARE ULTRALIGHT MIFARE4MOBILE MIGLO NTAG ROADLINK SMARTLX SMARTMX STARPLUG TOPFET TrenchMOS UCODE 飞思卡尔 飞思卡尔徽标 AltiVec C 5 CodeTEST CodeWarrior ColdFire ColdFire+ C Ware 高能效解决方案徽标 Kinetis Layerscape MagniV mobilegt PEG PowerQUICC Processor Expert QorIQ QorIQ Qonverge Ready Play SafeAssure SafeAssure 徽标 StarCore Symphony VortiQa Vybrid Airfast BeeKit BeeStack CoreNet Flexis MXC Platform in a Package QUICC Engine SMARTMOS Tower TurboLink 和 UMEMS 是 NXP B.V. 的商标 所有其他产品或服务名称均为其各自所有者的财产 ARM AMBA ARM Powered Artisan Cortex Jazelle Keil SecurCore Thumb TrustZone 和 μvision 是 ARM Limited( 或其子公司 ) 在欧盟和 / 或其他地区的注册商标 ARM7 ARM9 ARM11 big.little CoreLink CoreSight DesignStart Mali mbed NEON POP Sensinode Socrates ULINK 和 Versatile 是 ARM Limited( 或其子公司 ) 在欧盟和 / 或其他地区的商标 保留所有权利 Oracle 和 Java 是 Oracle 和 / 或其关联公司的注册商标 Power Architecture 和 Power.org 文字标记 Power 和 Power.org 徽标及相关标记是 Power.org 的授权商标和服务标记 2015 2016 NXP B.V. 36