💻 使用 perf KVM 模块进行性能统计分析
Linux perf 工具提供了一个专用的 KVM 模块(perf kvm),它集成了性能统计(stat)功能,用于收集和报告 KVM 虚拟机 VCPU 退出(VM-Exit)事件的详细信息,是诊断虚拟化性能瓶颈的重要工具。
🚨 运行要求与权限
由于 KVM 模块需要访问内核的跟踪点(Tracepoints),因此**必须使用 sudo(root 权限)**运行所有 record 和 report 命令,否则会导致权限不足或数据文件为空。
1. 录制性能数据(perf kvm stat record)
在开始录制之前,请确保你的 KVM 虚拟机(Guest OS)正在运行,并且正在执行你想要分析的工作负载。
核心原则:限制录制时间,以避免生成过于庞大的数据文件,导致分析时间过长。
Bash
# 启动 KVM 虚拟机后,在宿主机终端执行此命令。
# 此示例将录制 KVM 事件 10 秒。
sudo perf kvm stat record sleep 10
# 提示:在 record 运行的 10 秒内,确保在虚拟机内进行操作,
# 以便 perf 捕获到活跃的 KVM 退出事件。
perf record 将自动停止并在当前目录下生成包含性能数据的记录文件(通常是 perf.data.guest 或 perf.data)。
2. 生成性能报告(perf kvm stat report)
数据收集完成后,使用 report 子命令来解析和展示收集到的数据。此步骤也需要 sudo 权限。
Bash
# 在 record 命令停止后,在同一目录下执行此命令。
sudo perf kvm stat report
3. 分析报告界面
执行 report 命令后,你将进入一个交互式终端界面,其中会展示 KVM VCPU 的退出统计分析。
报告的关键分析项包括:
| 列名 | 含义 | 用途 |
| VCPU 退出到宿主机内核的原因(如 EPT 违规、IO 指令、HLT 指令等)。 | 定位虚拟机与宿主机交互最频繁的操作。 | |
| 发生的总次数。 | 衡量每种退出事件的频率。 | |
| 该退出事件占总退出事件的百分比。 | 快速识别主要的退出类型。 | |
| Time% | 宿主机内核处理该退出事件所花费的总时间占总时间的百分比。 | 识别最耗时的退出事件,它是主要的性能瓶颈所在。 |
| Avg time | 平均每次处理该退出事件所花费的时间。 | 评估单个退出事件的平均延迟。 |
分析重点:
在分析报告时,应特别关注 Time% 最高的退出原因。高百分比意味着 KVM 花费了大量时间在处理这类特定的 VM-Exit,这通常是需要优化的地方。
perf kvm stat 是 Linux perf 工具集中的一个子命令,用于收集和报告 KVM 虚拟机的 VCPU 退出(VM-Exit)事件统计信息,帮助诊断虚拟化性能瓶颈。
🚨 运行要求与权限
由于 perf kvm stat 需要访问内核的跟踪点(Tracepoints),因此**必须使用 sudo(root 权限)**运行所有 record 和 report 命令,否则会导致权限不足或数据文件为空。
1. 录制性能数据(Record)
在开始录制之前,请确保你的 KVM 虚拟机(Guest OS)正在运行,并且正在执行你想要分析的工作负载。
核心原则:限制录制时间,以避免生成过于庞大的数据文件,导致分析时间过长。
Bash
# 启动 KVM 虚拟机后,在宿主机终端执行此命令。
# 此示例将录制 KVM 事件 10 秒。
sudo perf kvm stat record sleep 10
# 提示:在 record 运行的 10 秒内,确保在虚拟机内进行操作,
# 以便 perf 捕获到活跃的 KVM 退出事件。
perf record 将自动停止并在当前目录下生成包含性能数据的记录文件(通常是 perf.data.guest 或 perf.data)。
2. 生成性能报告(Report)
数据收集完成后,使用 report 子命令来解析和展示收集到的数据。此步骤也需要 sudo 权限。
Bash
# 在 record 命令停止后,在同一目录下执行此命令。
sudo perf kvm stat report
3. 分析报告界面
执行 report 命令后,你将进入一个交互式终端界面,其中会展示 KVM VCPU 的退出统计分析。
报告的关键分析项包括:
| 列名 | 含义 | 用途 |
| VCPU 退出到宿主机内核的原因(如 EPT 违规、IO 指令、HLT 指令等)。 | 定位虚拟机与宿主机交互最频繁的操作。 | |
| 发生的总次数。 | 衡量每种退出事件的频率。 | |
| 该退出事件占总退出事件的百分比。 | 快速识别主要的退出类型。 | |
| Time% | 宿主机内核处理该退出事件所花费的总时间占总时间的百分比。 | 识别最耗时的退出事件,它是主要的性能瓶颈所在。 |
| Avg time | 平均每次处理该退出事件所花费的时间。 | 评估单个退出事件的平均延迟。 |
分析重点:
在分析报告时,应特别关注 Time% 最高的退出原因。高百分比意味着 KVM 花费了大量时间在处理这类特定的 VM-Exit,这通常是需要优化的地方。