lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <564C2FD4.3070101@huawei.com>
Date:	Wed, 18 Nov 2015 15:59:16 +0800
From:	"Wangnan (F)" <wangnan0@...wei.com>
To:	Jiri Olsa <jolsa@...hat.com>
CC:	Jiri Olsa <jolsa@...nel.org>,
	Arnaldo Carvalho de Melo <acme@...nel.org>,
	lkml <linux-kernel@...r.kernel.org>,
	David Ahern <dsahern@...il.com>,
	"Peter Zijlstra" <peterz@...radead.org>,
	Ingo Molnar <mingo@...nel.org>,
	Namhyung Kim <namhyung@...nel.org>,
	Milian Wolff <milian.wolff@...b.com>
Subject: Re: [PATCH 2/3] perf tools: Add callchain order support for libunwind
 DWARF unwinder



On 2015/11/18 15:54, Jiri Olsa wrote:
> On Wed, Nov 18, 2015 at 12:13:08PM +0800, Wangnan (F) wrote:
>
> SNIP
>
>>       3.38%  a.out    a.out             [.] funcc
>>                |
>>                ---funcc
>>                   |
>>                   |--2.70%-- funcb
>>                   |          funca
>>                   |          main
>>                   |          __libc_start_main
>>                   |          _start
>>                   |
>>                    --0.68%-- 0
>>
>>
>> I'm not sure whether we can regard this behavior changing as a bugfix? I
>> think
>> there may be some reason the original code explicitly avoid creating an '0'
>> entry.
>>
>> Then I tried to find why perf can't get call frame on my case, and
>> I guess there's something wrong whe dealing with 'call' command, because
>> the instruction on it I can't get callchain from libunwind is a 'callq':
>>
>>    ...
>>    4005bf:       be 00 00 00 00          mov    $0x0,%esi
>>    4005c4:       48 89 c7                mov    %rax,%rdi
>>    4005c7:       e8 74 fe ff ff          callq  400440 <gettimeofday@plt>
>>                  us2 = tv2.tv_sec * 1000000 + tv2.tv_usec;
>>    4005cc:       48 8b 04 24             mov    (%rsp),%rax
>>    ...
>>
>> But this is another problem, we can discuss it in a new thread.
> so the problem is you dont see the gettimeofday call at the end?

No. The problem is when sample is taken at 'callq' perf is unable to
unwind correctly, even with dwarf and user stack.

> could you share the test code?


I have posted a detail analysis in [1] (rechecked, you are in cc-list).
Test code is here:

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

static volatile int x = 0;

int funcc(void)
{
     struct timeval tv1, tv2;
     unsigned long us1, us2;

     gettimeofday(&tv1, NULL);

     us1 = tv1.tv_sec * 1000000 + tv1.tv_usec;

     while(1) {
         x = x + 100;
         gettimeofday(&tv2, NULL);
         us2 = tv2.tv_sec * 1000000 + tv2.tv_usec;
         if (us2 - us1 >= 3000000)
             break;
     }
     return x;
}
int funcb(void) { return funcc();}
int funca(void) { return funcb();}
int main() { funca(); return 0;}

Thank you.

[1] http://lkml.kernel.org/r/564C26C4.2040603@huawei.com


>
> thanks,
> jirka


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ