81457c12d4ccc66b884e52ea6637607f6609d70e
[akaros.git] / user / c3po / threads / resource_stats.h
1
2
3 #ifndef RESOURCE_STATS_H
4 #define RESOURCE_STATS_H
5
6 #include "clock.h"
7
8 struct bg_node_st;
9 // track the thread's resource
10 typedef struct thread_resources_st {
11   int epoch;                // for validating versions when taking diffs
12   struct bg_node_st *node;  // the most recently seen graph node
13
14   unsigned int count;       // number of times the edge has been seen
15
16   long stack;               // total stack space
17   int files;                // number of files
18   int sockets;              // number of sockets
19   cpu_tick_t cpu_ticks;      // cpu time
20   cpu_tick_t real_ticks;     // real time, including time swapped out - only used if USE_PERFCTR is defined
21   long heap;                // bytes of heap used by the thread 
22   //int mutexes;              // locks held
23
24   // FIXME: performance counter stuff.
25   // icache misses
26   // dcache misses
27
28 } thread_stats_t;
29
30
31 extern inline void thread_stats_open_socket();
32 extern inline void thread_stats_close_socket(cpu_tick_t lifetime);
33 extern inline void thread_stats_open_file();
34 extern inline void thread_stats_close_file(cpu_tick_t lifetime);
35
36 extern inline int check_admission_control(struct bg_node_st *node);
37
38
39 #define OVERLOAD_CHECK_INTERVAL (200*ticks_per_millisecond)
40 extern inline void check_overload( cpu_tick_t now );
41
42
43 /**
44  * track global edge timings
45  **/
46 extern cpu_tick_t total_edge_cycles;
47 extern int total_edges_taken;
48 static inline void update_edge_totals(cpu_tick_t ticks)
49 {
50   total_edge_cycles += ticks;
51   total_edges_taken++;
52 }
53
54 void print_resource_stats(void);
55
56
57
58 #endif