TraceEx02.java
上传用户:ganshun56
上传日期:2020-06-06
资源大小:27k
文件大小:10k
源码类别:

网格计算

开发平台:

Java

  1. /*
  2.  * Author: Anthony Sulistio
  3.  * Date: November 2004
  4.  * Description: A simple program to demonstrate of how to use GridSim
  5.  *              workload trace functionality without using a network extension.
  6.  *
  7.  * A Workload entity can be classified as a grid user entity.
  8.  * In this example, we only create workload and resource entities.
  9.  * Each Workload entity sends Gridlets to only one grid resource.
  10.  *
  11.  * In addition, this example creates other GridSim user entities.
  12.  * This example shows that Workload entity can be run together with other
  13.  * entities.
  14.  *
  15.  * Running this experiment might take a lot of memory if the size of trace
  16.  * file is big (in terms of number of lines/jobs).
  17.  * If you encounter "out of memory" exception, you need to increase JVM heap
  18.  * size using 'java -Xmx' option.
  19.  * For example set the heap size to 300MB:
  20.  * In Unix/Linux:
  21.  *      java -Xmx300000000 -classpath $GRIDSIM/jars/gridsim.jar:. TraceEx02
  22.  * In Windows:
  23.  *      java -Xmx300000000 -classpath %GRIDSIM%jarsgridsim.jar;. TraceEx02
  24.  *
  25.  * where $GRIDSIM or %GRIDSIM% is the location of the gridsimtoolkit package.
  26.  *
  27.  * When you see the output, there are few warnings about about a Gridlet
  28.  * requires more than 1 PE. This is because the current GridSim schedulers,
  29.  * TimeShared and SpaceShared, only process 1 PE for each Gridlet.
  30.  * You are welcome to write your own scheduler that incorporates this
  31.  * QoS (Quality of Service) requirement.
  32.  */
  33. import java.util.*;
  34. import gridsim.*;
  35. import gridsim.util.*;
  36. /**
  37.  * Test Driver class for this example
  38.  */
  39. public class TraceEx02
  40. {
  41.     /**
  42.      * Creates main() to run this example
  43.      */
  44.     public static void main(String[] args)
  45.     {
  46.         try
  47.         {
  48.             //////////////////////////////////////////
  49.             // Step 1: Initialize the GridSim package. It should be called
  50.             // before creating any entities. We can't run this example without
  51.             // initializing GridSim first. We will get run-time exception
  52.             // error.
  53.             // number of grid user entities + any Workload entities.
  54.             int num_user = 5;
  55.             Calendar calendar = Calendar.getInstance();
  56.             boolean trace_flag = false;     // mean trace GridSim events
  57.             // Initialize the GridSim package without any statistical
  58.             // functionalities. Hence, no GridSim_stat.txt file is created.
  59.             System.out.println("Initializing GridSim package");
  60.             GridSim.init(num_user, calendar, trace_flag);
  61.             //////////////////////////////////////////
  62.             // Step 2: Creates one or more GridResource entities
  63.             int totalResource = 2;  // total number of Grid resources
  64.             int rating = 100;       // rating of each PE in MIPS
  65.             int totalPE = 1;        // total number of PEs for each Machine
  66.             int totalMachine = 1;   // total number of Machines
  67.             int i = 0;
  68.             String[] resArray = new String[totalResource];
  69.             for (i = 0; i < totalResource; i++)
  70.             {
  71.                 String resName = "Res_" + i;
  72.                 createGridResource(resName, rating, totalMachine, totalPE);
  73.                 // add a resource name into an array
  74.                 resArray[i] = resName;
  75.             }
  76.             //////////////////////////////////////////
  77.             // Step 3: Get the list of trace files. The format should be:
  78.             // ASCII text, gzip or zip.
  79.             // In this example, I use the trace files from:
  80.             // http://www.cs.huji.ac.il/labs/parallel/workload/index.html
  81.             String[] fileName = {
  82.                 "l_lanl_o2k.swf.zip",     // LANL Origin 2000 Cluster (Nirvana)
  83.                 "l_sdsc_blue.swf.txt.gz", // SDSC Blue Horizon
  84.             };
  85.             String dir = "../";     // location of these files
  86.             String customFile = "custom_trace.txt"; // custom trace file format
  87.             // total number of Workload entities
  88.             int numWorkload = fileName.length + 1;  // including custom trace
  89.             //////////////////////////////////////////
  90.             // Step 4: Creates one or more Workload trace entities.
  91.             // Each Workload entity can only read one trace file and
  92.             // submit its Gridlets to one grid resource entity.
  93.             int resID = 0;
  94.             Random r = new Random();
  95.             ArrayList load = new ArrayList();
  96.             for (i = 0; i < fileName.length; i++)
  97.             {
  98.                 resID = r.nextInt(totalResource);
  99.                 Workload w = new Workload("Load_"+i, dir + fileName[i],
  100.                                           resArray[resID], rating);
  101.                 // add into a list
  102.                 load.add(w);
  103.             }
  104.             // for the custom trace file format
  105.             Workload custom = new Workload("Custom", dir + customFile,
  106.                                            resArray[resID], rating);
  107.             // add into a list
  108.             load.add(custom);
  109.             // tells the Workload entity what to look for.
  110.             // parameters: maxField, jobNum, submitTime, runTime, numPE
  111.             custom.setField(4, 1, 2, 3, 4);
  112.             custom.setComment("#");     // set "#" as a comment
  113.             //////////////////////////////////////////
  114.             // Step 5: Creates one or more grid user entities.
  115.             // number of grid user entities
  116.             int numUserLeft = num_user - numWorkload;
  117.             int totalGridlet = 5;
  118.             double baud_rate = 100;
  119.             User[] userList = new User[numUserLeft];
  120.             for (i = 0; i < numUserLeft; i++)
  121.             {
  122.                 User user = new User("User_"+i, baud_rate, totalGridlet);
  123.                 userList[i] = user;
  124.             }
  125.             //////////////////////////////////////////
  126.             // Step 6: Starts the simulation
  127.             GridSim.startGridSimulation();
  128.             //////////////////////////////////////////
  129.             // Final step: Prints the Gridlets when simulation is over
  130.             // prints the Gridlets inside a Workload entity
  131.             for (i = 0; i < load.size(); i++)
  132.             {
  133.                 Workload obj = (Workload) load.get(i);
  134.                 obj.printGridletList(trace_flag);
  135.             }
  136.             // prints the Gridlet inside a grid user entity
  137.             for (i = 0; i < userList.length; i++)
  138.             {
  139.                 User userObj = userList[i];
  140.                 userObj.printGridletList(trace_flag);
  141.             }
  142.         }
  143.         catch (Exception e) {
  144.             e.printStackTrace();
  145.         }
  146.     }
  147.     /**
  148.      * Creates one Grid resource. A Grid resource contains one or more
  149.      * Machines. Similarly, a Machine contains one or more PEs (Processing
  150.      * Elements or CPUs).
  151.      * @param name      a Grid Resource name
  152.      * @param peRating  rating of each PE
  153.      * @param totalMachine  total number of Machines
  154.      * @param totalPE       total number of PEs for each Machine
  155.      */
  156.     private static void createGridResource(String name, int peRating,
  157.                                            int totalMachine, int totalPE)
  158.     {
  159.         //////////////////////////////////////////
  160.         // Here are the steps needed to create a Grid resource:
  161.         // 1. We need to create an object of MachineList to store one or more
  162.         //    Machines
  163.         MachineList mList = new MachineList();
  164.         int rating = peRating;
  165.         for (int i = 0; i < totalMachine; i++)
  166.         {
  167.             //////////////////////////////////////////
  168.             // 2. A Machine contains one or more PEs or CPUs. Therefore, should
  169.             //    create an object of PEList to store these PEs before creating
  170.             //    a Machine.
  171.             PEList peList = new PEList();
  172.             //////////////////////////////////////////
  173.             // 3. Create PEs and add these into an object of PEList.
  174.             for (int k = 0; k < totalPE; k++)
  175.             {
  176.                 // need to store PE id and MIPS Rating
  177.                 peList.add( new PE(k, rating) );
  178.             }
  179.             //////////////////////////////////////////
  180.             // 4. Create one Machine with its id and list of PEs or CPUs
  181.             mList.add( new Machine(i, peList) );
  182.         }
  183.         //////////////////////////////////////////
  184.         // 5. Create a ResourceCharacteristics object that stores the
  185.         //    properties of a Grid resource: architecture, OS, list of
  186.         //    Machines, allocation policy: time- or space-shared, time zone
  187.         //    and its price (G$/PE time unit).
  188.         String arch = "Sun Ultra";      // system architecture
  189.         String os = "Solaris";          // operating system
  190.         double time_zone = 0.0;         // time zone this resource located
  191.         double cost = 3.0;              // the cost of using this resource
  192.         ResourceCharacteristics resConfig = new ResourceCharacteristics(
  193.                 arch, os, mList, ResourceCharacteristics.SPACE_SHARED,
  194.                 time_zone, cost);
  195.         //////////////////////////////////////////
  196.         // 6. Finally, we need to create a GridResource object.
  197.         double baud_rate = 10000.0;           // communication speed
  198.         long seed = 11L*13*17*19*23+1;
  199.         double peakLoad = 0.0;       // the resource load during peak hour
  200.         double offPeakLoad = 0.0;    // the resource load during off-peak hr
  201.         double holidayLoad = 0.0;    // the resource load during holiday
  202.         // incorporates weekends so the grid resource is on 7 days a week
  203.         LinkedList Weekends = new LinkedList();
  204.         Weekends.add(new Integer(Calendar.SATURDAY));
  205.         Weekends.add(new Integer(Calendar.SUNDAY));
  206.         // incorporates holidays. However, no holidays are set in this example
  207.         LinkedList Holidays = new LinkedList();
  208.         GridResource gridRes = null;
  209.         try {
  210.             gridRes = new GridResource(name, baud_rate, seed,
  211.                     resConfig, peakLoad, offPeakLoad, holidayLoad, Weekends,
  212.                     Holidays);
  213.         }
  214.         catch (Exception e) {
  215.             e.printStackTrace();
  216.         }
  217.         System.out.println("Creates one Grid resource with name = " + name);
  218.     }
  219. } // end class