Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1475171 > unrolled thread
| Started by | Wang Nan <wangnan0@huawei.com> |
|---|---|
| First post | 2016-09-02 16:10 +0200 |
| Last post | 2016-09-06 03:30 +0200 |
| Articles | 5 — 4 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 1/3] perf tools: Recognize hugetlb mapping as anon mapping Wang Nan <wangnan0@huawei.com> - 2016-09-02 16:10 +0200
Re: [PATCH 1/3] perf tools: Recognize hugetlb mapping as anon mapping Nilay Vaish <nilayvaish@gmail.com> - 2016-09-03 18:00 +0200
[PATCH 1/3 (fix commit message)] perf tools: Recognize hugetlb mapping as anon mapping Wang Nan <wangnan0@huawei.com> - 2016-09-04 07:10 +0200
Re: [PATCH 1/3 (fix commit message)] perf tools: Recognize hugetlb mapping as anon mapping Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-09-05 21:20 +0200
Re: [PATCH 1/3 (fix commit message)] perf tools: Recognize hugetlb mapping as anon mapping "Wangnan (F)" <wangnan0@huawei.com> - 2016-09-06 03:30 +0200
| From | Wang Nan <wangnan0@huawei.com> |
|---|---|
| Date | 2016-09-02 16:10 +0200 |
| Subject | [PATCH 1/3] perf tools: Recognize hugetlb mapping as anon mapping |
| Message-ID | <scXkl-s8-11@gated-at.bofh.it> |
Hugetlbfs mapping should be recognized as anon mapping so user has
a chance to create /tmp/perf-<pid>.map file for symbol resolving. This
patch utilizes MAP_HUGETLB to identify hugetlb mapping.
After this patch, if perf is started before the program uses huge pages
starting, perf is able to recognize hugetlb mapping as anon mapping.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Hou Pengyang <houpengyang@huawei.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
---
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 <string.h>
#include <stdio.h>
#include <unistd.h>
+#include <sys/mman.h>
#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
[toc] | [next] | [standalone]
| From | Nilay Vaish <nilayvaish@gmail.com> |
|---|---|
| Date | 2016-09-03 18:00 +0200 |
| Message-ID | <sdlwm-7aJ-13@gated-at.bofh.it> |
| In reply to | #1475171 |
On 2 September 2016 at 08:59, Wang Nan <wangnan0@huawei.com> wrote: > Hugetlbfs mapping should be recognized as anon mapping so user has > a chance to create /tmp/perf-<pid>.map file for symbol resolving. This > patch utilizes MAP_HUGETLB to identify hugetlb mapping. > > After this patch, if perf is started before the program uses huge pages > starting, perf is able to recognize hugetlb mapping as anon mapping. Wang, everything in the patch series looks good to me. Just a slight change that I would suggest for the summary above: replace "program uses huge pages starting" with "program starts using huge pages". -- Nilay
[toc] | [prev] | [next] | [standalone]
| From | Wang Nan <wangnan0@huawei.com> |
|---|---|
| Date | 2016-09-04 07:10 +0200 |
| Subject | [PATCH 1/3 (fix commit message)] perf tools: Recognize hugetlb mapping as anon mapping |
| Message-ID | <sdxQS-6GW-9@gated-at.bofh.it> |
| In reply to | #1475723 |
Hugetlbfs mapping should be recognized as anon mapping so user has
a chance to create /tmp/perf-<pid>.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.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Hou Pengyang <houpengyang@huawei.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Nilay Vaish <nilayvaish@gmail.com>
---
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 <string.h>
#include <stdio.h>
#include <unistd.h>
+#include <sys/mman.h>
#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
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-09-05 21:20 +0200 |
| Subject | Re: [PATCH 1/3 (fix commit message)] perf tools: Recognize hugetlb mapping as anon mapping |
| Message-ID | <se7AZ-7ZG-13@gated-at.bofh.it> |
| In reply to | #1475849 |
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-<pid>.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.)
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Signed-off-by: Hou Pengyang <houpengyang@huawei.com>
> Cc: He Kuang <hekuang@huawei.com>
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Nilay Vaish <nilayvaish@gmail.com>
> ---
> 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 <string.h>
> #include <stdio.h>
> #include <unistd.h>
> +#include <sys/mman.h>
> #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
[toc] | [prev] | [next] | [standalone]
| From | "Wangnan (F)" <wangnan0@huawei.com> |
|---|---|
| Date | 2016-09-06 03:30 +0200 |
| Subject | Re: [PATCH 1/3 (fix commit message)] perf tools: Recognize hugetlb mapping as anon mapping |
| Message-ID | <sedn3-3oR-17@gated-at.bofh.it> |
| In reply to | #1476905 |
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-<pid>.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 <wangnan0@huawei.com>
>> Signed-off-by: Hou Pengyang <houpengyang@huawei.com>
>> Cc: He Kuang <hekuang@huawei.com>
>> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
>> Cc: Nilay Vaish <nilayvaish@gmail.com>
>> ---
>> 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 <string.h>
>> #include <stdio.h>
>> #include <unistd.h>
>> +#include <sys/mman.h>
>> #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
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web