pcp
[Top] [All Lists]

[PATCH] qa/perfevent_pmda: Add tests for alternate perf derived events a

To: pcp@xxxxxxxxxxx
Subject: [PATCH] qa/perfevent_pmda: Add tests for alternate perf derived events and scale
From: Hemant Kumar <hemant@xxxxxxxxxxxxxxxxxx>
Date: Fri, 22 Apr 2016 06:19:33 +0530
Cc: nathans@xxxxxxxxxx
Delivered-to: pcp@xxxxxxxxxxx
This patch has qa test additions to the perfevent_pmda for the new
features : alternate event groups and scaling support for derived
events.

Signed-off-by: Hemant Kumar <hemant@xxxxxxxxxxxxxxxxxx>
---
 .../config/test_alternate_derived_groups.txt       | 12 +++
 qa/perfevent/config/test_derived_events_scale.txt  |  9 ++
 qa/perfevent/perf_event_test.c                     | 95 ++++++++++++++++++++++
 3 files changed, 116 insertions(+)
 create mode 100644 qa/perfevent/config/test_alternate_derived_groups.txt
 create mode 100644 qa/perfevent/config/test_derived_events_scale.txt

diff --git a/qa/perfevent/config/test_alternate_derived_groups.txt 
b/qa/perfevent/config/test_alternate_derived_groups.txt
new file mode 100644
index 0000000..2fcd2f1
--- /dev/null
+++ b/qa/perfevent/config/test_alternate_derived_groups.txt
@@ -0,0 +1,12 @@
+[pmuname ]
+BRANCH_INSTRUCTIONS_RETIRED
+MISPREDICTED_BRANCH_RETIRED
+RS_UOPS_DISPATCHED_CYCLES
+RS_UOPS_DISPATCHED
+
+[derived_event1:derived]
+BRANCH_INSTRUCTIONS_RETIRED
+MISPREDICTED_BRANCH_RETIRED
+||
+RS_UOPS_DISPATCHED_CYCLES
+RS_UOPS_DISPATCHED
diff --git a/qa/perfevent/config/test_derived_events_scale.txt 
b/qa/perfevent/config/test_derived_events_scale.txt
new file mode 100644
index 0000000..29db8a2
--- /dev/null
+++ b/qa/perfevent/config/test_derived_events_scale.txt
@@ -0,0 +1,9 @@
+[pmuname ]
+BRANCH_INSTRUCTIONS_RETIRED
+MISPREDICTED_BRANCH_RETIRED
+RS_UOPS_DISPATCHED_CYCLES
+RS_UOPS_DISPATCHED
+
+[derived_event1:derived]
+BRANCH_INSTRUCTIONS_RETIRED 0.1
+MISPREDICTED_BRANCH_RETIRED
diff --git a/qa/perfevent/perf_event_test.c b/qa/perfevent/perf_event_test.c
index c8a92b3..c799856 100644
--- a/qa/perfevent/perf_event_test.c
+++ b/qa/perfevent/perf_event_test.c
@@ -591,6 +591,95 @@ void test_derived_counters_fail_missing()
     assert( h == NULL );
 }
 
+void test_derived_alternate_group()
+{
+    wrap_sysconf_override = 1;
+    wrap_sysconf_retcode = 1;
+
+    printf( " ===== %s ==== \n", __FUNCTION__) ;
+
+    const char *eventlist = "config/test_alternate_derived_groups.txt";
+
+    perfhandle_t *h = perf_event_create(eventlist);
+
+    assert( h != NULL );
+
+    perf_counter *data = NULL;
+    int size = 0;
+    perf_derived_counter *pddata = NULL;
+    int derivedsize = 0;
+
+    int count = perf_get(h, &data, &size, &pddata, &derivedsize);
+
+    assert(count > 0 );
+    assert(size > 0);
+    assert(data != NULL);
+    assert(pddata != NULL);
+    printf("derived size : %d\n", derivedsize);
+    assert(derivedsize == 1);
+
+    int i;
+    int j;
+    for(i = 0; i < derivedsize; ++i)
+    {
+        printf("pddata[%d].name = %s pddata[%d].instances = %d\n", i, 
pddata[i].name, i, pddata[i].ninstances);
+        perf_counter_list *clist = pddata[i].counter_list;
+        while(clist)
+        {
+            printf("clist->name : %s\n", clist->counter->name);
+            clist = clist->next;
+        }
+        for(j = 0; j < pddata[i].ninstances; j++)
+        {
+            printf("\tvalue[%d] = %llu\n", j, (long long unsigned 
int)pddata[i].data[j].value);
+        }
+    }
+
+    perf_event_destroy(h);
+    perf_counter_destroy(data, size, pddata, derivedsize);
+    wrap_sysconf_override = 0;
+}
+
+void test_derived_events_scale(void)
+{
+    wrap_sysconf_override = 1;
+    wrap_sysconf_retcode = 1;
+
+    printf( " ===== %s ==== \n", __FUNCTION__) ;
+
+    const char *eventlist = "config/test_derived_events_scale.txt";
+
+    perfhandle_t *h = perf_event_create(eventlist);
+
+    assert( h != NULL );
+
+    perf_counter *data = NULL;
+    int size = 0;
+    perf_derived_counter *pddata = NULL;
+    int derivedsize = 0;
+
+    int count = perf_get(h, &data, &size, &pddata, &derivedsize);
+
+    assert(count > 0 );
+    assert(size > 0);
+    assert(data != NULL);
+    assert(pddata != NULL);
+    printf("derived size : %d\n", derivedsize);
+    assert(derivedsize == 1);
+
+    printf("pddata[0].name = %s pddata[0].instances = %d\n", pddata[0].name, 
pddata[0].ninstances);
+    perf_counter_list *clist = pddata[0].counter_list;
+    assert(clist->scale == 0.1);
+    printf("clist->name : %s, scale : %f\n", clist->counter->name, 
clist->scale);
+    clist = clist->next;
+    assert(clist->scale == 1.0);
+    printf("clist->name : %s, scale : %f\n", clist->counter->name, 
clist->scale);
+
+    perf_event_destroy(h);
+    perf_counter_destroy(data, size, pddata, derivedsize);
+    wrap_sysconf_override = 0;
+}
+
 int runtest(int n)
 {
     init_mock();
@@ -661,6 +750,12 @@ int runtest(int n)
         case 20:
             test_derived_counters_fail_missing();
             break;
+        case 21:
+           test_derived_alternate_group();
+           break;
+        case 22:
+           test_derived_events_scale();
+           break;
         default:
             ret = -1;
     }
-- 
1.9.3

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] qa/perfevent_pmda: Add tests for alternate perf derived events and scale, Hemant Kumar <=