1 /* Interbench.h */ 2 #ifndef INTERBENCH_H 3 #define INTERBENCH_H 4 5 extern void *hackbench_thread(void *t); 6 extern void terminal_error(const char *name); 7 extern inline void post_sem(sem_t *s); 8 extern inline void wait_sem(sem_t *s); 9 extern inline int trywait_sem(sem_t *s); 10 extern inline ssize_t Read(int fd, void *buf, size_t count); 11 12 #define THREADS 13 /* The total number of different loads */ 13 14 struct sems { 15 sem_t ready; 16 sem_t start; 17 sem_t stop; 18 sem_t complete; 19 sem_t stopchild; 20 }; 21 22 struct tk_thread { 23 struct sems sem; 24 unsigned long sleep_interval; 25 unsigned long slept_interval; 26 }; 27 28 struct data_table { 29 unsigned long long total_latency; 30 unsigned long long sum_latency_squared; 31 unsigned long max_latency; 32 unsigned long nr_samples; 33 unsigned long deadlines_met; 34 unsigned long missed_deadlines; 35 unsigned long long missed_burns; 36 unsigned long long achieved_burns; 37 }; 38 39 struct thread { 40 void (*name)(struct thread *); 41 char *label; 42 int bench; /* This thread is suitable for benchmarking */ 43 int rtbench; /* Suitable for real time benchmarking */ 44 int load; /* Suitable as a background load */ 45 int rtload; /* Suitable as a background load for rt benches */ 46 int nodeadlines; /* Deadlines_met are meaningless for this load */ 47 unsigned long decasecond_deadlines; /* Expected deadlines / 10s */ 48 pthread_t pthread; 49 pthread_t tk_pthread; 50 struct sems sem; 51 struct data_table benchmarks[THREADS + 1], *dt; 52 struct tk_thread tkthread; 53 long threadno; 54 }; 55 extern struct thread hackthread; 56 #endif 57