Patchwork perf: new package

login
register
mail settings
Submitter Thomas Petazzoni
Date Jan. 3, 2013, 3:07 p.m.
Message ID <1357225671-18101-1-git-send-email-thomas.petazzoni@free-electrons.com>
Download mbox | patch
Permalink /patch/209271/
State Superseded
Commit 209760
Headers show

Comments

Thomas Petazzoni - Jan. 3, 2013, 3:07 p.m.
This patch adds a new package that allows to build the 'perf'
userspace tool that comes in the tools/perf directory of the kernel
sources.

It is an alternative proposal to the one done by Kaiwan Billimoria
<kaiwan.billimoria@gmail.com>, in that it creates the package in
package/perf/. It therefore properly integrates with the Buildroot
package infrastructure.

Of course, the package depends on the Linux kernel to be built by
Buildroot, in order to get Perf sources matching the version of the
kernel that will be executed.

One remaining issue is that this package only builds properly with
kernel >= v3.7 (but it was the same with Kaiwan proposal) : the
NO_LIBELF variable, which allows to get rid of the libelf dependency,
has only been introduced between 3.6 and 3.7. If we want to support
older kernel versions, we'll have to create a package for libelf.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/Config.in      |    1 +
 package/perf/Config.in |   22 ++++++++++++++++++++++
 package/perf/perf.mk   |   38 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+)
 create mode 100644 package/perf/Config.in
 create mode 100644 package/perf/perf.mk
Stefan Fröberg - Jan. 3, 2013, 3:24 p.m.
3.1.2013 17:07, Thomas Petazzoni kirjoitti:
> This patch adds a new package that allows to build the 'perf'
> userspace tool that comes in the tools/perf directory of the kernel
> sources.
>
> It is an alternative proposal to the one done by Kaiwan Billimoria
> <kaiwan.billimoria@gmail.com>, in that it creates the package in
> package/perf/. It therefore properly integrates with the Buildroot
> package infrastructure.
>
> Of course, the package depends on the Linux kernel to be built by
> Buildroot, in order to get Perf sources matching the version of the
> kernel that will be executed.
>
> One remaining issue is that this package only builds properly with
> kernel >= v3.7 (but it was the same with Kaiwan proposal) : the
> NO_LIBELF variable, which allows to get rid of the libelf dependency,
> has only been introduced between 3.6 and 3.7. If we want to support
> older kernel versions, we'll have to create a package for libelf.

Here is an elfutils 0.155 (which contains libelf) for buildroot that I
posted some time ago.
Patch #4 is missing from that list because it was too big to submit to
this list.

http://lists.busybox.net/pipermail/buildroot/2012-December/063855.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063856.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063864.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063858.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063857.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063859.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063861.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063860.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063863.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063862.html
http://lists.busybox.net/pipermail/buildroot/2012-December/063865.html

Regards
Stefan
Stefan Fröberg - Jan. 3, 2013, 3:48 p.m.
3.1.2013 17:24, Stefan Fröberg kirjoitti:
> 3.1.2013 17:07, Thomas Petazzoni kirjoitti:
>> This patch adds a new package that allows to build the 'perf'
>> userspace tool that comes in the tools/perf directory of the kernel
>> sources.
>>
>> It is an alternative proposal to the one done by Kaiwan Billimoria
>> <kaiwan.billimoria@gmail.com>, in that it creates the package in
>> package/perf/. It therefore properly integrates with the Buildroot
>> package infrastructure.
>>
>> Of course, the package depends on the Linux kernel to be built by
>> Buildroot, in order to get Perf sources matching the version of the
>> kernel that will be executed.
>>
>> One remaining issue is that this package only builds properly with
>> kernel >= v3.7 (but it was the same with Kaiwan proposal) : the
>> NO_LIBELF variable, which allows to get rid of the libelf dependency,
>> has only been introduced between 3.6 and 3.7. If we want to support
>> older kernel versions, we'll have to create a package for libelf.
> Here is an elfutils 0.155 (which contains libelf) for buildroot that I
> posted some time ago.
> Patch #4 is missing from that list because it was too big to submit to
> this list.
>
> http://lists.busybox.net/pipermail/buildroot/2012-December/063855.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063856.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063864.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063858.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063857.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063859.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063861.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063860.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063863.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063862.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063865.html
>
> Regards
> Stefan
>


And now while i *still* remember, that first patch, patch #1 should be
replaced with this

http://lists.busybox.net/pipermail/buildroot/2012-December/063876.html

> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Thomas Petazzoni - Jan. 3, 2013, 11:22 p.m.
Dear Stefan Fröberg,

On Thu, 03 Jan 2013 17:24:36 +0200, Stefan Fröberg wrote:

> Here is an elfutils 0.155 (which contains libelf) for buildroot that I
> posted some time ago.
> Patch #4 is missing from that list because it was too big to submit to
> this list.
> 
> http://lists.busybox.net/pipermail/buildroot/2012-December/063855.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063856.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063864.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063858.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063857.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063859.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063861.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063860.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063863.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063862.html
> http://lists.busybox.net/pipermail/buildroot/2012-December/063865.html

I've started having a real look at this, and started refactoring your
patch series.

Could you point me to the missing PATCH #4, so that I can see your
entire series? At least send it by private e-mail to me, so that we
don't get limited by the list.

Thanks,

Thomas
Kaiwan Billimoria - Jan. 4, 2013, 6:05 a.m.
Hello Thomas,

Great work! ..of course :)

Just checking / asking:
1. what about the kernel patch to be applied such that kernel build
for perf is successful (i sent in the patch yesterday)

2. In my patch (linux.mk), I make a validity check to confirm that the
kernel version is >= 2.6.31 (as perf is only supported from that ver
onward). Should we keep that check?

3. You mention :
> the NO_LIBELF variable, which allows to get rid of the libelf dependency,
> has only been introduced between 3.6 and 3.7.
I did test my patches on the 3.2.21 vanilla kernel and it seems to work okay..

Thanks,
Kaiwan.

On Thu, Jan 3, 2013 at 8:37 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> This patch adds a new package that allows to build the 'perf'
> userspace tool that comes in the tools/perf directory of the kernel
> sources.
>
> It is an alternative proposal to the one done by Kaiwan Billimoria
> <kaiwan.billimoria@gmail.com>, in that it creates the package in
> package/perf/. It therefore properly integrates with the Buildroot
> package infrastructure.
>
> Of course, the package depends on the Linux kernel to be built by
> Buildroot, in order to get Perf sources matching the version of the
> kernel that will be executed.
>
> One remaining issue is that this package only builds properly with
> kernel >= v3.7 (but it was the same with Kaiwan proposal) : the
> NO_LIBELF variable, which allows to get rid of the libelf dependency,
> has only been introduced between 3.6 and 3.7. If we want to support
> older kernel versions, we'll have to create a package for libelf.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  package/Config.in      |    1 +
>  package/perf/Config.in |   22 ++++++++++++++++++++++
>  package/perf/perf.mk   |   38 ++++++++++++++++++++++++++++++++++++++
>  3 files changed, 61 insertions(+)
>  create mode 100644 package/perf/Config.in
>  create mode 100644 package/perf/perf.mk
>
> diff --git a/package/Config.in b/package/Config.in
> index 7860f3f..9e392d8 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -35,6 +35,7 @@ source "package/ltrace/Config.in"
>  source "package/memstat/Config.in"
>  source "package/netperf/Config.in"
>  source "package/oprofile/Config.in"
> +source "package/perf/Config.in"
>  source "package/ramspeed/Config.in"
>  source "package/rt-tests/Config.in"
>  source "package/strace/Config.in"
> diff --git a/package/perf/Config.in b/package/perf/Config.in
> new file mode 100644
> index 0000000..54b24fe
> --- /dev/null
> +++ b/package/perf/Config.in
> @@ -0,0 +1,22 @@
> +config BR2_PACKAGE_PERF
> +       bool "perf"
> +       depends on BR2_LINUX_KERNEL
> +       depends on BR2_LARGEFILE
> +       help
> +         perf (sometimes "Perf Events" or perf tools, originally
> +         "Performance Counters for Linux") - is a performance
> +         analyzing tool in Linux, available from kernel version
> +         2.6.31. User-space controlling utility, called 'perf' has
> +         git-like interface with subcommands. It is capable of
> +         statistical profiling of entire system (both kernel and user
> +         code), single CPU or severals threads.
> +
> +         This package builds and install the userspace 'perf'
> +         command. It is up to the user to ensure that the kernel
> +         configuration has all suitable options enable to allow a
> +         proper operation of 'perf'.
> +
> +         https://perf.wiki.kernel.org/
> +
> +comment "perf only available if Linux kernel is enabled, and requires largefile support"
> +       depends on !BR2_LINUX_KERNEL || !BR2_LARGEFILE
> diff --git a/package/perf/perf.mk b/package/perf/perf.mk
> new file mode 100644
> index 0000000..7774dae
> --- /dev/null
> +++ b/package/perf/perf.mk
> @@ -0,0 +1,38 @@
> +#############################################################
> +#
> +# perf
> +#
> +#############################################################
> +
> +# Source taken from the Linux kernel tree
> +PERF_SOURCE =
> +PERF_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION))
> +
> +PERF_DEPENDENCIES = linux
> +
> +PERF_MAKE_FLAGS = \
> +       $(LINUX_MAKE_FLAGS) \
> +       NO_LIBELF=1 \
> +       NO_DWARF=1 \
> +       NO_LIBAUDIT=1 \
> +       NO_NEWT=1 \
> +       NO_GTK2=1 \
> +       NO_LIBPERL=1 \
> +       NO_LIBPYTHON=1 \
> +       DESTDIR=$(TARGET_DIR) \
> +       prefix=/usr
> +
> +define PERF_BUILD_CMDS
> +       $(MAKE) -C $(LINUX_DIR)/tools/perf \
> +               $(PERF_MAKE_FLAGS) O=$(@D)
> +endef
> +
> +# After installation, we remove the Perl and Python scripts from the
> +# target.
> +define PERF_INSTALL_TARGET_CMDS
> +       $(MAKE) -C $(LINUX_DIR)/tools/perf \
> +               $(PERF_MAKE_FLAGS) O=$(@D) install
> +       $(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/scripts/
> +endef
> +
> +$(eval $(generic-package))
> --
> 1.7.9.5
>
Thomas Petazzoni - Jan. 4, 2013, 8:22 a.m.
Dear Kaiwan Billimoria,

On Fri, 4 Jan 2013 11:35:56 +0530, Kaiwan Billimoria wrote:

> Just checking / asking:
> 1. what about the kernel patch to be applied such that kernel build
> for perf is successful (i sent in the patch yesterday)

It apparently wasn't needed to build perf on a 3.7 kernel.

> 2. In my patch (linux.mk), I make a validity check to confirm that the
> kernel version is >= 2.6.31 (as perf is only supported from that ver
> onward). Should we keep that check?

For now, I did not introduce it, due to the fact that the kernel
versions for which perf is usable are not clear yet. According to you,
it's 2.6.31, according to me it's 3.7. Once we figure that out, we can
introduce a version check if needed.

> 3. You mention :
> > the NO_LIBELF variable, which allows to get rid of the libelf dependency,
> > has only been introduced between 3.6 and 3.7.
> I did test my patches on the 3.2.21 vanilla kernel and it seems to work okay..

Here is the tools/perf/Makefile from 3.2.21 :
https://git.kernel.org/?p=linux/kernel/git/bwh/linux-3.2.y.git;a=blob;f=tools/perf/Makefile;h=b98e3075646b43f8f3218f45289f65068ea7ef31;hb=8499e79e9ee4c946ae38fd12e5d3afe8b68f2dfd

As you can see, it does not understand the NO_LIBELF variable, but
requires the libelf library to be present. So I'm not sure how you
manage to build perf without libelf with 3.2.21.

Best regards,

Thomas
Stefan Fröberg - Jan. 4, 2013, 2:01 p.m.
Hi Thomas

4.1.2013 1:22, Thomas Petazzoni kirjoitti:
> Dear Stefan Fröberg,
>
> On Thu, 03 Jan 2013 17:24:36 +0200, Stefan Fröberg wrote:
>
>> Here is an elfutils 0.155 (which contains libelf) for buildroot that I
>> posted some time ago.
>> Patch #4 is missing from that list because it was too big to submit to
>> this list.
>>
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063855.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063856.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063864.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063858.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063857.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063859.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063861.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063860.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063863.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063862.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063865.html
> I've started having a real look at this, and started refactoring your
> patch series.
>
> Could you point me to the missing PATCH #4, so that I can see your
> entire series? At least send it by private e-mail to me, so that we
> don't get limited by the list.

I can do that but I have to warn you that it's huge (1.5 MB).
Only one of the grub patches in buildroot is bigger (1.6 MB).

It's because uClibc is missing obstack_printf functionality and almost
half of it goes
to implementing it by gnulib portability library
(https://www.gnu.org/software/gnulib/)

Another half goes to enabling fts interface (because it's not enabled by
default in buildroot).

Ofcourse enabling it buy default in buildroot or even better, giving
user a choice of enabling it
in buildroot will help cutting size of that patch.

Anyway, I try to send it to you privately.

And also within few hours I will be kicking my old
crappy server online again, upload that patch there and submit link to
that patch for
everybody to work on.

Regards
Stefan
 

> Thanks,
>
> Thomas
Stefan Fröberg - Jan. 4, 2013, 2:25 p.m.
4.1.2013 1:22, Thomas Petazzoni kirjoitti:
> Dear Stefan Fröberg,
>
> On Thu, 03 Jan 2013 17:24:36 +0200, Stefan Fröberg wrote:
>
>> Here is an elfutils 0.155 (which contains libelf) for buildroot that I
>> posted some time ago.
>> Patch #4 is missing from that list because it was too big to submit to
>> this list.
>>
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063855.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063856.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063864.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063858.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063857.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063859.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063861.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063860.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063863.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063862.html
>> http://lists.busybox.net/pipermail/buildroot/2012-December/063865.html
> I've started having a real look at this, and started refactoring your
> patch series.
>
> Could you point me to the missing PATCH #4, so that I can see your
> entire series? At least send it by private e-mail to me, so that we
> don't get limited by the list.
Link to that patch #4

http://www.micro-os.com/elfutils.001-gnulib.patch

(some day I have to get my lazy ass up and make a real web page ... )

Stefan


> Thanks,
>
> Thomas
Thomas Petazzoni - Jan. 4, 2013, 2:27 p.m.
Dear Stefan Fröberg,

On Fri, 04 Jan 2013 16:25:38 +0200, Stefan Fröberg wrote:

> Link to that patch #4
> 
> http://www.micro-os.com/elfutils.001-gnulib.patch
> 
> (some day I have to get my lazy ass up and make a real web page ... )

Thanks. I started to have a look, I have some ideas on how to make that
a bit more reasonable.

Thomas

Patch

diff --git a/package/Config.in b/package/Config.in
index 7860f3f..9e392d8 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -35,6 +35,7 @@  source "package/ltrace/Config.in"
 source "package/memstat/Config.in"
 source "package/netperf/Config.in"
 source "package/oprofile/Config.in"
+source "package/perf/Config.in"
 source "package/ramspeed/Config.in"
 source "package/rt-tests/Config.in"
 source "package/strace/Config.in"
diff --git a/package/perf/Config.in b/package/perf/Config.in
new file mode 100644
index 0000000..54b24fe
--- /dev/null
+++ b/package/perf/Config.in
@@ -0,0 +1,22 @@ 
+config BR2_PACKAGE_PERF
+	bool "perf"
+	depends on BR2_LINUX_KERNEL
+	depends on BR2_LARGEFILE
+	help
+	  perf (sometimes "Perf Events" or perf tools, originally
+	  "Performance Counters for Linux") - is a performance
+	  analyzing tool in Linux, available from kernel version
+	  2.6.31. User-space controlling utility, called 'perf' has
+	  git-like interface with subcommands. It is capable of
+	  statistical profiling of entire system (both kernel and user
+	  code), single CPU or severals threads.
+
+	  This package builds and install the userspace 'perf'
+	  command. It is up to the user to ensure that the kernel
+	  configuration has all suitable options enable to allow a
+	  proper operation of 'perf'.
+
+	  https://perf.wiki.kernel.org/
+
+comment "perf only available if Linux kernel is enabled, and requires largefile support"
+	depends on !BR2_LINUX_KERNEL || !BR2_LARGEFILE
diff --git a/package/perf/perf.mk b/package/perf/perf.mk
new file mode 100644
index 0000000..7774dae
--- /dev/null
+++ b/package/perf/perf.mk
@@ -0,0 +1,38 @@ 
+#############################################################
+#
+# perf
+#
+#############################################################
+
+# Source taken from the Linux kernel tree
+PERF_SOURCE =
+PERF_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION))
+
+PERF_DEPENDENCIES = linux
+
+PERF_MAKE_FLAGS = \
+	$(LINUX_MAKE_FLAGS) \
+	NO_LIBELF=1 \
+	NO_DWARF=1 \
+	NO_LIBAUDIT=1 \
+	NO_NEWT=1 \
+	NO_GTK2=1 \
+	NO_LIBPERL=1 \
+	NO_LIBPYTHON=1 \
+	DESTDIR=$(TARGET_DIR) \
+	prefix=/usr
+
+define PERF_BUILD_CMDS
+	$(MAKE) -C $(LINUX_DIR)/tools/perf \
+		$(PERF_MAKE_FLAGS) O=$(@D)
+endef
+
+# After installation, we remove the Perl and Python scripts from the
+# target.
+define PERF_INSTALL_TARGET_CMDS
+	$(MAKE) -C $(LINUX_DIR)/tools/perf \
+		$(PERF_MAKE_FLAGS) O=$(@D) install
+	$(RM) -rf $(TARGET_DIR)/usr/libexec/perf-core/scripts/
+endef
+
+$(eval $(generic-package))