aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Carlos Santos <casantos@datacom.com.br>2018-12-06 23:20:23 -0200
committerGravatar Peter Korsgaard <peter@korsgaard.com>2018-12-08 10:44:05 +0100
commit60eb2cec80e5258a0c43090f539749606744e182 (patch)
treec7701b5fb66d47d137a1a095a3734efff698545e
parent8361c53eac06a8a96fd029e31ca7119e218e1e3e (diff)
downloadbuildroot-60eb2cec80e5258a0c43090f539749606744e182.tar.gz
buildroot-60eb2cec80e5258a0c43090f539749606744e182.tar.bz2
pcm-tools: new package
Processor Counter Monitor (PCM) is an application programming interface (API) and a set of tools based on the API to monitor performance and energy metrics of Intel(R) Core(TM), Xeon(R), Atom(TM) and Xeon Phi(TM) processors. This package contains a patch on the pmu-query.py script to look for the pcm-core program at the default path. It's not nice to have a Buildroot specific patch but let's use one while we look for a solution that is acceptable upstream. Signed-off-by: Carlos Santos <casantos@datacom.ind.br> [Peter: Needs C++, force X86_MSR on in linux] Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
-rw-r--r--linux/linux.mk2
-rw-r--r--package/Config.in1
-rw-r--r--package/pcm-tools/0001-Look-for-pcm-core-at-the-default-path.patch46
-rw-r--r--package/pcm-tools/Config.in33
-rw-r--r--package/pcm-tools/pcm-tools.hash3
-rw-r--r--package/pcm-tools/pcm-tools.mk35
6 files changed, 120 insertions, 0 deletions
diff --git a/linux/linux.mk b/linux/linux.mk
index 110260723b..6bf2b88038 100644
--- a/linux/linux.mk
+++ b/linux/linux.mk
@@ -334,6 +334,8 @@ define LINUX_KCONFIG_FIXUP_CMDS
$(call KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER,$(@D)/.config))
$(if $(BR2_PACKAGE_LINUX_TOOLS_PERF),
$(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS,$(@D)/.config))
+ $(if $(BR2_PACKAGE_PCM_TOOLS),
+ $(call KCONFIG_ENABLE_OPT,CONFIG_X86_MSR,$(@D)/.config))
$(if $(BR2_PACKAGE_SYSTEMD),
$(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS,$(@D)/.config)
$(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config)
diff --git a/package/Config.in b/package/Config.in
index f6252f2abb..1726066f8a 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -115,6 +115,7 @@ menu "Debugging, profiling and benchmark"
source "package/nmon/Config.in"
source "package/oprofile/Config.in"
source "package/pax-utils/Config.in"
+ source "package/pcm-tools/Config.in"
source "package/pv/Config.in"
source "package/racehound/Config.in"
source "package/ramsmp/Config.in"
diff --git a/package/pcm-tools/0001-Look-for-pcm-core-at-the-default-path.patch b/package/pcm-tools/0001-Look-for-pcm-core-at-the-default-path.patch
new file mode 100644
index 0000000000..933eec0237
--- /dev/null
+++ b/package/pcm-tools/0001-Look-for-pcm-core-at-the-default-path.patch
@@ -0,0 +1,46 @@
+From 53b6161d2413406778fa222274069c82846f0297 Mon Sep 17 00:00:00 2001
+From: Carlos Santos <casantos@datacom.com.br>
+Date: Thu, 6 Dec 2018 21:17:02 -0200
+Subject: [PATCH] Look for pcm-core at the default path
+
+On Buildroot, pcm-core.x is installed as /usr/bin/pcm-core. Remove the
+platform test, since we know that it's neither CigWin nor Windows, and
+use the default path.
+
+It's not nice to have a Buildroot specific patch but let's use one while
+we look for a solution that is acceptable upstream.
+
+Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
+---
+ pmu-query.py | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/pmu-query.py b/pmu-query.py
+index 4c596c7..dc39df6 100755
+--- a/pmu-query.py
++++ b/pmu-query.py
+@@ -3,7 +3,6 @@ import urllib2
+ import json, csv
+ import subprocess
+ import sys
+-import platform
+ import getopt
+
+ all_flag = False
+@@ -38,12 +37,7 @@ if filename == None:
+ except StopIteration:
+ break
+
+- if platform.system() == 'CYGWIN_NT-6.1':
+- p = subprocess.Popen(['./pcm-core.exe -c'],stdout=subprocess.PIPE,shell=True)
+- elif platform.system() == 'Windows':
+- p = subprocess.Popen(['pcm-core.exe -c'],stdout=subprocess.PIPE,shell=True)
+- else:
+- p = subprocess.Popen(['./pcm-core.x -c'],stdout=subprocess.PIPE,shell=True)
++ p = subprocess.Popen(['/usr/bin/pcm-core -c'],stdout=subprocess.PIPE,shell=True)
+
+ (output, err) = p.communicate()
+ p_status = p.wait()
+--
+2.19.2
+
diff --git a/package/pcm-tools/Config.in b/package/pcm-tools/Config.in
new file mode 100644
index 0000000000..f347a265a4
--- /dev/null
+++ b/package/pcm-tools/Config.in
@@ -0,0 +1,33 @@
+comment "pcm-tools needs a toolchain w/ C++"
+ depends on BR2_i386 || BR2_x86_64
+ depends on !BR2_INSTALL_LIBSTDCPP
+
+config BR2_PACKAGE_PCM_TOOLS
+ bool "pcm-tools"
+ depends on BR2_i386 || BR2_x86_64
+ depends on BR2_INSTALL_LIBSTDCPP
+ select BR2_PACKAGE_HWDATA
+ select BR2_PACKAGE_HWDATA_PCI_IDS
+ help
+ Processor Counter Monitor (PCM) is an application programming
+ interface (API) and a set of tools based on the API to monitor
+ performance and energy metrics of Intel(R) Core(TM), Xeon(R),
+ Atom(TM) and Xeon Phi(TM) processors.
+
+ https://github.com/opcm/pcm
+
+if BR2_PACKAGE_PCM_TOOLS
+
+# The pmu-query script is not compatible with Python 3
+config BR2_PACKAGE_PCM_TOOLS_PMU_QUERY
+ bool "install the pmu-query script"
+ default y
+ depends on BR2_PACKAGE_PYTHON
+ select BR2_PACKAGE_CA_CERTIFICATES # https
+ select BR2_PACKAGE_PYTHON_HASHLIB # urllib2
+ select BR2_PACKAGE_PYTHON_SSL # urllib2
+
+comment "pmu-query needs Python 2.x"
+ depends on !BR2_PACKAGE_PYTHON
+
+endif
diff --git a/package/pcm-tools/pcm-tools.hash b/package/pcm-tools/pcm-tools.hash
new file mode 100644
index 0000000000..77f1482462
--- /dev/null
+++ b/package/pcm-tools/pcm-tools.hash
@@ -0,0 +1,3 @@
+# Locally calculated
+sha256 798eb1bc5d9c34fa107de21b2100e8d4326cb45b613bc35baa1e1efb1dd13b04 pcm-tools-201812.tar.gz
+sha256 fac73f62c4d665c82622862a2be2b89713e0f480c93e593af2d8ef29a13d814b LICENSE
diff --git a/package/pcm-tools/pcm-tools.mk b/package/pcm-tools/pcm-tools.mk
new file mode 100644
index 0000000000..c0d6d8bc52
--- /dev/null
+++ b/package/pcm-tools/pcm-tools.mk
@@ -0,0 +1,35 @@
+################################################################################
+#
+# pcm-tools
+#
+################################################################################
+
+PCM_TOOLS_VERSION = 201812
+PCM_TOOLS_SITE = $(call github,opcm,pcm,$(PCM_TOOLS_VERSION))
+PCM_TOOLS_LICENSE = BSD-3-Clause
+PCM_TOOLS_LICENSE_FILES = LICENSE
+
+PCM_TOOLS_EXE_FILES = \
+ pcm-core pcm-iio pcm-lspci pcm-memory pcm-msr pcm-numa \
+ pcm-pcicfg pcm-pcie pcm-power pcm-sensor pcm-tsx pcm
+
+define PCM_TOOLS_BUILD_CMDS
+ touch $(@D)/daemon-binaries
+ $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) \
+ UNAME=Linux HOST=_LINUX
+endef
+
+ifeq ($(BR2_PACKAGE_PCM_TOOLS_PMU_QUERY),y)
+define PCM_TOOLS_INSTALL_PMU_QUERY
+ $(INSTALL) -D -m 755 $(@D)/pmu-query.py $(TARGET_DIR)/usr/bin/pmu-query
+endef
+endif
+
+define PCM_TOOLS_INSTALL_TARGET_CMDS
+ $(foreach f,$(PCM_TOOLS_EXE_FILES),\
+ $(INSTALL) -D -m 755 $(@D)/$(f).x $(TARGET_DIR)/usr/bin/$(f)
+ )
+ $(PCM_TOOLS_INSTALL_PMU_QUERY)
+endef
+
+$(eval $(generic-package))