⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 traceex03.java

📁 中間件開發详细说明:清华大学J2EE教程讲义(ppt)-Tsinghua University J2EE tutorial lectures (ppt) [上载源码成为会员下载此源码] [成为VIP会
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -