Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752750AbbH1Pn3 (ORCPT ); Fri, 28 Aug 2015 11:43:29 -0400 Received: from mga02.intel.com ([134.134.136.20]:12311 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752010AbbH1Pn2 convert rfc822-to-8bit (ORCPT ); Fri, 28 Aug 2015 11:43:28 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,425,1437462000"; d="scan'208";a="757313355" From: "Liang, Kan" To: Jiri Olsa CC: "acme@kernel.org" , "jolsa@kernel.org" , "ak@linux.intel.com" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH 1/1] perf,tools: store cpu->socket and cpu->core in perf_session_env Thread-Topic: [PATCH 1/1] perf,tools: store cpu->socket and cpu->core in perf_session_env Thread-Index: AQHQ4PglogHk7aol80aRSA3qx0tdH54g+EmAgACRrkA= Date: Fri, 28 Aug 2015 15:43:22 +0000 Message-ID: <37D7C6CF3E00A74B8858931C1DB2F077018F4BC3@SHSMSX103.ccr.corp.intel.com> References: <1440674735-13373-1-git-send-email-kan.liang@intel.com> <20150828144523.GB1787@krava.brq.redhat.com> In-Reply-To: <20150828144523.GB1787@krava.brq.redhat.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6282 Lines: 205 > On Thu, Aug 27, 2015 at 07:25:35AM -0400, kan.liang@intel.com wrote: > > From: Kan Liang > > > > This patch parse cpu_topology from perf.data, and store cpu's socket > > id and core id information in perf_session_env. > > > > Signed-off-by: Kan Liang > > --- > > hum, I've made simple test to try this out (it's attached), and got different > results than what I see in the sysfs: > > [root@ibm-x3650m4-01 cpu]# for i in `seq 0 23`; do core=`cat > cpu$i/topology/core_id`; socket=`cat cpu$i/topology/physical_package_id`; > echo "CPU $i, core $core, socket $socket"; done CPU 0, core 0, socket 0 > CPU 1, core 1, socket 0 CPU 2, core 2, socket 0 CPU 3, core 3, socket 0 CPU 4, > core 4, socket 0 CPU 5, core 5, socket 0 CPU 6, core 0, socket 1 CPU 7, core 1, > socket 1 CPU 8, core 2, socket 1 CPU 9, core 3, socket 1 CPU 10, core 4, > socket 1 CPU 11, core 5, socket 1 CPU 12, core 0, socket 0 CPU 13, core 1, > socket 0 CPU 14, core 2, socket 0 CPU 15, core 3, socket 0 CPU 16, core 4, > socket 0 CPU 17, core 5, socket 0 CPU 18, core 0, socket 1 CPU 19, core 1, > socket 1 CPU 20, core 2, socket 1 CPU 21, core 3, socket 1 CPU 22, core 4, > socket 1 CPU 23, core 5, socket 1 > > > [jolsa@ibm-x3650m4-01 perf]$ ./perf test topo > 39: Test topology in session :krava /tmp/perf-test- > GOODG6 > WARNING: The /tmp/perf-test-GOODG6 file's data size field is 0 which is > unexpected. > Was the 'perf record' command properly terminated? > CPU 0, core 0, socket 0 > CPU 1, core 1, socket 0 > CPU 2, core 2, socket 0 > CPU 3, core 3, socket 0 > CPU 4, core 4, socket 0 > CPU 5, core 5, socket 0 > CPU 6, core 6, socket 1 > CPU 7, core 7, socket 1 > CPU 8, core 8, socket 1 > CPU 9, core 9, socket 1 > CPU 10, core 10, socket 1 > CPU 11, core 11, socket 1 > CPU 12, core 0, socket 0 > CPU 13, core 1, socket 0 > CPU 14, core 2, socket 0 > CPU 15, core 3, socket 0 > CPU 16, core 4, socket 0 > CPU 17, core 5, socket 0 > CPU 18, core 6, socket 1 > CPU 19, core 7, socket 1 > CPU 20, core 8, socket 1 > CPU 21, core 9, socket 1 > CPU 22, core 10, socket 1 > CPU 23, core 11, socket 1 > Ok > > the core id keeps on incrementing for the new socket which is wrong also I Right. I assumed the core id and socket id all keeps on increasing. If it's wrong, I guess we have to store core_id and socket_id in perf.data. I will implement a new version for that. > think this patch should come with test like this > Will include it to next version. Thanks, Kan > jirka > > > --- > tools/perf/tests/Build | 1 + > tools/perf/tests/builtin-test.c | 4 +++ > tools/perf/tests/tests.h | 1 + > tools/perf/tests/topology.c | 68 > +++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 74 insertions(+) > create mode 100644 tools/perf/tests/topology.c > > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build index > c1518bdd0f1b..208bbdf4d623 100644 > --- a/tools/perf/tests/Build > +++ b/tools/perf/tests/Build > @@ -33,6 +33,7 @@ perf-y += parse-no-sample-id-all.o perf-y += kmod- > path.o perf-y += thread-map.o perf-y += llvm.o > +perf-y += topology.o > > perf-$(CONFIG_X86) += perf-time-to-tsc.o > > diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c > index 136cd934be66..6650f2652739 100644 > --- a/tools/perf/tests/builtin-test.c > +++ b/tools/perf/tests/builtin-test.c > @@ -179,6 +179,10 @@ static struct test { > .func = test__llvm, > }, > { > + .desc = "Test topology in session", > + .func = test_session_topology, > + }, > + { > .func = NULL, > }, > }; > diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index > bf113a247987..95654d7b5810 100644 > --- a/tools/perf/tests/tests.h > +++ b/tools/perf/tests/tests.h > @@ -63,6 +63,7 @@ int test__fdarray__add(void); int > test__kmod_path__parse(void); int test__thread_map(void); int > test__llvm(void); > +int test_session_topology(void); > > #if defined(__x86_64__) || defined(__i386__) || defined(__arm__) || > defined(__aarch64__) #ifdef HAVE_DWARF_UNWIND_SUPPORT diff --git > a/tools/perf/tests/topology.c b/tools/perf/tests/topology.c new file mode > 100644 index 000000000000..2485dbe670da > --- /dev/null > +++ b/tools/perf/tests/topology.c > @@ -0,0 +1,68 @@ > +#include > +#include > +#include > +#include "tests.h" > +#include "util.h" > +#include "session.h" > +#include "evlist.h" > +#include "debug.h" > + > +#define TEMPL "/tmp/perf-test-XXXXXX" > + > +static int get_temp(char *path) > +{ > + int fd; > + > + strcpy(path, TEMPL); > + > + fd = mkstemp(path); > + if (fd < 0) { > + perror("mkstemp failed"); > + return -1; > + } > + > + close(fd); > + return 0; > +} > + > +int test_session_topology(void) > +{ > + struct perf_session *session; > + char path[PATH_MAX]; > + struct perf_data_file file = { > + .path = path, > + .mode = PERF_DATA_MODE_WRITE, > + }; > + int i; > + > + TEST_ASSERT_VAL("can't get templ file", !get_temp(path)); > + > + fprintf(stderr, "krava %s\n", path); > + > + session = perf_session__new(&file, false, NULL); > + TEST_ASSERT_VAL("can't get session", session); > + > + session->evlist = perf_evlist__new_default(); > + TEST_ASSERT_VAL("can't get evlist", session->evlist); > + > + perf_header__set_feat(&session->header, > HEADER_CPU_TOPOLOGY); > + perf_header__set_feat(&session->header, HEADER_NRCPUS); > + > + TEST_ASSERT_VAL("failed to write header", > + !perf_session__write_header(session, session- > >evlist, file.fd, > +true)); > + > + perf_session__delete(session); > + > + file.mode = PERF_DATA_MODE_READ; > + session = perf_session__new(&file, false, NULL); > + TEST_ASSERT_VAL("can't get session", session); > + > + for (i = 0; i < session->header.env.nr_cpus_online; i++) { > + fprintf(stderr, "CPU %d, core %d, socket %d\n", i, > + session->header.env.cpu[i].core_id, > + session->header.env.cpu[i].socket_id); > + } > + > + perf_session__delete(session); > + return 0; > +} > -- > 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/