int job_requester(int argc, char* argv[]){ /** @type simgrid process (run on all tiers) Every @timeout checks amount of free (non running) cores. If this amount is greater than some N then it sends a job request to scheduler to get new batch of jobs. Simgrid process parameters: -------------------------- None */ std::string host_name = MSG_host_get_name(MSG_host_self()); std::string CERN = "CERN"; msg_task_t task = NULL; double timeout = 1000; long freeCoreAmount; int fullCoreAmount = MSG_host_get_core_number(MSG_host_self()); MSG_process_sleep(0.01); while (1){ freeCoreAmount = fullCoreAmount - xbt_str_parse_int(MSG_host_get_property_value(MSG_host_self(), "activeCore"), "error") - xbt_str_parse_int(MSG_host_get_property_value(MSG_host_self(), "corruptedCore"), "error"); MSG_sem_acquire(sem_requester); if (GLOBAL_QUEUE->empty()){ MSG_sem_release(sem_requester); break; } if (freeCoreAmount > 0){ JobBatchRequest* jobRequest = new JobBatchRequest; jobRequest->coreAmount = freeCoreAmount; task = MSG_task_create("request", 0.0, MESSAGES_SIZE, jobRequest); plusLinkCounter(host_name, CERN); msg_error_t err = MSG_task_send(task, "scheduler"); switch(err){ case MSG_OK: minusLinkCounter(host_name, CERN); break; case MSG_TRANSFER_FAILURE: minusLinkCounter(host_name, CERN); MSG_task_destroy(task); task = NULL; break; case MSG_HOST_FAILURE: MSG_task_destroy(task); task = NULL; break; } }else MSG_sem_release(sem_requester); MSG_process_sleep(timeout); } return 0; }
JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getCoreNumber(JNIEnv * env, jobject jhost) { msg_host_t host = jhost_get_native(env, jhost); if (!host) { jxbt_throw_notbound(env, "host", jhost); return -1; } return (jdouble) MSG_host_get_core_number(host); }