예제 #1
0
  protected GISReply requestToGIS() {
    int SIZE = 500;
    double evsend_time = 0;
    GISRequest request = new GISRequest(this.get_id(), this.get_id());
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    super.send(
        super.output,
        GridSimTags.SCHEDULE_NOW,
        Tags.GIS_REQUEST,
        new IO_data(request, SIZE, super.getEntityId("GISService")));
    evsend_time = GridSim.clock();
    String msg =
        String.format("%1$f %2$d %3$s --> GAP GIS_REQUEST", evsend_time, reqrepID, this.get_name());
    this.write(msg);

    Sim_event ev = new Sim_event();
    Predicate predicate = new Predicate(Tags.GIS_REPLY);
    super.sim_get_next(predicate, ev); // only look for this type of ack
    GISReply reply = GISReply.get_data(ev);
    Assert.assertEquals(requestID, reply.getRequestID());
    Assert.assertEquals(Tags.GIS_REQUEST, reply.getRequestTAG());
    Assert.assertEquals(Tags.GIS_REPLY, ev.get_tag());
    double evrecv_time = GridSim.clock();
    msg =
        String.format(
            "%1$f %2$d %3$s <-- GAP GIS_REPLY\n",
            evrecv_time, reqrepID, this.get_name(), reply.getGIS());
    this.write(msg);
    return reply;
  }
예제 #2
0
  public AgentReply hasGridletsAgent(AgentRequest request, boolean trace) {
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    double evsend_time = 0;
    int agentType = request.getDst_entityType();
    int SIZE = 500;
    super.send(
        super.output,
        GridSimTags.SCHEDULE_NOW,
        Tags.HASGRIDLETS_REQUEST,
        new IO_data(request, SIZE, request.getDst_agentID()));
    evsend_time = GridSim.clock();
    String msg =
        String.format(
            "%1$f %2$d %3$s --> AM_%4$s::HASGRIDLETS_REQUEST %6$s (%7$s AID %9$d) %5$s AM_%8$s",
            evsend_time,
            reqrepID,
            this.get_name(),
            super.getEntityName(request.getDst_resID()),
            EntityTypes.toString(request.getDst_entityType()),
            Tags.toString(Tags.HASGRIDLETS_REQUEST),
            super.getEntityName(request.getDst_agentID()),
            super.getEntityName(request.getDst_moveToresID()),
            request.getDst_AID());
    if (trace) {
      this.write(msg);
    }

    Sim_type_p ptag = new Sim_type_p(Tags.HASGRIDLETS_REPLY);
    Sim_event ev = new Sim_event();
    super.sim_get_next(ptag, ev); // only look for this type of ack
    AgentReply agentReply = AgentReply.get_data(ev);
    if (agentReply == null) {
      Assert.fail();
    }
    Assert.assertEquals(requestID, agentReply.getRequestID());
    Assert.assertEquals(Tags.HASGRIDLETS_REQUEST, agentReply.getRequestTAG());
    Assert.assertEquals(ev.get_tag(), Tags.HASGRIDLETS_REPLY);

    double evrecv_time = GridSim.clock();
    msg =
        String.format(
            "%1$f %2$d %3$s <-- AM_%4$s::%7$s %8$s (%6$s AID %10$d) %5$s AM_%9$s",
            evrecv_time,
            reqrepID,
            this.get_name(),
            super.getEntityName(agentReply.getRequest().getDst_resID()),
            EntityTypes.toString(agentType),
            super.getEntityName(request.getDst_agentID()),
            agentReply.isOk(),
            Tags.toString(Tags.HASGRIDLETS_REPLY),
            super.getEntityName(request.getDst_moveToresID()),
            request.getDst_AID());
    if (trace) {
      this.write(msg);
    }
    return agentReply;
  }
예제 #3
0
  public GridletReply askGridletStatusToAgent(int dst_agentID, int dst_resID, Gridlet gridlet) {
    GridletRequest request =
        new GridletRequest(this.get_id(), this.get_id(), dst_agentID, dst_resID, gridlet);
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    super.send(
        super.output,
        GridSimTags.SCHEDULE_NOW,
        Tags.GRIDLET_STATUS_REQ,
        new IO_data(request, gridlet.getGridletFileSize(), request.getDst_agentID()));

    Sim_type_p ptag = new Sim_type_p(Tags.GRIDLET_STATUS_REP);
    Sim_event ev = new Sim_event();
    super.sim_get_next(ptag, ev); // only look for this type of ack
    GridletReply gridletReply = GridletReply.get_data(ev);

    Assert.assertEquals(requestID, gridletReply.getRequestID());
    Assert.assertEquals(Tags.GRIDLET_STATUS_REQ, gridletReply.getRequestTAG());
    Assert.assertEquals(Tags.GRIDLET_STATUS_REP, ev.get_tag());
    double evrecv_time = GridSim.clock();
    String msg =
        String.format(
            "%1$f %2$d %3$s <-- GOT GRIDLET_STATUS_REP for Gridlet %4$d of Gridlet %5$d with status %6$d",
            evrecv_time,
            reqrepID,
            this.get_name(),
            gridletReply.getReceivedGridlet().getGridletID(),
            gridletReply.getRequest().getGridlet().getGridletID(),
            gridletReply.getRequest().getGridlet().getGridletStatus());
    this.write(msg);
    return gridletReply;
  }
예제 #4
0
  public AgentReply testTestService() {
    double evsend_time = 0;
    int SIZE = 500;
    AgentRequest request = null;
    request =
        new AgentRequest(
            this.get_id(),
            this.get_id(),
            null,
            this.getVirtualOrganization().getPlatform().getGridElement().get_id(),
            Sim_system.get_entity_id("TestService"),
            EntityTypes.AGENT_ZOMBIE,
            SIZE,
            this.getVirtualOrganization().getPlatform().getGridElement().get_id(),
            EntityTypes.NOBODY);
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    super.send(
        super.output,
        GridSimTags.SCHEDULE_NOW,
        Tags.TEST_SERVICE_REQ,
        new IO_data(request, SIZE, Sim_system.get_entity_id("TestService")));
    evsend_time = GridSim.clock();

    String msg =
        String.format(
            "%1$f %2$d %3$s --> %4$s", evsend_time, reqrepID, this.get_name(), "TestService");
    this.write(msg);

    Sim_type_p ptag = new Sim_type_p(Tags.TEST_SERVICE_REP);
    Sim_event ev = new Sim_event();
    super.sim_get_next(ptag, ev); // only look for this type of ack
    AgentReply reply = AgentReply.get_data(ev);

    Assert.assertEquals(requestID, reply.getRequestID());
    Assert.assertEquals(Tags.TEST_SERVICE_REQ, reply.getRequestTAG());
    Assert.assertEquals(Tags.TEST_SERVICE_REP, ev.get_tag());

    double evrecv_time = GridSim.clock();

    msg =
        String.format(
            "%1$f %2$d %3$s <-- %4$s", evrecv_time, reqrepID, this.get_name(), "TestService");
    this.write(msg);

    return reply;
  }
 protected DataGIS createDataGIS() throws Exception {
   DataGIS gis = null;
   // set the GIS into DataGIS that handles specifically for data grid
   // scenarios
   gis = new DataGIS("DataGIS", 1000000000.0);
   GridSim.setGIS(gis);
   return gis;
 }
예제 #6
0
  protected ServicesListReply requestServicesList() {
    int SIZE = 500;
    double evsend_time = 0;
    ServicesListRequest request = new ServicesListRequest(this.get_id(), this.get_id());
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    super.send(
        super.output,
        GridSimTags.SCHEDULE_NOW,
        Tags.AP_SERVICES_LIST_REQ,
        new IO_data(request, SIZE, this.getVirtualOrganization().getPlatform().get_id()));
    evsend_time = GridSim.clock();
    String msg =
        String.format(
            "%1$f %2$d %3$s --> %4$s SERVICES_LIST_REQUEST",
            evsend_time,
            reqrepID,
            this.get_name(),
            this.getVirtualOrganization().getPlatform().get_name());
    this.write(msg);

    Sim_event ev = new Sim_event();
    Predicate predicate = new Predicate(Tags.AP_SERVICES_LIST_REP);
    super.sim_get_next(predicate, ev); // only look for this type of ack
    ServicesListReply reply = ServicesListReply.get_data(ev);
    Assert.assertEquals(requestID, reply.getRequestID());
    Assert.assertEquals(Tags.AP_SERVICES_LIST_REQ, reply.getRequestTAG());
    Assert.assertEquals(Tags.AP_SERVICES_LIST_REP, ev.get_tag());
    double evrecv_time = GridSim.clock();
    msg =
        String.format(
            "%1$f %2$d %3$s <-- %4$s SERVICES_LIST_REPLY %5$s",
            evrecv_time,
            reqrepID,
            this.get_name(),
            this.getVirtualOrganization().getPlatform().get_name(),
            reply.getServicesList());
    this.write(msg);
    return reply;
  }
예제 #7
0
  protected PingReply requestPing(int src_id, int dst_id) {
    int SIZE = 500;
    double evsend_time = 0;
    PingRequest request = new PingRequest(this.get_id(), this.get_id(), src_id, dst_id);
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    super.send(
        super.output, GridSimTags.SCHEDULE_NOW, Tags.PING_REQ, new IO_data(request, SIZE, src_id));
    evsend_time = GridSim.clock();
    String msg =
        String.format(
            "%1$f %2$d %3$s --> AM_%4$s PING_REQUEST AM_%5$s",
            evsend_time,
            reqrepID,
            this.get_name(),
            super.getEntityName(src_id),
            super.getEntityName(dst_id));
    this.write(msg);

    Sim_event ev = new Sim_event();
    Predicate predicate = new Predicate(Tags.PING_REP);
    super.sim_get_next(predicate, ev); // only look for this type of ack
    PingReply reply = PingReply.get_data(ev);
    Assert.assertEquals(requestID, reply.getRequestID());
    Assert.assertEquals(Tags.PING_REQ, reply.getRequestTAG());
    Assert.assertEquals(Tags.PING_REP, ev.get_tag());
    double evrecv_time = GridSim.clock();
    msg =
        String.format(
            "%1$f %2$d %3$s <-- AM_%4$s PING_REQUEST AM_%5$s",
            evrecv_time,
            reqrepID,
            this.get_name(),
            super.getEntityName(src_id),
            super.getEntityName(dst_id));
    this.write(msg);
    return reply;
  }
예제 #8
0
  /**
   * Finalises all relevant information before <tt>exiting</tt> the GridResource entity. This method
   * sets the final data of:
   *
   * <ul>
   *   <li>wall clock time, i.e. the time of this Gridlet resides in a GridResource (from arrival
   *       time until departure time).
   *   <li>actual CPU time, i.e. the total execution time of this Gridlet in a GridResource.
   *   <li>Gridlet's finished so far
   * </ul>
   *
   * @pre $none
   * @post $none
   */
  public void finalizeGridlet() {
    // Sets the wall clock time and actual CPU time
    double wallClockTime = GridSim.clock() - arrivalTime;
    gridlet.setExecParam(wallClockTime, totalCompletionTime);

    double finished = 0;
    if (gridlet.getGridletLength() < finishedSoFar) {
      finished = gridlet.getGridletLength();
    } else {
      finished = finishedSoFar;
    }

    gridlet.setGridletFinishedSoFar(finished);
  }
예제 #9
0
  /** Reads jobs from data_set file and sends them to the Scheduler entity dynamically over time. */
  public void body() {
    super.gridSimHold(10.0); // hold by 10 second

    while (current_gl < total_jobs) {

      Sim_event ev = new Sim_event();
      sim_get_next(ev);

      if (ev.get_tag() == AleaSimTags.EVENT_WAKE) {

        ComplexGridlet gl = readGridlet(current_gl);
        current_gl++;
        if (gl == null && current_gl < total_jobs) {
          super.sim_schedule(this.getEntityId(this.getEntityName()), 0.0, AleaSimTags.EVENT_WAKE);
          continue;
        } else if (gl == null && current_gl >= total_jobs) {
          continue;
        }
        // to synchronize job arrival wrt. the data set.
        double delay = Math.max(0.0, (gl.getArrival_time() - super.clock()));
        // some time is needed to transfer this job to the scheduler, i.e., delay should be delay =
        // delay - transfer_time. Fix this in the future.
        // System.out.println("Sending: "+gl.getGridletID());
        last_delay = delay;
        super.sim_schedule(
            this.getEntityId("Alea_3.0_scheduler"), delay, AleaSimTags.GRIDLET_INFO, gl);

        delay = Math.max(0.0, (gl.getArrival_time() - super.clock()));
        if (current_gl < total_jobs) {
          // use delay - next job will be loaded after the simulation time is equal to the previous
          // job arrival.
          super.sim_schedule(this.getEntityId(this.getEntityName()), delay, AleaSimTags.EVENT_WAKE);
        }

        continue;
      }
    }
    System.out.println("Shuting down - last gridlet = " + current_gl + " of " + total_jobs);
    super.sim_schedule(
        this.getEntityId("Alea_3.0_scheduler"),
        Math.round(last_delay + 2),
        AleaSimTags.SUBMISSION_DONE,
        new Integer(current_gl));
    Sim_event ev = new Sim_event();
    sim_get_next(ev);

    if (ev.get_tag() == GridSimTags.END_OF_SIMULATION) {
      System.out.println(
          "Shuting down the "
              + data_set
              + "_PWALoader... with: "
              + fail
              + " failed or skipped jobs");
    }
    shutdownUserEntity();
    super.terminateIOEntities();
  }
예제 #10
0
  /**
   * Sets the Gridlet status.
   *
   * @param status the Gridlet status
   * @return <code>true</code> if the new status has been set, <code>false</code> otherwise
   * @pre status >= 0
   * @post $none
   */
  public boolean setStatus(int status) {
    // gets Gridlet's previous status
    int prevStatus = gridlet.getGridletStatus();

    // if the status of a Gridlet is the same as last time, then ignore
    if (prevStatus == status) {
      return false;
    }

    boolean success = true;
    try {
      double clock = GridSim.clock(); // gets the current clock

      // sets Gridlet's current status
      try {
        gridlet.setGridletStatus(status);
      } catch (Exception e) {
        // It should not happen
      }

      // if a previous Gridlet status is INEXEC
      if (prevStatus == Gridlet.INEXEC) {
        // and current status is either CANCELED, PAUSED or SUCCESS
        if (status == Gridlet.CANCELED || status == Gridlet.PAUSED || status == Gridlet.SUCCESS) {
          // then update the Gridlet completion time
          totalCompletionTime += (clock - startExecTime);
          return true;
        }
      }

      if (prevStatus == Gridlet.RESUMED && status == Gridlet.SUCCESS) {
        // then update the Gridlet completion time
        totalCompletionTime += (clock - startExecTime);
        return true;
      }

      // if a Gridlet is now in execution
      if (status == Gridlet.INEXEC || (prevStatus == Gridlet.PAUSED && status == Gridlet.RESUMED)) {
        startExecTime = clock;
        gridlet.setExecStartTime(startExecTime);
      }
    } catch (IllegalArgumentException e) {
      success = false;
    }

    return success;
  }
예제 #11
0
  public GridletReply submitGridletToAgent(int dst_agentID, int dst_resID, Gridlet gridlet) {
    GridletRequest request =
        new GridletRequest(this.get_id(), this.get_id(), dst_agentID, dst_resID, gridlet);
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    super.send(
        super.output,
        GridSimTags.SCHEDULE_NOW,
        Tags.GRIDLET_SUBMIT_REQ,
        new IO_data(request, gridlet.getGridletFileSize(), request.getDst_agentID()));

    Sim_type_p ptag = new Sim_type_p(Tags.GRIDLET_SUBMIT_REP);
    Sim_event ev = new Sim_event();
    super.sim_get_next(ptag, ev); // only look for this type of ack
    GridletReply reply = GridletReply.get_data(ev);

    Assert.assertEquals(requestID, reply.getRequestID());
    Assert.assertEquals(Tags.GRIDLET_SUBMIT_REQ, reply.getRequestTAG());
    Assert.assertEquals(Tags.GRIDLET_SUBMIT_REP, ev.get_tag());
    double evrecv_time = GridSim.clock();
    if (reply.isOk()) {
      String msg =
          String.format(
              "%1$f %2$d %3$s <-- GOT GRIDLET_REPLY for Gridlet %4$d of Gridlet %5$d with result TRUE on AM_%6$s",
              evrecv_time,
              reqrepID,
              this.get_name(),
              reply.getReceivedGridlet().getGridletID(),
              reply.getRequest().getGridlet().getGridletID(),
              super.getEntityName(reply.getRequest().getDst_resID()));
      this.write(msg);
    } else {
      String msg =
          String.format(
              "%1$f %2$d %3$s <-- GOT GRIDLET_REPLY for Gridlet %4$d of Gridlet %5$d with result FALSE on AM_%6$s",
              evrecv_time,
              reqrepID,
              this.get_name(),
              reply.getReceivedGridlet().getGridletID(),
              reply.getRequest().getGridlet().getGridletID(),
              super.getEntityName(reply.getRequest().getDst_resID()));
      this.write(msg);
    }
    return reply;
  }
예제 #12
0
  /*
   * Initialises all local attributes
   * @pre $none
   * @post $none
   */
  private void init() {

    this.arrivalTime = GridSim.clock();
    this.gridlet.setSubmissionTime(arrivalTime);

    // default values
    this.actualFinishTime = NOT_FOUND; // Cannot finish in this hourly slot.
    this.expectedFinishTime = NOT_FOUND;
    this.startTime = NOT_FOUND;
    this.totalCompletionTime = 0L;
    this.startExecTime = 0L;
    this.partition = NOT_FOUND;
    this.priority = NOT_FOUND;

    // In case a Gridlet has been executed partially by some other grid
    // resources.
    this.finishedSoFar = gridlet.getGridletFinishedSoFar();
  }
예제 #13
0
  /**
   * Simple Local Search optimization. Avg. start time, avg. wait time and avg. slowdown are used as
   * decision maker. Jobs are moved to gaps.
   */
  @Override
  public void execute(int rounds, int time_limit) {
    // System.out.println(GridSim.clock() + ": executing Gap Search...");
    rounds = rounds * ExperimentSetup.multiplicator;
    time_limit = time_limit * ExperimentSetup.multiplicator;
    double current_time = GridSim.clock();

    Date dd = new Date();
    long start = dd.getTime();

    // empty schedule cannot be optimized
    if (Scheduler.getScheduleSize() > 1) {
      for (int i = 0; i < rounds; i++) {
        double previous_resp = CommonObjectives.predictAvgResponseTime(current_time);
        double previous_fair = CommonObjectives.predictFairness(current_time);
        double previous_wait = CommonObjectives.predictAvgWaitTime(current_time);
        double previous_sd = CommonObjectives.predictAvgSlowdown(current_time);

        int index_prev = findRandonResource();
        ResourceInfo prev_res = (ResourceInfo) Scheduler.resourceInfoList.get(index_prev);
        int gridlet_index = findRandomGridletInfo(index_prev);

        // this schedule has no gridlets
        if (gridlet_index == -1) {
          continue;
        }
        // remove the gridlet and update the resource internal information
        GridletInfo gi = (GridletInfo) prev_res.removeGInfoIndex(gridlet_index);
        prev_res.update(current_time);
        boolean succ = false;

        // we will test schedules in random order
        int permutation[] = Scheduler.permute(Scheduler.resourceInfoList.size());
        for (int j = 0; j < permutation.length; j++) {

          ResourceInfo ri = (ResourceInfo) Scheduler.resourceInfoList.get(permutation[j]);
          if (!Scheduler.isSuitable(ri, gi)) {
            continue;
          }
          // find new placement for a job
          boolean found = ri.findHoleForGridlet(gi);
          if (found) {
            double new_decision = 0.0;
            // double current_usage = predictMachineUsage(current_time);
            // double current_start = predictAvgStartTime(current_time);
            // double us = Math.max(0.0000000000001, previous_usage);
            // double diff_u = (current_usage - previous_usage) / us;

            double current_fair = CommonObjectives.predictFairness(current_time);
            double fair = Math.max(0.0000000000001, previous_fair);
            double diff_fair = (previous_fair - current_fair) / fair;

            double current_resp = CommonObjectives.predictAvgResponseTime(current_time);
            double rt = Math.max(0.0000000000001, previous_resp);
            double diff_rt = (previous_resp - current_resp) / rt;

            double current_wait = CommonObjectives.predictAvgWaitTime(current_time);
            double wt = Math.max(0.0000000000001, previous_wait);
            double diff_wt = (previous_wait - current_wait) / wt;

            double current_sd = CommonObjectives.predictAvgSlowdown(current_time);
            double sd = Math.max(1.0, previous_sd);
            double diff_sd = (previous_sd - current_sd) / sd;

            new_decision =
                (diff_fair * ExperimentSetup.fair_weight)
                    + (diff_rt * 1.0)
                    + (diff_wt * 1.0)
                    + (diff_sd * 1.0);

            if (new_decision <= 0.0) {
              /*if (new_decision == 0.0) {
              succ_eq++;
              } else {
              succ_less++;
              }*/
              ri.removeGInfo(gi);
              continue;
            } else {

              succ = true;
              break;
            }
          }
        }
        // no better placement was found - return the gridlet to the previous position
        // and make another round of LocalSearch
        if (!succ) {
          prev_res.addGInfo(gridlet_index, gi);
        }

        Date d_end = new Date();
        long is_end = d_end.getTime();
        if ((is_end - start) >= time_limit) {
          Scheduler.updateResourceInfos(current_time);
          return;
        }
      }
    }
    Scheduler.updateResourceInfos(current_time);
  }
예제 #14
0
  AgentReply requestToAgent(AgentRequest request, int tag) {
    int requestID = request.getRequestID();
    int reqrepID = request.getReqrepID();
    double evsend_time = 0;
    int agentType = request.getDst_entityType();
    int SIZE;
    if (tag == Tags.AGENT_RUN_REQ) {
      SIZE = request.getDst_agentSize();
    } else {
      SIZE = 500;
    }
    if ((tag == Tags.AGENT_RUN_REQ)
        || (tag == Tags.AGENT_KILL_REQ)
        || (tag == Tags.AGENT_KILLAWAIT_REQ)
        || (tag == Tags.AGENT_PAUSE_REQ)
        || (tag == Tags.AGENT_RESUME_REQ)) {
      super.send(
          super.output,
          GridSimTags.SCHEDULE_NOW,
          tag,
          new IO_data(request, SIZE, request.getDst_resID()));
    } else {
      super.send(
          super.output,
          GridSimTags.SCHEDULE_NOW,
          tag,
          new IO_data(request, SIZE, request.getDst_agentID()));
    }
    evsend_time = GridSim.clock();
    String msg =
        String.format(
            "%1$f %2$d %3$s --> AM_%4$s::REQUEST %6$s (%7$s AID %9$d) %5$s AM_%8$s",
            evsend_time,
            reqrepID,
            this.get_name(),
            super.getEntityName(request.getDst_resID()),
            EntityTypes.toString(request.getDst_entityType()),
            Tags.toString(tag),
            super.getEntityName(request.getDst_agentID()),
            super.getEntityName(request.getDst_moveToresID()),
            request.getDst_AID());
    this.write(msg);

    Sim_type_p ptag = new Sim_type_p(tag + 1);
    Sim_event ev = new Sim_event();
    super.sim_get_next(ptag, ev); // only look for this type of ack
    AgentReply agentReply = AgentReply.get_data(ev);

    if (agentReply != null) {
      Assert.assertEquals(requestID, agentReply.getRequestID());
      Assert.assertEquals(tag, agentReply.getRequestTAG());
      Assert.assertEquals(ev.get_tag(), tag + 1);

      double evrecv_time = GridSim.clock();
      msg =
          String.format(
              "%1$f %2$d %3$s <-- AM_%4$s::%7$s %8$s (%6$s AID %10$d) %5$s AM_%9$s",
              evrecv_time,
              reqrepID,
              this.get_name(),
              super.getEntityName(agentReply.getRequest().getDst_resID()),
              EntityTypes.toString(agentType),
              super.getEntityName(request.getDst_agentID()),
              agentReply.isOk(),
              Tags.toString(tag),
              super.getEntityName(request.getDst_moveToresID()),
              request.getDst_AID());
      this.write(msg);
    }
    return agentReply;
  }
예제 #15
0
 /**
  * This method returns the current time.
  *
  * @return the current time.
  * @see Profile#currentTime()
  */
 protected double currentTime() {
   return GridSim.clock();
 }
예제 #16
0
  /** The core method that handles communications among GridSim entities. */
  public void body() {
    // wait for a little while for about 3 seconds.
    // This to give a time for GridResource entities to register their
    // services to GIS (GridInformationService) entity.
    super.gridSimHold(3.0);
    LinkedList resList = super.getGridResourceList();

    // initialises all the containers
    int totalResource = resList.size();
    int resourceID[] = new int[totalResource];
    String resourceName[] = new String[totalResource];

    // a loop to get all the resources available
    int i = 0;
    for (i = 0; i < totalResource; i++) {
      // Resource list contains list of resource IDs
      resourceID[i] = ((Integer) resList.get(i)).intValue();

      // get their names as well
      resourceName[i] = GridSim.getEntityName(resourceID[i]);
    }

    ////////////////////////////////////////////////
    // SUBMIT Gridlets

    // determines which GridResource to send to
    int index = myId_ % totalResource;
    if (index >= totalResource) {
      index = 0;
    }

    // sends all the Gridlets
    Gridlet gl = null;
    boolean success;
    for (i = 0; i < list_.size(); i++) {
      gl = (Gridlet) list_.get(i);

      // For even number of Gridlets, send with an acknowledgement
      if (i % 2 == 0) {
        success = super.gridletSubmit(gl, resourceID[index], 0.0, true);
        System.out.println(
            name_
                + ": Sending Gridlet #"
                + gl.getGridletID()
                + " with status = "
                + success
                + " to "
                + resourceName[index]);
      }

      // For odd number of Gridlets, send without an acknowledgement
      else {
        success = super.gridletSubmit(gl, resourceID[index], 0.0, false);
        System.out.println(
            name_
                + ": Sending Gridlet #"
                + gl.getGridletID()
                + " with NO ACK so status = "
                + success
                + " to "
                + resourceName[index]);
      }
    }

    //////////////////////////////////////////
    // CANCELING Gridlets

    // hold for few period -- 100 seconds
    super.gridSimHold(15);
    System.out.println("<<<<<<<<< pause for 15 >>>>>>>>>>>");

    // a loop that cancels an even number of Gridlet
    for (i = 0; i < list_.size(); i++) {
      if (i % 2 == 0) {
        gl = super.gridletCancel(i, myId_, resourceID[index], 0.0);
        System.out.print(name_ + ": Canceling Gridlet #" + i + " at time = " + GridSim.clock());

        if (gl == null) {
          System.out.println(" result = NULL");
        } else // if Cancel is successful, then add it into the list
        {
          System.out.println(" result = NOT null");
          receiveList_.add(gl);
        }
      }
    }

    ////////////////////////////////////////////////////////
    // RECEIVES Gridlets back

    // hold for few period - 1000 seconds since the Gridlets length are
    // quite huge for a small bandwidth
    super.gridSimHold(1000);
    System.out.println("<<<<<<<<< pause for 1000 >>>>>>>>>>>");

    // receives the gridlet back
    int size = list_.size() - receiveList_.size();
    for (i = 0; i < size; i++) {
      gl = (Gridlet) super.receiveEventObject(); // gets the Gridlet
      receiveList_.add(gl); // add into the received list

      System.out.println(
          name_ + ": Receiving Gridlet #" + gl.getGridletID() + " at time = " + GridSim.clock());
    }

    System.out.println(this.name_ + ":%%%% Exiting body() at time " + GridSim.clock());

    // shut down I/O ports
    shutdownUserEntity();
    terminateIOEntities();

    // Prints the simulation output
    printGridletList(receiveList_, name_);
  }