• Frederic Weisbecker's avatar
    perf tools: callchain: Fix bad rounding of minimum rate · c0a8865e
    Frederic Weisbecker authored
    Sometimes we get callchain branches that have a rate under the
    limit given by the user.
    
    Say you launched:
    
     perf record -f -g -a ./hackbench 10
     perf report -g fractal,10.0
    
    And you got:
    
    2.33%       hackbench  [kernel]                  [k] _spin_lock_irqsave
                    |
                    |--78.57%-- remove_wait_queue
                    |          poll_freewait
                    |          do_sys_poll
                    |          sys_poll
                    |          sysenter_dispatch
                    |          0xf7ffa430
                    |          0x1ffadea3c
                    |
                    |--7.14%-- __up_read
                    |          up_read
                    |          do_page_fault
                    |          page_fault
                    |          0xf7ffa430
                    |          0xa0df710000000a
                    ...
    
    It is abnormal to get a 7.14% branch whereas we passed a 10%
    filter.
    
    The problem is that we round down the minimum threshold. This
    happens mostly when we have very low number of events. If the
    total amount of your branch is 4 and you have a subranch of 3
    events, filtering to 90% will be computed like follows:
    
      limit = 4 * 0.9;
    
    The result is about 3.6, but the cast to integer will round
    down to 3. It means that our filter is actually of 75%
    
    We must then explicitly round up the minimum threshold.
    Reported-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: acme@redhat.com
    Cc: peterz@infradead.org
    Cc: efault@gmx.de
    LKML-Reference: <20090809024235.GA10146@nowhere>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    c0a8865e
callchain.c 8.05 KB