01 Oct, 2018

1 commit


30 Aug, 2018

7 commits

  • When filtering by guest (interactive commands 'p'/'g'), and the respective
    guest was destroyed, detect when the guest is up again through the guest
    name if possible.
    I.e. when displaying events for a specific guest, it is not necessary
    anymore to restart kvm_stat in case the guest is restarted.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Stefan Raspl
     
  • For destroyed guests, kvm_stat essentially freezes with the last data
    displayed. This is acceptable for users, in case they want to inspect the
    final data. But it looks a bit irritating. Therefore, detect this situation
    and display a respective indicator in the header.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Stefan Raspl
     
  • When running with the DebugFS provider, removal of a guest can result in a
    negative CurAvg/s, which looks rather confusing.
    If so, suppress the body refresh and print a message instead.
    To reproduce, have at least one guest A completely booted. Then start
    another guest B (which generates a huge amount of events), then destroy B.
    On the next refresh, kvm_stat should display a whole lot of negative values
    in the CurAvg/s column.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Stefan Raspl
     
  • When setting a PID filter in debugfs, we unnecessarily reset the
    statistics, although there is no reason to do so. This behavior was
    merely introduced with commit 9f114a03c6854f "tools/kvm_stat: add
    interactive command 'r'", most likely to mimic the behavior of
    the tracepoints provider in this respect. However, there are plenty
    of differences between the two providers, so there is no reason not
    to take advantage of the possibility to filter by PID without
    resetting the statistics.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Stefan Raspl
     
  • With pid filtering active, when a guest is removed e.g. via virsh shutdown,
    successive updates produce garbage.
    Therefore, we add code to detect this case and prevent further body updates.
    Note that when displaying the help dialog via 'h' in this case, once we exit
    we're stuck with the 'Collecting data...' message till we remove the filter.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Stefan Raspl
     
  • When filtering by guest, kvm_stat displays garbage when the guest is
    destroyed - see sample output below.
    We add code to remove the invalid paths from the providers, so at least
    no more garbage is displayed.
    Here's a sample output to illustrate:

    kvm statistics - pid 13986 (foo)

    Event Total %Total CurAvg/s
    diagnose_258 -2 0.0 0
    deliver_program_interruption -3 0.0 0
    diagnose_308 -4 0.0 0
    halt_poll_invalid -91 0.0 -6
    deliver_service_signal -244 0.0 -16
    halt_successful_poll -250 0.1 -17
    exit_pei -285 0.1 -19
    exit_external_request -312 0.1 -21
    diagnose_9c -328 0.1 -22
    userspace_handled -713 0.1 -47
    halt_attempted_poll -939 0.2 -62
    deliver_emergency_signal -3126 0.6 -208
    halt_wakeup -7199 1.5 -481
    exit_wait_state -7379 1.5 -493
    diagnose_500 -56499 11.5 -3757
    exit_null -85491 17.4 -5685
    diagnose_44 -133300 27.1 -8874
    exit_instruction -195898 39.8 -13037
    Total -492063

    Signed-off-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Stefan Raspl
     
  • Python3 returns a float for a regular division - switch to a division
    operator that returns an integer.
    Furthermore, filters return a generator object instead of the actual
    list - wrap result in yet another list, which makes it still work in
    both, Python2 and 3.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Stefan Raspl
     

29 Mar, 2018

3 commits

  • Unused since added in 18e8f4100

    Signed-off-by: Cole Robinson
    Reviewed-and-tested-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Cole Robinson
     
  • $ python3 tools/kvm/kvm_stat/kvm_stat
    Traceback (most recent call last):
    File "tools/kvm/kvm_stat/kvm_stat", line 1668, in
    main()
    File "tools/kvm/kvm_stat/kvm_stat", line 1639, in main
    assign_globals()
    File "tools/kvm/kvm_stat/kvm_stat", line 1618, in assign_globals
    for line in file('/proc/mounts'):
    NameError: name 'file' is not defined

    open() is the python3 way, and works on python2.6+

    Signed-off-by: Cole Robinson
    Reviewed-and-tested-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Cole Robinson
     
  • $ python3 tools/kvm/kvm_stat/kvm_stat
    File "tools/kvm/kvm_stat/kvm_stat", line 1137
    def sortkey((_k, v)):
    ^
    SyntaxError: invalid syntax

    Fix it in a way that's compatible with python2 and python3

    Signed-off-by: Cole Robinson
    Tested-by: Stefan Raspl
    Signed-off-by: Radim Krčmář

    Cole Robinson
     

24 Feb, 2018

12 commits

  • The 'Total' line looks a bit weird when we have a single event only. This
    can happen e.g. due to filters. Therefore suppress when there's only a
    single event in the output.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • We keep the current logic that sorts all events (parent and child), but
    re-shuffle the events afterwards, grouping the children after the
    respective parent. Note that the percentage column for child events
    gives the percentage of the parent's total.
    Since we rework the logic anyway, we modify the total average
    calculation to use the raw numbers instead of the (rounded) averages.
    Note that this can result in differing numbers (between total average
    and the sum of the individual averages) due to rounding errors.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Drilldown (i.e. toggle display of child trace events) was implemented by
    overriding the fields filter. This resulted in inconsistencies: E.g. when
    drilldown was not active, adding a filter that also matches child trace
    events would not only filter fields according to the filter, but also add
    in the child trace events matching the filter. E.g. on x86, setting
    'kvm_userspace_exit' as the fields filter after startup would result in
    display of kvm_userspace_exit(DCR), although that wasn't previously
    present - not exactly what one would expect from a filter.
    This patch addresses the issue by keeping drilldown and fields filter
    separate. While at it, we also fix a PEP8 issue by adding a blank line
    at one place (since we're in the area...).
    We implement this by adding a framework that also allows to define a
    taxonomy among the debugfs events to identify child trace events. I.e.
    drilldown using 'x' can now also work with debugfs. A respective parent-
    child relationship is only known for S390 at the moment, but could be
    added adjusting other platforms' ARCH.dbg_is_child() methods
    accordingly.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • We can do with a single dialog that takes both, pids and guest names.
    Note that we keep both interactive commands, 'p' and 'g' for now, to
    avoid confusion among users used to a specific key.

    While at it, we improve on some minor glitches regarding curses usage,
    e.g. cursor still visible when not supposed to be.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Helps quite a bit reading the code when it's obvious when a method is
    intended for internal use only.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Te checks for debugfs assumed that debugfs is always mounted at
    /sys/kernel/debug - which is likely, but not guaranteed. This is addressed
    by checking /proc/mounts for the actual location.
    Furthermore, when debugfs was mounted, but the kvm module not loaded, a
    misleading error pointing towards debugfs not present was given.
    To reproduce,
    (a) run kvm_stat with debugfs mounted at a place different from
    /sys/kernel/debug
    (b) run kvm_stat with debugfs mounted but kvm module not loaded

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Entering an invalid regular expression did not produce any indication of an
    error so far.
    To reproduce, press 'f' and enter 'foo(' (with an unescaped bracket).

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • When we apply a filter that will only leave child trace events, we
    receive a ZeroDivisionError when calculating the percentages.
    In that case, provide percentages based on child events only.
    To reproduce, run 'kvm_stat -f .*[\(].*'.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Use '==' for equality checks and 'is' when comparing identities.

    An example where '==' and 'is' behave differently:
    >>> a = 4242
    >>> a == 4242
    True
    >>> a is 4242
    False

    Signed-off-by: Marc Hartmayer
    Signed-off-by: Paolo Bonzini

    Marc Hartmayer
     
  • If it's clear that the values of a dictionary will be used then use
    the '.items()' method.

    Signed-off-by: Marc Hartmayer
    Tested-by: Stefan Raspl
    [Include fix for logging mode by Stefan Raspl]
    Signed-off-by: Paolo Bonzini

    Marc Hartmayer
     
  • Use a namedtuple for storing the values as it allows to access the
    fields of a tuple via names. This makes the overall code much easier
    to read and to understand. Access by index is still possible as
    before.

    Signed-off-by: Marc Hartmayer
    Tested-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Marc Hartmayer
     
  • The 'sortkey' function references a value in its enclosing
    scope (closure). This is not common practice for a sort key function
    so let's replace it. Additionally, the function 'sorted' has already a
    parameter for reversing the result therefore the inversion of the
    values is unneeded. The check for stats[x][1] is also superfluous as
    it's ensured that this value is initialized with 0.

    Signed-off-by: Marc Hartmayer
    Tested-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Marc Hartmayer
     

21 Dec, 2017

1 commit

  • Sort the fields returned by specifying '-f help' on the command line.
    While at it, simplify the code a bit, indent the output and eliminate an
    extra blank line at the beginning.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     

14 Dec, 2017

10 commits

  • Add a line for the total number of events and current average at the
    bottom of the body.
    Note that both values exclude child trace events. I.e. if drilldown is
    activated via interactive command 'x', only the totals are accounted, or
    we'd be counting these twice (see previous commit "tools/kvm_stat: fix
    child trace events accounting").

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Unhandled arguments, which could easily include typos, are simply
    ignored. We should be strict to avoid undetected typos.
    To reproduce start kvm_stat with an extra argument, e.g.
    'kvm_stat -d bnuh5ol' and note that this will actually work.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Errors while parsing the '-g' command line argument result in display of
    usage information prior to the error message. This is a bit confusing,
    as the command line is syntactically correct.
    To reproduce, run 'kvm_stat -g' and specify a non-existing or inactive
    guest.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Passing an invalid regular expression on the command line results in a
    traceback. Note that interactive specification of invalid regular
    expressions is not affected
    To reproduce, run "kvm_stat -f '*'".

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • The man page update for this new functionality was omitted.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Child trace events were included in calculation of the overall total,
    which is used for calculation of the percentages of the '%Total' column.
    However, the parent trace envents' stats summarize the child trace
    events, hence we'd incorrectly account for them twice, leading to
    slightly wrong stats.
    With this fix, we use the correct total. Consequently, the sum of the
    child trace events' '%Total' column values is identical to the
    respective value of the respective parent event. However, this also
    means that the sum of the '%Total' column values will aggregate to more
    than 100 percent.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Commit 67fbcd62f54d ("tools/kvm_stat: add '-f help' to get the available
    event list") added support for '-f help'. However, the extra handling of
    'help' will also take effect when 'help' is specified as a regex in
    interactive mode via 'f'. This results in display of all events while
    only those matching this regex should be shown.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • When updating the fields filter, tracepoint events of fields previously
    not visible were not enabled, as TracepointProvider.update_fields()
    updated the member variable directly instead of using the setter, which
    triggers the event enable/disable.
    To reproduce, run 'kvm_stat -f kvm_exit', press 'c' to remove the
    filter, and notice that no add'l fields that do not match the regex
    'kvm_exit' will appear.
    This issue was introduced by commit c469117df059 ("tools/kvm_stat:
    simplify initializers").

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • When displaying debugfs events listed by guests, an attempt to switch to
    reporting of stats for individual child trace events results in garbled
    output. Reason is that when toggling drilldown, the update of the stats
    doesn't honor when events are displayed by guests, as indicated by
    Tui._display_guests.
    To reproduce, run 'kvm_stat -d' and press 'b' followed by 'x'.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     
  • Specifying a guest via '-g foo' always results in an error:
    $ kvm_stat -g foo
    Usage: kvm_stat [options]

    kvm_stat: error: Error while searching for guest "foo", use "-p" to
    specify a pid instead

    Reason is that Tui.get_pid_from_gname() is not static, as it is supposed
    to be.

    Signed-off-by: Stefan Raspl
    Tested-by: Christian Borntraeger
    Signed-off-by: Paolo Bonzini

    Stefan Raspl
     

17 Nov, 2017

1 commit

  • Pull KVM updates from Radim Krčmář:
    "First batch of KVM changes for 4.15

    Common:
    - Python 3 support in kvm_stat
    - Accounting of slabs to kmemcg

    ARM:
    - Optimized arch timer handling for KVM/ARM
    - Improvements to the VGIC ITS code and introduction of an ITS reset
    ioctl
    - Unification of the 32-bit fault injection logic
    - More exact external abort matching logic

    PPC:
    - Support for running hashed page table (HPT) MMU mode on a host that
    is using the radix MMU mode; single threaded mode on POWER 9 is
    added as a pre-requisite
    - Resolution of merge conflicts with the last second 4.14 HPT fixes
    - Fixes and cleanups

    s390:
    - Some initial preparation patches for exitless interrupts and crypto
    - New capability for AIS migration
    - Fixes

    x86:
    - Improved emulation of LAPIC timer mode changes, MCi_STATUS MSRs,
    and after-reset state
    - Refined dependencies for VMX features
    - Fixes for nested SMI injection
    - A lot of cleanups"

    * tag 'kvm-4.15-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (89 commits)
    KVM: s390: provide a capability for AIS state migration
    KVM: s390: clear_io_irq() requests are not expected for adapter interrupts
    KVM: s390: abstract conversion between isc and enum irq_types
    KVM: s390: vsie: use common code functions for pinning
    KVM: s390: SIE considerations for AP Queue virtualization
    KVM: s390: document memory ordering for kvm_s390_vcpu_wakeup
    KVM: PPC: Book3S HV: Cosmetic post-merge cleanups
    KVM: arm/arm64: fix the incompatible matching for external abort
    KVM: arm/arm64: Unify 32bit fault injection
    KVM: arm/arm64: vgic-its: Implement KVM_DEV_ARM_ITS_CTRL_RESET
    KVM: arm/arm64: Document KVM_DEV_ARM_ITS_CTRL_RESET
    KVM: arm/arm64: vgic-its: Free caches when GITS_BASER Valid bit is cleared
    KVM: arm/arm64: vgic-its: New helper functions to free the caches
    KVM: arm/arm64: vgic-its: Remove kvm_its_unmap_device
    arm/arm64: KVM: Load the timer state when enabling the timer
    KVM: arm/arm64: Rework kvm_timer_should_fire
    KVM: arm/arm64: Get rid of kvm_timer_flush_hwstate
    KVM: arm/arm64: Avoid phys timer emulation in vcpu entry/exit
    KVM: arm/arm64: Move phys_timer_emulate function
    KVM: arm/arm64: Use kvm_arm_timer_set/get_reg for guest register traps
    ...

    Linus Torvalds
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

12 Oct, 2017

1 commit

  • Make kvm_stat support Python 3 by changing the use of "print" to a
    function rather than a statement, switching from "iteritems" and
    "iterkeys" (removed in Python 3) to "items" and "keys" respectively,
    and decoding bytes to strings when dealing with text.

    With this change, kvm_stat is usable with Python 2.6 and greater.

    Signed-off-by: Jeremy Cline
    Signed-off-by: Radim Krčmář

    Jeremy Cline
     

27 Jul, 2017

2 commits


27 Jun, 2017

1 commit

  • Toggle display total number of events by guest (debugfs only).
    When switching to display of events by guest, field filters remain
    active. I.e. the number of events per guest reported considers only
    events matching the filters. Likewise with pid/guest filtering.
    Note that when switching to display of events by guest, DebugfsProvider
    remains to collect data for events as it did before, but the read()
    method summarizes the values by pid.

    Signed-off-by: Stefan Raspl
    Signed-off-by: Paolo Bonzini

    Stefan Raspl