sources:
generator.cpp (709 bytes)
generator.h (417 bytes)
generator_n.cpp (4.0k)
lbs_i.cpp (2.6k)
lbs_i.h (430 bytes)
lbs_i_n.cpp (4.1k)
lbs_ii.cpp (3.3k)
lbs_ii.h (439 bytes)
lbs_ii_n.cpp (4.1k)
minimumselector.cpp (1.7k)
minimumselector.h (359 bytes)
minimumselector_n.cpp (4.1k)
randomselector.cpp (454 bytes)
randomselector.h (266 bytes)
randomselector_n.cpp (4.1k)
server.cpp (1.6k)
server.h (508 bytes)
server_n.cpp (4.0k)
servicenet_n.cpp (13.6k)
sink.cpp (1.3k)
sink.h (495 bytes)
sink_n.cpp (3.9k)


website:
more info here


screenshot:
studies/performance/Performance-Code5/minimumselector.cpp
download file

  1 #include "minimumselector.h"
  2
  3 Define_Module( MinimumSelector );
  4
  5 void MinimumSelector::activity()
  6 {
  7     // get parameters
  8     int rg = par("random_generator");
  9     int serverCount = par("server_count");
 10
 11     // search servers and save reference to its workload parameter
 12     cModule *compound = parentModule();
 13
 14     for (int i = 0; i<serverCount; i++) {
 15         cModule *svr = compound->submodule("server", i);
 16         if ((svr==0) || (strcmp(svr->className(), "Server")!=0)) {
 17             throw cException("server[] contains non-Server");
 18         }
 19         server[i] = (Server*) svr;
 20     }
 21
 22     // message loop
 23     for (;;) {
 24         // get message
 25         cMessage *msg = receive();
 26
 27         // search server with minimum workload (count the number of occurences)
 28         int i;
 29         int count = 0;
 30         long load = 100000000;
 31         for (i = 0; i<serverCount; i++) {
 32             long l = server[i]->getJobsInSystem();
 33             if (l<load) {
 34                 load = l;
 35                 count = 1;
 36             } else if (l==load) {
 37                 count++;
 38             }
 39         }
 40         // choose one server with minimum workload randomly
 41         int serverNo = (int) uniform(0, count, rg);
 42         // find this server
 43         for (i = 0; i<serverCount; i++) {
 44             if (load==server[i]->getJobsInSystem()) {
 45                 if (serverNo==0) break;
 46                 serverNo--;
 47             }
 48         }
 49
 50         if (serverNo!=0) throw cException("error while choosing server");
 51        
 52         // and send it to that server
 53         send(msg, "out", i);
 54     }
 55
 56 }
 57
 58 void MinimumSelector::initialize()
 59 {
 60     server = new Server *[par("server_count")];
 61 }
 62
 63 void MinimumSelector::finish()
 64 {
 65     delete [] server;
 66 }
 67