Show Table of Contents
2.2. perf kvm
您可以使用带有
kvm 选项的 perf 命令,从主机收集客机运行系统的统计数据。
在 Red Hat Enterprise Linux 中, perf 软件包提供
perf 命令。运行 rpm -q perf 检查 perf 软件包是否已安装。如果没有安装且您想安装该软件包来收集分析客机运行系统统计数据,请以 root 用户运行以下命令:
# yum install perf
为了在主机中使用
perf kvm,您需要从客户端获取 /proc/modules 和 /proc/kallsyms 文件。有两种可实现的方法。参考以下程序,用过程 2.1, “从客户端向主机复制 proc 文件” 将文件转换逐级并在文件中运行报告。或者参照过程 2.2, “备选:使用 sshfs 直接访问文件” 直接安装客户端来获取文件。
过程 2.1. 从客户端向主机复制 proc 文件
重要
如果您直接复制必需文件(例如通过
scp 命令),您只会复制零长度的文件。此处描述了首先将客户端中的文件复制到临时位置(通过cat 命令),然后通过 perf kvm 命令将它们复制到主机使用的过程。
登录客户端并保存文件
登录客户端并将/proc/modules和/proc/kallsyms保存到临时位置,文件名为/tmp:# cat /proc/modules > /tmp/modules # cat /proc/kallsyms > /tmp/kallsyms
将临时文件复制到主机
在您退出客户端之后,运行以下scp命令,将已保存的文件复制到主机。如果 TCP 端口和主机名称不符,应替换主机名称:# scp root@GuestMachine:/tmp/kallsyms guest-kallsyms # scp root@GuestMachine:/tmp/modules guest-modules
现在您在主机上拥有了两个客户端的文件(guest-kallsyms和guest-modules),准备就绪通过perf kvm命令进行使用。通过 perf kvm 对事件进行记录和报告
使用前一步骤中获取的文件,并纪录和报告客户端或(与)主机中的事件现在是可行的。运行以下示例命令:# perf kvm --host --guest --guestkallsyms=guest-kallsyms \ --guestmodules=guest-modules record -a -o perf.data
注意
如果 --host 和 --guest 均在命令中使用,输出将被储存在perf.data.kvm中。如果只有 --host 被使用,文件将被命名为perf.data.host。同样地,如果仅有 --guest 被使用,文件将被命名为perf.data.guest。请按 Ctrl-C 停止纪录。报告事件
以下示例命令使用纪录过程中获取的文件,并将输出重新定向到一个新文件:analyze。perf kvm --host --guest --guestmodules=guest-modules report -i perf.data.kvm \ --force > analyze
查看并分析analyze文件内容,检测纪录的事件:# cat analyze # Events: 7K cycles # # Overhead Command Shared Object Symbol # ........ ............ ................. ......................... # 95.06% vi vi [.] 0x48287 0.61% init [kernel.kallsyms] [k] intel_idle 0.36% vi libc-2.12.so [.] _wordcopy_fwd_aligned 0.32% vi libc-2.12.so [.] __strlen_sse42 0.14% swapper [kernel.kallsyms] [k] intel_idle 0.13% init [kernel.kallsyms] [k] uhci_irq 0.11% perf [kernel.kallsyms] [k] generic_exec_single 0.11% init [kernel.kallsyms] [k] tg_shares_up 0.10% qemu-kvm [kernel.kallsyms] [k] tg_shares_up [输出删节……]
过程 2.2. 备选:使用 sshfs 直接访问文件
重要
这一步仅被作为一个提供的示例。您需要依据环境替换属性值。# Get the PID of the qemu process for the guest: PID=`ps -eo pid,cmd | grep "qemu.*-name GuestMachine" \ | grep -v grep | awk '{print $1}'` # Create mount point and mount guest mkdir -p /tmp/guestmount/$PID sshfs -o allow_other,direct_io GuestMachine:/ /tmp/guestmount/$PID # Begin recording perf kvm --host --guest --guestmount=/tmp/guestmount \ record -a -o perf.data # Ctrl-C interrupts recording. Run report: perf kvm --host --guest --guestmount=/tmp/guestmount report \ -i perf.data # Unmount sshfs to the guest once finished: fusermount -u /tmp/guestmount

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.