Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
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