From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753644AbcIFBWo (ORCPT ); Mon, 5 Sep 2016 21:22:44 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:48217 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753367AbcIFBWk (ORCPT ); Mon, 5 Sep 2016 21:22:40 -0400 Subject: Re: [PATCH 1/3 (fix commit message)] perf tools: Recognize hugetlb mapping as anon mapping To: Arnaldo Carvalho de Melo References: <1472965478-117843-1-git-send-email-wangnan0@huawei.com> <20160905191805.GA12939@kernel.org> CC: , , , Hou Pengyang , He Kuang , Arnaldo Carvalho de Melo From: "Wangnan (F)" Message-ID: <57CE1A3B.5050905@huawei.com> Date: Tue, 6 Sep 2016 09:22:03 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <20160905191805.GA12939@kernel.org> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.111.66.109] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020201.57CE1A56.0073,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 4a7754ec3bec54c66dbe71b33a034634 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2016/9/6 3:18, Arnaldo Carvalho de Melo wrote: > Em Sun, Sep 04, 2016 at 05:04:38AM +0000, Wang Nan escreveu: >> Hugetlbfs mapping should be recognized as anon mapping so user has >> a chance to create /tmp/perf-.map file for symbol resolving. This >> patch utilizes MAP_HUGETLB to identify hugetlb mapping. >> >> After this patch, if perf is started before the program starts using >> huge pages (so perf gets MMAP2 events from kernel), perf is able to >> recognize hugetlb mapping as anon mapping. > Fixing build on older distros (Centos5, Ubuntu 12.04.5, etc) > > > CC /tmp/build/perf/arch/x86/util/perf_regs.o > util/event.c: In function 'perf_event__synthesize_mmap_events': > util/event.c:350: error: 'MAP_HUGETLB' undeclared (first use in this function) > util/event.c:350: error: (Each undeclared identifier is reported only once > util/event.c:350: error: for each function it appears in.) > > Fixing MAP_HUGETLB is not as easy as it seems to be. Its value is different in each arch: ./arch/powerpc/include/uapi/asm/mman.h:#define MAP_HUGETLB 0x40000 /* create a huge page mapping */ ./arch/alpha/include/uapi/asm/mman.h:#define MAP_HUGETLB 0x100000 /* create a huge page mapping */ ./arch/xtensa/include/uapi/asm/mman.h:#define MAP_HUGETLB 0x80000 /* create a huge page mapping */ ./arch/tile/include/uapi/asm/mman.h:#define MAP_HUGETLB 0x4000 /* create a huge page mapping */ ./arch/parisc/include/uapi/asm/mman.h:#define MAP_HUGETLB 0x80000 /* create a huge page mapping */ ./arch/sparc/include/uapi/asm/mman.h:#define MAP_HUGETLB 0x40000 /* create a huge page mapping */ ./arch/mips/include/uapi/asm/mman.h:#define MAP_HUGETLB 0x80000 /* create a huge page mapping */ ./include/uapi/asm-generic/mman.h:#define MAP_HUGETLB 0x40000 /* create a huge page mapping */ So we need to introduce another header into tools for this macro. Sigh... Thank you. >> Signed-off-by: Wang Nan >> Signed-off-by: Hou Pengyang >> Cc: He Kuang >> Cc: Arnaldo Carvalho de Melo >> Cc: Nilay Vaish >> --- >> tools/perf/util/map.c | 8 +++++--- >> 1 file changed, 5 insertions(+), 3 deletions(-) >> >> diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c >> index 728129a..a42010d 100644 >> --- a/tools/perf/util/map.c >> +++ b/tools/perf/util/map.c >> @@ -6,6 +6,7 @@ >> #include >> #include >> #include >> +#include >> #include "map.h" >> #include "thread.h" >> #include "strlist.h" >> @@ -24,9 +25,10 @@ const char *map_type__name[MAP__NR_TYPES] = { >> [MAP__VARIABLE] = "Variables", >> }; >> >> -static inline int is_anon_memory(const char *filename) >> +static inline int is_anon_memory(const char *filename, u32 flags) >> { >> - return !strcmp(filename, "//anon") || >> + return flags & MAP_HUGETLB || >> + !strcmp(filename, "//anon") || >> !strncmp(filename, "/dev/zero", sizeof("/dev/zero") - 1) || >> !strncmp(filename, "/anon_hugepage", sizeof("/anon_hugepage") - 1); >> } >> @@ -155,7 +157,7 @@ struct map *map__new(struct machine *machine, u64 start, u64 len, >> int anon, no_dso, vdso, android; >> >> android = is_android_lib(filename); >> - anon = is_anon_memory(filename); >> + anon = is_anon_memory(filename, flags); >> vdso = is_vdso_map(filename); >> no_dso = is_no_dso_memory(filename); >> >> -- >> 1.8.3.4