my_rtrm.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. #ifndef __MY_RTRM_H__
  2. #define __MY_RTRM_H__
  3. #define _GNU_SOURCE
  4. #include <signal.h>
  5. #include <errno.h>
  6. #include <unistd.h>
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <fcntl.h>
  11. #include <time.h>
  12. #include <math.h>
  13. //#include <semaphore.h>
  14. #include "RCCE.h"
  15. /*#include <sys/wait.h>
  16. #include <sys/types.h>
  17. #include <sys/stat.h>
  18. #include <sys/ipc.h>
  19. #include <sys/shm.h>*/
  20. //#include <sys/sem.h>
  21. //#include <sys/time.h>
  22. #define X_max 6
  23. #define Y_max 6
  24. #define num_idags_x 2
  25. #define num_idags_y 2
  26. #define MS 1000000
  27. #define LOCALITY_THRESH 10//the greatest distance in two adjascent clusters
  28. #define OLD_INIT_AREAS_NUM 8
  29. #define INIT_FAR_AREAS_NUM 4
  30. #define SELFOPT_AREAS_NUM 4
  31. #define SELFOPT_ROUNDS 3
  32. #define INIT_NODE_INTERVAL 500//750
  33. #define LINE_SIZE 8
  34. #define SIG_BASE_NUM 42
  35. #define NO_SIG 0
  36. #define SIG_ACK SIG_BASE_NUM
  37. #define SIG_INIT SIG_BASE_NUM+1
  38. #define SIG_TERMINATE SIG_BASE_NUM+2
  39. #define SIG_INIT_APP SIG_BASE_NUM+3
  40. #define SIG_IDAG_FIND_IDAGS SIG_BASE_NUM+4
  41. #define SIG_REQ_DDS SIG_BASE_NUM+5
  42. #define SIG_REQ_CORES SIG_BASE_NUM+6
  43. #define SIG_REP_OFFERS SIG_BASE_NUM+7
  44. #define SIG_INIT_AGENT SIG_BASE_NUM+8
  45. #define SIG_ADD_CORES_DDS SIG_BASE_NUM+9
  46. #define SIG_REM_CORES_DDS SIG_BASE_NUM+10
  47. #define SIG_INIT_FAR_REQ SIG_BASE_NUM+11
  48. #define SIG_FAR_REQ SIG_BASE_NUM+12
  49. #define SIG_APPOINT_WORK SIG_BASE_NUM+13
  50. #define SIG_CHECK_REM_TIME SIG_BASE_NUM+14
  51. #define SIG_FINISH SIG_BASE_NUM+15
  52. #define SIG_REJECT SIG_BASE_NUM+16
  53. #define SIG_REMOVE_FAR_MAN SIG_BASE_NUM+17
  54. #define SIG_APP_TERMINATED SIG_BASE_NUM+18
  55. #define SIG_TIMER SIGRTMIN
  56. typedef enum available_core_states {
  57. IDLE_CORE, //0
  58. IDLE_IDAG, //1
  59. IDLE_AGENT, //2
  60. TERMINATED, //3
  61. INIT_MANAGER, //4
  62. INIT_MANAGER_SEND_OFFERS, //5
  63. IDLE_INIT_MAN, //6
  64. INIT_MAN_CHK_OFFERS, //7
  65. LC_REQ_MANAGER, //8
  66. FAR_REQ_MANAGER, //9
  67. EXTRA_STATE, //10
  68. TEST_STATE, //11
  69. AGENT_INIT_STATE, //12
  70. WORKING_NODE, //13
  71. AGENT_SELF_OPT, //14
  72. AGENT_SELF_CHK_OFFERS, //15
  73. IDLE_AGENT_WAITING_OFF, //16
  74. IDLE_FAR_MAN, //17
  75. FAR_MAN_CHK_OFFERS, //18
  76. IDLE_CHK_APP_FILE, //19
  77. CHK_APP_FILE, //20
  78. USER_INPUT, //21
  79. AGENT_ENDING, //22
  80. AGENT_INIT_STATE_INIT_INTERRUPTED, //23
  81. IDLE_INIT_MAN_SELFOPT_PENDING, //24
  82. INIT_MAN_CHK_OFFERS_SELFOPT_PENDING, //25
  83. INIT_MANAGER_SEND_OFFERS_SELFOPT_PENDING, //26
  84. IDLE_INIT_MAN_WORK_PENDING, //27
  85. INIT_MAN_CHK_OFFERS_WORK_PENDING, //28
  86. INIT_MANAGER_SEND_OFFERS_WORK_PENDING, //29
  87. IDAG_ENDING, //30
  88. NO_PENDING_STATE, //31
  89. WORKING_NODE_IDLE_INIT, //32
  90. AGENT_ZOMBIE,
  91. AGENT_REWIND_FILE
  92. } core_states;//avail_states;
  93. typedef enum available_app_states {
  94. NO_APP, //0
  95. APP_TERMINATED, //1
  96. RUNNING, //2
  97. RESIZING, //3
  98. } application_states;//avail_states;
  99. typedef enum interaction_types {
  100. INIT_CORE,
  101. INIT_APP, //1
  102. IDAG_FIND_IDAGS,//2
  103. REP_IDAG_FIND_IDAGS, //3
  104. IDAG_REQ_DDS, //4
  105. REP_IDAG_REQ_DDS, //5
  106. AGENT_REQ_CORES, //6
  107. REP_AGENT_REQ_CORES, //7
  108. AGENT_OFFER_SENT, //8
  109. REP_AGENT_OFFER_SENT, //9
  110. INIT_AGENT, //10
  111. IDAG_ADD_CORES_DDS, //11
  112. IDAG_REM_CORES_DDS, //12
  113. DEBUG_IDAG_REQ_DDS, //13
  114. FAR_INIT_REQ, //14
  115. FAR_REQ_MAN, //15
  116. FAR_REQ_OFFER_SENT,
  117. FAR_REQ_OFFER, //17
  118. REP_FAR_REQ_OFFER_SENT, //18
  119. FAR_INIT_IDAG_FIND_IDAGS, //19
  120. REP_FAR_INIT_REQ, //20
  121. FAR_INIT_IDAG_REQ_DDS, //21
  122. FAR_REQ_IDAG_FIND_IDAGS, //22
  123. FAR_REQ_IDAG_REQ_DDS, //23
  124. FAR_REQ_CORES, //24
  125. FAR_REQ_MAN_APPOINT, //25
  126. REP_FAR_REQ_MAN, //26
  127. REP_AGENT_OFFER_PENDING, //27
  128. REP_FAR_REQ_OFFER_PENDING, //28
  129. INIT_WORK_NODE, //29
  130. APPOINT_WORK_NODE, //30
  131. CHK_REM_TIME, //31
  132. REP_CHK_REM_TIME, //32
  133. SELFOPT_IDAG_FIND_IDAGS, //33
  134. SELFOPT_IDAG_REQ_DDS, //34
  135. SELFOPT_REQ_CORES, //35
  136. REMOVE_APP, //36
  137. AGENT_REQ_CORES_PENDING, //37
  138. SELFOPT_REQ_CORES_PENDING, //38
  139. TERMINATION_STATS, //39
  140. REP_STATISTICS, //40
  141. IDAG_REQ_DDS_PENDING, //41
  142. FAR_REQ_IDAG_REQ_DDS_PENDING, //42
  143. SELFOPT_IDAG_REQ_DDS_PENDING, //43
  144. IDAG_FIND_IDAGS_PENDING, //44
  145. SELFOPT_IDAG_FIND_IDAGS_PENDING, //45
  146. ABORT_FAR_MAN, //46
  147. FAR_REQ_CORES_PENDING, //47
  148. APPOINT_WORK_NODE_PENDING, //48
  149. INIT_WORK_NODE_PENDING, //49
  150. REMOVED_NODE_REM_TIME,
  151. FAR_REQ_MAN_APPOINT_PENDING,
  152. NOTIFY_APP_TERMINATION
  153. } inter_types;
  154. typedef struct app_tag app;
  155. struct app_tag {
  156. int id;
  157. float A;
  158. float var;
  159. float workld;
  160. int num_of_cores;
  161. };
  162. typedef struct region_tag region;
  163. struct region_tag {
  164. int C;
  165. int r;
  166. };
  167. typedef struct offer_tag offer;
  168. struct offer_tag {
  169. int num_of_cores;
  170. int *offered_cores;
  171. float spd_loss;
  172. //float spd_gain;
  173. };
  174. typedef struct offer_list_tag offer_list;
  175. struct offer_list_tag {
  176. offer off;
  177. int sender;
  178. int *answer;
  179. offer_list *next;
  180. };
  181. typedef struct target_list_tag target_list;
  182. struct target_list_tag {
  183. int target;
  184. int num_of_regions;
  185. region region_arr[OLD_INIT_AREAS_NUM];
  186. target_list *next;
  187. };
  188. typedef struct interact_list_tag inter_list;
  189. struct region_array_tag {
  190. int num_of_regions;
  191. region *region_arr;
  192. };
  193. typedef struct region_array_tag region_array;
  194. struct offer_array_tag {
  195. int num_of_offers;
  196. offer *offer_arr;
  197. };
  198. typedef struct offer_array_tag offer_array;
  199. struct metrics_tag {
  200. int msg_count;
  201. int message_size;
  202. int distance;
  203. int app_turnaround;
  204. int comp_effort;
  205. int cores_utilized;
  206. int times_accessed;
  207. };
  208. typedef struct metrics_tag metrics;
  209. struct far_req_info_tag {
  210. int orig_sender;
  211. app far_app;
  212. region reg;
  213. };
  214. typedef struct far_req_info_tag far_req_info;
  215. struct interact_list_tag {
  216. //int core_id;
  217. inter_types type;
  218. union {
  219. region reg;
  220. region_array reg_arr;
  221. app new_app;
  222. offer my_offer;
  223. offer_array off_arr;
  224. metrics stats;
  225. int *idags_in_reg;
  226. int *agents_in_reg;
  227. int *app_cores;//first element is num of cores
  228. int offer_accepted;
  229. int *offer_acc_array;
  230. int far_req_man;
  231. far_req_info far_req;
  232. int work_time;//either to execute or remaining
  233. int agent_ended;
  234. } data;
  235. inter_list *next;
  236. };
  237. typedef struct DDS_tag DDS_list;
  238. struct DDS_tag {
  239. int agent_id;
  240. int num_of_cores;
  241. DDS_list *next;
  242. };
  243. typedef struct core_list_tag core_list;
  244. struct core_list_tag {
  245. int core_id;
  246. int offered_to; //-1 if offered to nobody
  247. core_list *next;
  248. };
  249. typedef struct my_time_stamp_tag my_time_stamp;
  250. struct my_time_stamp_tag {
  251. int tm_sec; /* seconds */
  252. int tm_min; /* minutes */
  253. int tm_hour; /* hours */
  254. };
  255. //int X_max, Y_max, num_idags_x, num_idags_y;
  256. float Speedup(app cur_app, int num_of_cores);
  257. int offer_cores(core_list *cores, app req_app, region req_reg, int *Offered_cores, int req_id);
  258. void send_next_signal(inter_list *head, int node_num);
  259. int get_max_cores_count(app cur_app);
  260. #endif