📄 traceex03.java
字号:
/*
* Author: Anthony Sulistio
* Date: November 2004
* Description: A simple program to demonstrate of how to use GridSim
* workload trace functionality using a network extension.
*
* A Workload entity can be classified as a grid user entity.
* In this example, we only create workload and resource entities.
* Each Workload entity sends Gridlets to only one grid resource.
*
* In addition, this example creates other GridSim user entities.
* This example shows that Workload entity can be run together with other
* entities.
*
* Running this experiment might take a lot of memory and very long time
* if the size of trace file is big (in terms of number of lines/jobs).
* If you encounter "out of memory" exception, you need to increase JVM heap
* size using 'java -Xmx' option.
* For example set the heap size to 300MB:
* In Unix/Linux:
* java -Xmx300000000 -classpath $GRIDSIM/jars/gridsim.jar:. TraceEx03
* In Windows:
* java -Xmx300000000 -classpath %GRIDSIM%\jars\gridsim.jar;. TraceEx03
*
* where $GRIDSIM or %GRIDSIM% is the location of the gridsimtoolkit package.
*
* When you see the output, there are few warnings about about a Gridlet
* requires more than 1 PE. This is because the current GridSim schedulers,
* TimeShared and SpaceShared, only process 1 PE for each Gridlet.
* You are welcome to write your own scheduler that incorporates this
* QoS (Quality of Service) requirement.
*/
import gridsim.*;
import gridsim.net.*;
import gridsim.util.Workload;
import java.util.*;
/**
* Test Driver class for this example
*/
public class TraceEx03
{
/**
* Creates main() to run this example
*/
public static void main(String[] args)
{
try
{
//////////////////////////////////////////
// Step 1: Initialize the GridSim package. It should be called
// before creating any entities. We can't run this example without
// initializing GridSim first. We will get run-time exception
// error.
// number of grid user entities + any Workload entities.
int num_user = 5;
Calendar calendar = Calendar.getInstance();
// a flag that denotes whether to trace GridSim events or not.
boolean trace_flag = false;
// Initialize the GridSim package
System.out.println("Initializing GridSim package");
GridSim.init(num_user, calendar, trace_flag);
//////////////////////////////////////////
// Step 2: Creates one or more GridResource entities
// baud rate and MTU must be big otherwise the simulation
// runs for a very long period.
double baud_rate = 1000000; // 1 Gbits/sec
double propDelay = 10; // propagation delay in millisecond
int mtu = 100000; // max. transmission unit in byte
int rating = 400; // rating of each PE in MIPS
int i = 0;
// more resources can be created by
// setting totalResource to an appropriate value
int totalResource = 3;
ArrayList resList = new ArrayList(totalResource);
String[] resArray = new String[totalResource];
for (i = 0; i < totalResource; i++)
{
String resName = "Res_" + i;
GridResource res = createGridResource(resName, baud_rate,
propDelay, mtu, rating);
// add a resource into a list
resList.add(res);
resArray[i] = resName;
}
//////////////////////////////////////////
// Step 3: Get the list of trace files. The format should be:
// ASCII text, gzip or zip.
// In this example, I use the trace files from:
// http://www.cs.huji.ac.il/labs/parallel/workload/index.html
String[] fileName = {
"l_lanl_o2k.swf.zip", // LANL Origin 2000 Cluster (Nirvana)
"l_sdsc_blue.swf.txt.gz", // SDSC Blue Horizon
};
String dir = "../"; // location of these files
String customFile = "custom_trace.txt"; // custom trace file format
// total number of Workload entities
int numWorkload = fileName.length + 1; // including custom trace
//////////////////////////////////////////
// Step 4: Creates one or more Workload trace entities.
// Each Workload entity can only read one trace file and
// submit its Gridlets to one grid resource entity.
int resID = 0;
Random r = new Random();
ArrayList load = new ArrayList();
for (i = 0; i < fileName.length; i++)
{
resID = r.nextInt(totalResource);
Workload w = new Workload("Load_"+i, baud_rate, propDelay, mtu,
dir + fileName[i], resArray[resID], rating);
// add into a list
load.add(w);
}
// for the custom trace file format
Workload custom = new Workload("Custom", baud_rate, propDelay, mtu,
dir + customFile, resArray[resID], rating);
// add into a list
load.add(custom);
// tells the Workload entity what to look for.
// parameters: maxField, jobNum, submitTime, runTime, numPE
custom.setField(4, 1, 2, 3, 4);
custom.setComment("#"); // set "#" as a comment
//////////////////////////////////////////
// Step 5: Creates one or more grid user entities.
// number of grid user entities
int numUserLeft = num_user - numWorkload;
// number of Gridlets that will be sent to the resource
int totalGridlet = 5;
// create users
ArrayList userList = new ArrayList(numUserLeft);
for (i = 0; i < numUserLeft; i++)
{
// if trace_flag is set to "true", then this experiment will
// create User_i.csv where i = 0 ... (num_user-1)
NetUser user = new NetUser("User_"+i, totalGridlet, baud_rate,
propDelay, mtu, trace_flag);
// add a user into a list
userList.add(user);
}
//////////////////////////////////////////
// Step 6: Builds the network topology among entities.
// In this example, the topology is:
// user(s) --1Gb/s-- r1 --10Gb/s-- r2 --1Gb/s-- GridResource(s)
// |
// workload(s) --1Gb/s-- |
// create the routers.
// If trace_flag is set to "true", then this experiment will create
// the following files (apart from sim_trace and sim_report):
// - router1_report.csv
// - router2_report.csv
Router r1 = new RIPRouter("router1", trace_flag); // router 1
Router r2 = new RIPRouter("router2", trace_flag); // router 2
// connect all user entities with r1 with 1Mb/s connection
// For each host, specify which PacketScheduler entity to use.
NetUser obj = null;
for (i = 0; i < userList.size(); i++)
{
// A First In First Out Scheduler is being used here.
// SCFQScheduler can be used for more fairness
FIFOScheduler userSched = new FIFOScheduler("NetUserSched_"+i);
obj = (NetUser) userList.get(i);
r1.attachHost(obj, userSched);
}
// connect all Workload entities with r1 with 1Mb/s connection
// For each host, specify which PacketScheduler entity to use.
Workload w = null;
for (i = 0; i < load.size(); i++)
{
// A First In First Out Scheduler is being used here.
// SCFQScheduler can be used for more fairness
FIFOScheduler loadSched = new FIFOScheduler("LoadSched_"+i);
w = (Workload) load.get(i);
r1.attachHost(w, loadSched);
}
// connect all resource entities with r2 with 1Mb/s connection
// For each host, specify which PacketScheduler entity to use.
GridResource resObj = null;
for (i = 0; i < resList.size(); i++)
{
FIFOScheduler resSched = new FIFOScheduler("GridResSched_"+i);
resObj = (GridResource) resList.get(i);
r2.attachHost(resObj, resSched);
}
// then connect r1 to r2 with 10 Gbits/s connection
// For each host, specify which PacketScheduler entity to use.
baud_rate = 10000000;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -