Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 2 章 性能监控工具

本章论述了用于监控客户机虚拟机环境的工具。

2.1. perf kvm

您可以使用 perf 命令和 kvm 选项从主机收集和分析客户机操作系统统计信息。perf 软件包提供 perf 命令。它通过运行以下命令来安装:
# yum install perf
要在主机中使用 perf kvm,您必须有权访问客户机中的 /proc/modules/proc/kallsyms 文件。请参阅 过程 2.1, “将 /proc 文件从 guest 复制到主机”,将文件传送到主机中,并对文件运行报告。

过程 2.1. 将 /proc 文件从 guest 复制到主机

重要
如果您直接复制所需的文件(例如,使用 scp),您将只复制零长度的文件。这个步骤描述了如何先将客户机中的文件保存到临时位置(使用 cat 命令),然后将它们复制到主机,供 perf kvm 使用。
  1. 登录到客户端并保存文件

    登录到客户端并将 /proc/modules/proc/kallsyms 保存到临时位置 /tmp 中:
    # cat /proc/modules > /tmp/modules
    # cat /proc/kallsyms > /tmp/kallsyms
    
  2. 将临时文件复制到主机

    从 guest 注销后,运行以下命令的 scp 命令将保存的文件复制到主机。如果主机名和 TCP 端口不同,您应该替换它们:
    # scp root@GuestMachine:/tmp/kallsyms guest-kallsyms
    # scp root@GuestMachine:/tmp/modules guest-modules
    
    现在,主机上 guest(guest-kallsymsguest-modules)有两个文件,可供 perf kvm 使用。
  3. 使用 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 停止记录。
  4. 报告事件

    以下示例使用由记录进程获取的 文件,并将输出重定向到新文件,从而 分析
    perf kvm --host --guest --guestmodules=guest-modules report -i perf.data.kvm \
    --force > 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
    
    [output truncated...]