Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/xen/perfc.h
Line
Count
Source (jump to first uncovered line)
1
#ifndef __XEN_PERFC_H__
2
#define __XEN_PERFC_H__
3
4
#ifdef CONFIG_PERF_COUNTERS
5
6
#include <xen/lib.h>
7
#include <xen/smp.h>
8
#include <xen/percpu.h>
9
10
/*
11
 * NOTE: new counters must be defined in perfc_defn.h
12
 * 
13
 * Counter declarations:
14
 * PERFCOUNTER (counter, string)              define a new performance counter
15
 * PERFCOUNTER_ARRAY (counter, string, size)  define an array of counters
16
 * 
17
 * Unlike counters, status variables do not reset:
18
 * PERFSTATUS (counter, string)               define a new performance stauts
19
 * PERFSTATUS_ARRAY (counter, string, size)   define an array of status vars
20
 * 
21
 * unsigned long perfc_value  (counter)        get value of a counter  
22
 * unsigned long perfc_valuea (counter, index) get value of an array counter
23
 * unsigned long perfc_set  (counter, val)     set value of a counter  
24
 * unsigned long perfc_seta (counter, index, val) set value of an array counter
25
 * void perfc_incr  (counter)                  increment a counter          
26
 * void perfc_decr  (counter)                  decrement a status
27
 * void perfc_incra (counter, index)           increment an array counter   
28
 * void perfc_add   (counter, value)           add a value to a counter     
29
 * void perfc_adda  (counter, index, value)    add a value to array counter 
30
 * void perfc_print (counter)                  print out the counter
31
 */
32
33
#define PERFCOUNTER( name, descr ) \
34
  PERFC_##name,
35
#define PERFCOUNTER_ARRAY( name, descr, size ) \
36
  PERFC_##name,                                \
37
  PERFC_LAST_##name = PERFC_ ## name + (size) - sizeof(char[2 * !!(size) - 1]),
38
39
#define PERFSTATUS       PERFCOUNTER
40
#define PERFSTATUS_ARRAY PERFCOUNTER_ARRAY
41
42
enum perfcounter {
43
#include <xen/perfc_defn.h>
44
  NUM_PERFCOUNTERS
45
};
46
47
#undef PERFCOUNTER
48
#undef PERFCOUNTER_ARRAY
49
#undef PERFSTATUS
50
#undef PERFSTATUS_ARRAY
51
52
typedef unsigned perfc_t;
53
#define PRIperfc ""
54
55
DECLARE_PER_CPU(perfc_t[NUM_PERFCOUNTERS], perfcounters);
56
57
#define perfc_value(x)    this_cpu(perfcounters)[PERFC_ ## x]
58
#define perfc_valuea(x,y)                                               \
59
    ( (y) <= PERFC_LAST_ ## x - PERFC_ ## x ?                           \
60
   this_cpu(perfcounters)[PERFC_ ## x + (y)] : 0 )
61
#define perfc_set(x,v)    (this_cpu(perfcounters)[PERFC_ ## x] = (v))
62
#define perfc_seta(x,y,v)                                               \
63
    ( (y) <= PERFC_LAST_ ## x - PERFC_ ## x ?                           \
64
   this_cpu(perfcounters)[PERFC_ ## x + (y)] = (v) : (v) )
65
#define perfc_incr(x)     (++this_cpu(perfcounters)[PERFC_ ## x])
66
#define perfc_decr(x)     (--this_cpu(perfcounters)[PERFC_ ## x])
67
#define perfc_incra(x,y)                                                \
68
    ( (y) <= PERFC_LAST_ ## x - PERFC_ ## x ?                           \
69
   ++this_cpu(perfcounters)[PERFC_ ## x + (y)] : 0 )
70
#define perfc_add(x,v)    (this_cpu(perfcounters)[PERFC_ ## x] += (v))
71
#define perfc_adda(x,y,v)                                               \
72
    ( (y) <= PERFC_LAST_ ## x - PERFC_ ## x ?                           \
73
   this_cpu(perfcounters)[PERFC_ ## x + (y)] = (v) : (v) )
74
75
/*
76
 * Histogram: special treatment for 0 and 1 count. After that equally spaced 
77
 * with last bucket taking the rest.
78
 */
79
#ifdef CONFIG_PERF_ARRAYS
80
#define perfc_incr_histo(x,v)                                           \
81
    do {                                                                \
82
        if ( (v) == 0 )                                                 \
83
            perfc_incra(x, 0);                                          \
84
        else if ( (v) == 1 )                                            \
85
            perfc_incra(x, 1);                                          \
86
        else if ( (((v) - 2) / PERFC_ ## x ## _BUCKET_SIZE) <           \
87
                  (PERFC_LAST_ ## x - PERFC_ ## x - 2) )                \
88
            perfc_incra(x, (((v) - 2) / PERFC_ ## x ## _BUCKET_SIZE) + 2); \
89
        else                                                            \
90
            perfc_incra(x, PERFC_LAST_ ## x - PERFC_ ## x);             \
91
    } while ( 0 )
92
#else
93
#define perfc_incr_histo(x,v) ((void)0)
94
#endif
95
96
struct xen_sysctl_perfc_op;
97
int perfc_control(struct xen_sysctl_perfc_op *);
98
99
extern void perfc_printall(unsigned char key);
100
extern void perfc_reset(unsigned char key);
101
102
    
103
#else /* CONFIG_PERF_COUNTERS */
104
105
#define perfc_value(x)    (0)
106
#define perfc_valuea(x,y) (0)
107
#define perfc_set(x,v)    ((void)0)
108
#define perfc_seta(x,y,v) ((void)0)
109
33.5M
#define perfc_incr(x)     ((void)0)
110
0
#define perfc_decr(x)     ((void)0)
111
5.20M
#define perfc_incra(x,y)  ((void)0)
112
#define perfc_decra(x,y)  ((void)0)
113
0
#define perfc_add(x,y)    ((void)0)
114
#define perfc_adda(x,y,z) ((void)0)
115
#define perfc_incr_histo(x,y,z) ((void)0)
116
117
#endif /* CONFIG_PERF_COUNTERS */
118
119
#endif /* __XEN_PERFC_H__ */