Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752856AbbH1U74 (ORCPT ); Fri, 28 Aug 2015 16:59:56 -0400 Received: from mga11.intel.com ([192.55.52.93]:24854 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751995AbbH1U7m (ORCPT ); Fri, 28 Aug 2015 16:59:42 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,426,1437462000"; d="scan'208";a="550545249" From: Kan Liang To: acme@kernel.org, jolsa@kernel.org Cc: ak@linux.intel.com, linux-kernel@vger.kernel.org, Kan Liang Subject: [PATCH V2 2/2] perf,test: test cpu topology Date: Fri, 28 Aug 2015 09:43:39 -0400 Message-Id: <1440769419-48409-2-git-send-email-kan.liang@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1440769419-48409-1-git-send-email-kan.liang@intel.com> References: <1440769419-48409-1-git-send-email-kan.liang@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4353 Lines: 159 From: Jiri Olsa This patch test cpu core_id and socket_id which are stored in perf_env. Signed-off-by: Jiri Olsa Signed-off-by: Kan Liang --- Changes since jirka's original version - Use pr_debug to replace fprintf - Add date_size to avoid warning - Introduce cpu_map, and compare core_id and socket_id between cpu_map and perf_env tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 4 ++ tools/perf/tests/tests.h | 1 + tools/perf/tests/topology.c | 85 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 tools/perf/tests/topology.c diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build index c1518bd..208bbdf 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 136cd93..6650f26 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 bf113a2..95654d7 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 0000000..15ae0f3 --- /dev/null +++ b/tools/perf/tests/topology.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include "tests.h" +#include "util.h" +#include "session.h" +#include "evlist.h" +#include "debug.h" + +#define TEMPL "/tmp/perf-test-XXXXXX" +#define DATA_SIZE 10 + +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 cpu_map *map; + 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)); + + pr_debug("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); + + session->header.data_size += DATA_SIZE; + + TEST_ASSERT_VAL("failed to write header", + !perf_session__write_header(session, session->evlist, file.fd, true)); + + perf_session__delete(session); + + map = cpu_map__new(NULL); + TEST_ASSERT_VAL("failed to get system cpumap", !(map == NULL)); + + 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++) { + pr_debug("CPU %d, core %d, socket %d\n", i, + session->header.env.cpu[i].core_id, + session->header.env.cpu[i].socket_id); + } + + for (i = 0; i < map->nr; i++) { + TEST_ASSERT_VAL("Core ID doesn't match", + (session->header.env.cpu[map->map[i]].core_id == (cpu_map__get_core(map, i) & 0xffff))); + + TEST_ASSERT_VAL("Socket ID doesn't match", + (session->header.env.cpu[map->map[i]].socket_id == cpu_map__get_socket(map, i))); + } + + perf_session__delete(session); + cpu_map__put(map); + + return 0; +} -- 1.8.3.1 -- 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/