distrm.h 6.1 KB

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