Ejemplo n.º 1
0
        public static void EdgeSimulation(FogPost edge, TuplePost tuple, string policy, int CommunicationType, int Service, List <string> DataCenter, string gateway, string cooperation, string edgeType)
        {
            if (cooperation == "0")
            {
                WithCoo = true;
            }
            Random    rnd    = new Random();
            Stopwatch watch  = new Stopwatch();
            var       result = new Results();

            edgeResultList = new List <Results>();
            edgeList       = new List <FogDevice>();
            tupleList      = new List <Models.Tuple>();
            PowerUtility.FillNumRange();
            string JsonReturn, path;

            #region DataSet population
            if (edgeType == "0")
            {
                #region Edge Homogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "EHomo\\JsonEdge.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                edgeList   = JsonConvert.DeserializeObject <List <FogDevice> >(JsonReturn);
                EdgeSize   = edgeList.Count;

                #endregion Edge

                #region Tuple homogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "EHomo\\JsonTuple.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                tupleList  = JsonConvert.DeserializeObject <List <Models.Tuple> >(JsonReturn);

                #endregion Tuple
            }
            else
            {
                #region Edge Hetrogenous

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "EHetro\\JsonEdge.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                edgeList   = JsonConvert.DeserializeObject <List <FogDevice> >(JsonReturn);
                EdgeSize   = edgeList.Count;

                #endregion Edge

                #region Tuple Hetrogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "EHetro\\JsonTuple.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                tupleList  = JsonConvert.DeserializeObject <List <Models.Tuple> >(JsonReturn);
                #endregion Tuple
            }

            #region create fog for Edge-fog cloud
            if (CommunicationType == 1)
            {
                int fCount = Convert.ToInt32(EdgeSize / 2);
                for (int i = 0; i < fCount; i++)
                {
                    bool[] bit = { true };
                    var    b   = rnd.Next(bit.Length);

                    int[] randomRam = { 512, 1024, 2048, 3072, 3584, 4096 };
                    //  var randomRamIndex = rnd.Next(randomRam.Length);
                    var   index           = rnd.Next(randomRam.Length);
                    int[] randomMips      = { 2000, 4000, 8000, 12000, 18000, 20000 };
                    var   randomMipsIndex = rnd.Next(randomMips.Length);

                    int[] randomPe      = { 1, 1, 2, 2, 3, 4 };
                    var   randomPeIndex = rnd.Next(randomPe.Length);

                    int[] randomSize      = { 4000, 5000, 7000, 10000, 12000, 15000 };
                    var   randomSizeIndex = rnd.Next(randomSize.Length);

                    int[] randomDownBW      = { 400, 500, 700, 1000, 1200, 1500 };
                    var   randomDownBWIndex = rnd.Next(randomDownBW.Length);

                    int[] randomUpBW      = { 500, 700, 1000, 1200, 1500, 2000 };
                    var   randomUpBWIndex = rnd.Next(randomUpBW.Length);

                    int[] randomStorage      = { 2500, 4500, 5000, 7000, 10000, 12000 };
                    var   randomStorageIndex = rnd.Next(randomStorage.Length);

                    int[] timeSlice      = { 15, 20, 25, 30 };
                    var   timeSliceIndex = rnd.Next(timeSlice.Length);

                    Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                    EnumNodeType randomDataType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                    fogServers.Add(new FogDevice(
                                       Guid.NewGuid(),
                                       1,
                                       randomMips[index],
                                       randomPe[index],
                                       randomRam[index],
                                       randomUpBW[index],
                                       randomDownBW[index],
                                       randomSize[index],
                                       randomStorage[index],
                                       "fog" + "-" + i,
                                       randomDataType.ToString(),
                                       new CloudletScheduler(),
                                       GeoDistance.RandomGeoLocation(rnd),
                                       bit[b],
                                       0,
                                       PowerUtility.SetIdlePower(),
                                       timeSlice[timeSliceIndex])
                                   );
                }
            }

            #endregion

            #endregion
            SmartThreadPool s = new SmartThreadPool();
            s.MaxThreads = 1000;
            s.MinThreads = 1000;

            List <Task> myTaskList = new List <Task>();
            if (policy == "1")
            {
                //FCFS
                #region P1 FCFS

                s = new SmartThreadPool();
                watch.Start();
                foreach (var item in tupleList)
                {
                    // item.QueueDelay = watch.Elapsed.Milliseconds;
                    // FogUtility.EdgeSim(item, edgeList, CommunicationType);
                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                }
                watch.Stop();
                try
                {
                    s.WaitForIdle();
                    s.Shutdown();
                }
                catch { };
                #endregion
            }
            else if (policy == "2")
            {
                #region P2 SJF
                var localtupleList = tupleList.OrderBy(x => x.MIPS).ToList();

                s = new SmartThreadPool();
                watch.Start();
                foreach (var item in localtupleList)
                {
                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                }
                watch.Stop();
                try
                {
                    s.WaitForIdle();
                    s.Shutdown();
                }
                catch { };
                #endregion
            }
            else if (policy == "3")
            {
                #region P3 LJF
                var localtupleList = tupleList.OrderByDescending(x => x.MIPS).ToList();

                s = new SmartThreadPool();
                watch.Start();
                foreach (var item in localtupleList)
                {
                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                }
                watch.Stop();
                try
                {
                    s.WaitForIdle();
                    s.Shutdown();
                }
                catch { };
                #endregion
            }
            //inserted new policy #change
            //LBFC
            else if (policy == "4")
            {
                try
                {
                    IsCreateCache = true;
                    s             = new SmartThreadPool();
                    ///*getting 5% to inital execute*/
                    double initialRandomTuplesCount = Math.Ceiling((double)((tupleList.Count() * 5) / 100));
                    initial_tupleList = tupleList.Take(Convert.ToInt32(initialRandomTuplesCount)).ToList();
                    final_tupleList   = tupleList.Skip(Convert.ToInt32(initialRandomTuplesCount)).ToList();

                    myTaskList = new List <Task>();
                    var split = LinqExtensions.Split(initial_tupleList, 5).ToList();
                    for (int j = 0; j < split.Count(); j++)
                    {
                        foreach (var item in split[j])
                        {
                            int[] ranIndex       = { 0, 1, 0, 1 };
                            var   randCloudIndex = rnd.Next(ranIndex.Length);

                            watch.Start();

                            if (randCloudIndex == 0)
                            {
                                myTaskList.Add(Task.Factory.StartNew(() =>
                                {
                                    var tupleTime = new TupleTimes()
                                    {
                                        TupleArrival = DateTime.Now.ToString("hh:mm:ss.fff tt"), Name = item.Name
                                    };
                                    lock (Lock)
                                        EdgeSimulator.TupleTimings.Add(tupleTime);
                                    FogUtility.EdgeSim(item, edgeList, CommunicationType);
                                }));
                            }
                            else
                            {
                                myTaskList.Add(Task.Factory.StartNew(() =>
                                {
                                    var tupleTime = new TupleTimes()
                                    {
                                        TupleArrival = DateTime.Now.ToString("hh:mm:ss.fff tt"), Name = item.Name
                                    };
                                    lock (Lock)
                                        FogSimulator.TupleTimings.Add(tupleTime);
                                    FogUtility.FogSimulationForEdge(item, fogServers);
                                }));
                            }
                        }
                    }
                    Task.WaitAll(myTaskList.ToArray());
                    #region threadpool base
                    try
                    {
                        FogCache F_cache, C_cache;
                        ///both are same for edge also
                        foreach (var item in final_tupleList)
                        {
                            lock (Lock)
                            {
                                F_cache = FogUtility.fogCahce.Where(x => x.DataType == item.DataType).OrderBy(x => x.InternalProcessingTime).OrderBy(x => x.link.Propagationtime).FirstOrDefault();
                                C_cache = EdgeCahce.Where(x => x.DataType == item.DataType).OrderBy(x => x.InternalProcessingTime).OrderBy(x => x.link.Propagationtime).FirstOrDefault();
                            }
                            watch.Start();
                            if (F_cache == null || C_cache == null)
                            {
                                int[] ranIndex       = { 0, 1, 0, 1 };
                                var   randCloudIndex = rnd.Next(ranIndex.Length);
                                watch.Start();
                                if (randCloudIndex == 0)
                                {
                                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                                }
                                else
                                {
                                    s.QueueWorkItem(o => FogUtility.FogSimulationForEdge(item, fogServers), new object());
                                }
                            }
                            else
                            {
                                //for predication base
                                double _CTime = C_cache.InternalProcessingTime + C_cache.link.Propagationtime;
                                double _FTime = F_cache.InternalProcessingTime + F_cache.link.Propagationtime;

                                if (_CTime >= _FTime)
                                {
                                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                                }
                                else
                                {
                                    s.QueueWorkItem(o => FogUtility.FogSimulationForEdge(item, fogServers), new object());
                                }
                            }
                        }
                        try
                        {
                            s.WaitForIdle();
                            s.Shutdown();
                        }
                        catch { };
                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException(ex.Message);
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(ex.Message);
                }
            }
            else
            {
                #region random
                try
                {
                    var split = LinqExtensions.Split(tupleList, 16).ToList();
                    watch.Start();
                    s = new SmartThreadPool();
                    for (int j = 0; j < split.Count(); j++)
                    {
                        foreach (var item in split[j])
                        {
                            s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                        }
                    }

                    try
                    {
                        s.WaitForIdle();
                        s.Shutdown();
                    }
                    catch { };
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                #endregion
            }
            watch.Stop();
            if (policy == "4")
            {
                if (edgeResultList != null)
                {
                    Excel.CreateExcelSheetEdgeFog(edgeResultList, FogTimings.ToList(), TupleTimings.ToList(), DropedtupleList.ToList());
                }
            }
            else

            {
                Excel.CreateExcelSheetEdgeFog(edgeResultList, FogTimings.ToList(), TupleTimings.ToList(), DropedtupleList.ToList());
                if (CommunicationType == 1)
                {
                    Excel.CreateExcelSheetForFog(FogSimulator.resultList, FogSimulator.FogTimings.ToList(), FogSimulator.TupleTimings.ToList());
                }
            }
        }
Ejemplo n.º 2
0
        public static void FogSimulation(FogPost fog, TuplePost tuple, string policy, string GatewaypolicyType, string NodeLevelPolicyType, int CommunicationType, int Service, List <string> DataCenter, string gateway, string cooperation, string fogType)
        {
            if (gateway == "0")
            {
                WithGateway = true;
            }
            if (cooperation == "0")
            {
                WithCoo = true;
            }
            Random    rnd    = new Random();
            Stopwatch watch  = new Stopwatch();
            var       result = new Results();

            resultList = new List <Results>();
            fogList    = new List <FogDevice>();
            tupleList  = new List <Models.Tuple>();
            PowerUtility.FillNumRange();
            string JsonReturn, path;

            #region DataSet reading
            if (fogType == "0")
            {
                #region Fog Homogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "H**o\\JsonFog.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                fogList    = JsonConvert.DeserializeObject <List <FogDevice> >(JsonReturn);
                FogSize    = fogList.Count;

                #endregion Fog

                #region Tuple homogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "H**o\\JsonTuple.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                tupleList  = JsonConvert.DeserializeObject <List <Models.Tuple> >(JsonReturn);

                #endregion Tuple
            }
            else
            {
                #region Fog Hetrogenous

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "Hetro\\JsonFog.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                fogList    = JsonConvert.DeserializeObject <List <FogDevice> >(JsonReturn);
                FogSize    = fogList.Count;

                #endregion Fog

                #region Tuple Hetrogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "Hetro\\JsonTuple.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                tupleList  = JsonConvert.DeserializeObject <List <Models.Tuple> >(JsonReturn);
                #endregion Tuple
            }



            #endregion

            SmartThreadPool s = new SmartThreadPool();
            //s.MaxThreads = 1000;
            //s.MinThreads = 1000;

            List <Task> myTaskList = new List <Task>();



            if (policy == "1")
            {
                //tupleList = tupleList.Take(10).ToList();
                tupleList = tupleList.ToList();
                //FCFS
                #region P1 FCFS
                if (WithGateway)
                {
                    GlobalGateway.GatewayPathDecider(tupleList, fogList, CommunicationType, Service, DataCenter, true);
                }
                else
                {
                    s = new SmartThreadPool();
                    watch.Start();
                    foreach (var item in tupleList)
                    {
                        item.QueueDelay = watch.Elapsed.Milliseconds;
                        // FogUtility.FogSim(item, fogList, CommunicationType, Service, DataCenter);
                        s.QueueWorkItem(o => FogUtility.FogSim(item, fogList, CommunicationType, Service, DataCenter), new object());
                    }
                    watch.Stop();
                    try
                    {
                        s.WaitForIdle();
                        s.Shutdown();
                    }
                    catch { };
                }
                #endregion
            }
            else if (policy == "2")
            {
                #region P2 SJF
                var localtupleList = tupleList.OrderBy(x => x.MIPS).ToList();
                if (WithGateway)
                {
                    GlobalGateway.GatewayPathDecider(localtupleList, fogList, CommunicationType, Service, DataCenter, true);
                }
                else
                {
                    s            = new SmartThreadPool();
                    s.MaxThreads = 1000;
                    s.MinThreads = 1000;
                    watch.Start();
                    foreach (var item in localtupleList)
                    {
                        item.QueueDelay = watch.Elapsed.Milliseconds;
                        s.QueueWorkItem(o => FogUtility.FogSim(item, fogList, CommunicationType, Service, DataCenter), new object());
                    }
                    watch.Stop();
                    try
                    {
                        s.WaitForIdle();
                        s.Shutdown();
                    }
                    catch { };
                }
                #endregion
            }
            else if (policy == "3")
            {
                #region P3 LJF
                var localtupleList = tupleList.OrderByDescending(x => x.MIPS).ToList();
                if (WithGateway)
                {
                    GlobalGateway.GatewayPathDecider(localtupleList, fogList, CommunicationType, Service, DataCenter, true);
                }
                else
                {
                    s            = new SmartThreadPool();
                    s.MaxThreads = 1000;
                    s.MinThreads = 1000;
                    watch.Start();
                    foreach (var item in localtupleList)
                    {
                        item.QueueDelay = watch.Elapsed.Milliseconds;
                        //FogUtility.FogSim(item, fogList, CommunicationType, Service, DataCenter);
                        s.QueueWorkItem(o => FogUtility.FogSim(item, fogList, CommunicationType, Service, DataCenter), new object());
                    }
                    watch.Stop();
                    try
                    {
                        s.WaitForIdle();
                        s.Shutdown();
                    }
                    catch { };
                }
                #endregion
            }
            //inserted new policy #change
            //LBFC Learning based fog cloud
            else if (policy == "4")
            {
                //Learning based cloud fog
                #region policy 4

                try
                {
                    IsCreateCache = true;
                    s             = new SmartThreadPool();
                    ///*getting 10% to inital execute*/
                    double initialRandomTuplesCount = Math.Ceiling((double)((tupleList.Count() * 10) / 100));

                    initial_tupleList = tupleList.Take(Convert.ToInt32(initialRandomTuplesCount)).ToList();
                    final_tupleList   = tupleList.Skip(Convert.ToInt32(initialRandomTuplesCount)).ToList();

                    myTaskList = new List <Task>();
                    var split = LinqExtensions.Split(initial_tupleList, 5).ToList();
                    watch.Start();

                    for (int j = 0; j < split.Count(); j++)
                    {
                        foreach (var item in split[j])
                        {
                            int[] ranIndex       = { 0, 1, 0, 1 };
                            var   randCloudIndex = rnd.Next(ranIndex.Length);
                            if (randCloudIndex == 0)
                            {
                                //myTaskList.Add(Task.Factory.StartNew(() =>
                                //          {
                                var tupleTime = new TupleTimes()
                                {
                                    TupleArrival = DateTime.Now.ToString("hh:mm:ss.fff tt"), Name = item.Name
                                };
                                FogSimulator.TupleTimings.Add(tupleTime);
                                FogUtility.FogSim_LR(item, fogList, CommunicationType, Service, DataCenter, "0");
                                // }));
                            }
                            else
                            {
                                //comment threading code for debugging
                                // create service
                                var service = ServicesUtility.GetServices()[Service];
                                myTaskList.Add(Task.Factory.StartNew(() =>
                                {
                                    CloudSimulator.CloudSimulationForFog(item, false, Service, DataCenter);
                                }));
                            }
                        }
                    }
                    Task.WaitAll(myTaskList.ToArray());
                    #region threadpool base

                    try
                    {
                        FogCache F_cache; CloudCache C_cache;
                        foreach (var item in final_tupleList)
                        {
                            lock (Lock)
                            {
                                F_cache = FogUtility.fogCahce.Where(x => x.DataType == item.DataType).OrderBy(x => x.InternalProcessingTime).OrderBy(x => x.link.Propagationtime).FirstOrDefault();
                                C_cache = CloudUtility.cloudCahce.Where(x => x.DataType == item.DataType).OrderBy(x => x.InternalProcessingTime).OrderBy(x => x.link.Propagationtime).FirstOrDefault();
                            }
                            bool f, c;
                            f = F_cache == null ? true : false;
                            c = C_cache == null ? true : false;
                            if (F_cache == null || C_cache == null)
                            {
                                if (f)
                                {
                                    var tupleTime = new TupleTimes()
                                    {
                                        TupleArrival = DateTime.Now.ToString("hh:mm:ss.fff tt"), Name = item.Name
                                    };
                                    FogSimulator.TupleTimings.Add(tupleTime);
                                    s.QueueWorkItem(o => FogUtility.FogSim_LR(item, fogList, CommunicationType, Service, DataCenter, "0"), new object());
                                }
                                if (c)
                                {
                                    // create service
                                    var service = ServicesUtility.GetServices()[Service];
                                    s.QueueWorkItem(o => CloudSimulator.CloudSimulationForFog(item, false, Service, DataCenter), new object());
                                }
                            }
                            else
                            {
                                //for predication base
                                double _CTime = C_cache.InternalProcessingTime + C_cache.link.Propagationtime;
                                double _FTime = F_cache.InternalProcessingTime + F_cache.link.Propagationtime;

                                if (_CTime >= _FTime)
                                {
                                    var tupleTime = new TupleTimes()
                                    {
                                        TupleArrival = DateTime.Now.ToString("hh:mm:ss.fff tt"), Name = item.Name
                                    };
                                    FogSimulator.TupleTimings.Add(tupleTime);
                                    try
                                    {
                                        Debug.WriteLine(" Fog Serving ID" + F_cache.FogServer);
                                        s.QueueWorkItem(o => FogUtility.FogSim_LR(item, fogList, CommunicationType, Service, DataCenter, F_cache.FogServer.ToString()), new object());
                                        //FogUtility.FogSim_LR(item, fogList, CommunicationType, Service, DataCenter, F_cache.FogServer.ToString());
                                    }
                                    catch (Exception ex)
                                    {
                                        throw ex;
                                    }
                                }
                                else
                                {
                                    #region Cloud

                                    // create service
                                    var service = ServicesUtility.GetServices()[Service];
                                    #endregion
                                    s.QueueWorkItem(o => CloudSimulator.CloudSimulationForFog(item, false, Service, DataCenter), new object());
                                }
                            }
                        }
                        try
                        {
                            s.WaitForIdle();
                            s.Shutdown();
                        }
                        catch { };
                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException(ex.Message);
                    }
                    #endregion

                    #endregion
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(ex.Message);
                }
                //end
            }

            ////policy 5

            else if (policy == "5")
            {
                //In memory allocation
                #region policy 5
                try
                {
                    IsCreateCache = true;
                    var localtupleList = tupleList.OrderBy(x => x.MIPS).ToList();
                    if (WithGateway)
                    {
                        GlobalGateway.MemoryGatewayPathDecider(localtupleList, fogList, CommunicationType, Service, DataCenter, true);
                    }
                    else
                    {
                        //commented by ali for testing
                        s            = new SmartThreadPool();
                        s.MaxThreads = 1000;
                        s.MinThreads = 1000;
                        watch.Start();
                        foreach (var item in localtupleList)
                        {
                            item.QueueDelay = watch.Elapsed.Milliseconds;
                            s.QueueWorkItem(o => FogUtility.Memory(item, fogList, CommunicationType, Service, DataCenter), new object());
                            //FogUtility.Memory(item, fogList, CommunicationType, Service, DataCenter);
                        }
                        watch.Stop();
                        try
                        {
                            s.WaitForIdle();
                            s.Shutdown();
                        }
                        catch { };
                    }
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(ex.Message);
                }
                #endregion
            }
            // Policy 6
            else if (policy == "6")
            {
                #region policy 6
                try
                {
                    //s = new SmartThreadPool();
                    double[]            nodes       = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
                    var                 prepathLink = AppDomain.CurrentDomain.BaseDirectory;
                    List <NodeLinkList> linklist;
                    using (StreamReader r = new StreamReader(prepathLink + "//" + "INodes.json"))
                    {
                        string json = r.ReadToEnd();
                        fogList = JsonConvert.DeserializeObject <List <FogDevice> >(json);
                    }

                    // fetching nodes
                    // path = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "LinkSeq.json"))).ToString();
                    using (StreamReader r = new StreamReader(prepathLink + "//" + "LinkSeq.json"))
                    {
                        string json = r.ReadToEnd();
                        linklist = JsonConvert.DeserializeObject <List <NodeLinkList> >(json);
                    }

                    // getting 100 jobs
                    List <Tuple> Tuples = tupleList;//.Take(100).ToList();
                    // setting the Source and Destinations
                    foreach (var job in Tuples)
                    {
                        string S = nodes[rnd.Next(nodes.Length)].ToString();
                        string D = nodes[rnd.Next(nodes.Length)].ToString();
                        job.Source = S;
                        if (D != S)//define destination
                        {
                            job.Destination = D;
                        }
                        else
                        {
                            if (Convert.ToInt32(D) == 15)
                            {
                                job.Destination = (Convert.ToInt32(D) - 1).ToString();
                            }
                            else if (Convert.ToInt32(D) != 1)
                            {
                                job.Destination = (Convert.ToInt32(D) - 1).ToString();
                            }
                            else
                            {
                                job.Destination = (Convert.ToInt32(D) + 1).ToString();
                            }
                        }
                    }
                    List <NodeLinkList> FinalLinks = FogUtility.LinkRouting(fogList, Tuples, linklist).ToList();

                    watch.Start();
                    foreach (var item in tupleList.Take(100).ToList())
                    {
                        // Message
                        // Relibility Maximum

                        item.QueueDelay = watch.Elapsed.Milliseconds;
                        //s.QueueWorkItem(o => FogUtility.MPRouting(item, FinalLinks), new object());
                        FogUtility.MPRouting(item, FinalLinks);
                    }
                    watch.Stop();
                    //try
                    //{
                    //    s.WaitForIdle();
                    //    s.Shutdown();
                    //}
                    //catch { };
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(ex.Message);
                }
                #endregion
            }
            else if (policy == "7")
            {
                //Round Robin
                #region Policy 7
                try
                {
                    //tupleList = tupleList.ToList().GetRange(6186,10);
                    tupleList = tupleList.ToList();


                    //O means non agent based on gatway level
                    if (GatewaypolicyType == "0")
                    {
                        //if nodel level policy is simple round robin call this function
                        //Do Simple Round Robin
                        if (NodeLevelPolicyType == "0")
                        {
                            FogUtility.GenerateNodeLevelQueuesSimpleRoundRobin(tupleList, fogList, CommunicationType, Service, DataCenter, WithGateway);
                        }

                        //Do Mean Round Robin
                        else
                        {
                            // FogUtility.GenerateNodeLevelQueuesOnMeanRoundRRobinBasis(tupleList, fogList, CommunicationType, Service, DataCenter, WithGateway);
                            FogUtility.GenerateNodeLevelQueuesOnMeanRoundRRobinBasisWithMultiThreading(tupleList, fogList, CommunicationType, Service, DataCenter, WithGateway);
                        }
                    }

                    else
                    {
                        var hPTuples = new Queue <Tuple>(tupleList.Where(x => x.Priority == "high" && x.IsServed == false).ToList());
                        var mPTuples = new Queue <Tuple>(tupleList.Where(x => x.Priority == "medium" && x.IsServed == false).ToList());
                        var lpTuples = new Queue <Tuple>(tupleList.Where(x => x.Priority != "medium" && x.Priority != "high" && x.IsServed == false).ToList());



                        if (NodeLevelPolicyType == "0")
                        {
                            FogUtility.GenerateNodeLevelQueuesSimpleRoundRobin(hPTuples, fogList, CommunicationType, Service, DataCenter, WithGateway);

                            mPTuples = new Queue <Tuple>(tupleList.Where(x => x.Priority == "medium" && x.IsServed == false).ToList());
                            lpTuples = new Queue <Tuple>(tupleList.Where(x => x.Priority != "medium" && x.Priority != "high" && x.IsServed == false).ToList());
                            FogUtility.GenerateNodeLevelQueuesSimpleRoundRobin(mPTuples, fogList, CommunicationType, Service, DataCenter, WithGateway);
                            FogUtility.GenerateNodeLevelQueuesSimpleRoundRobin(lpTuples, fogList, CommunicationType, Service, DataCenter, WithGateway);
                        }

                        else
                        {
                            FogUtility.GenerateNodeLevelQueuesOnMeanRoundRRobinBasis(hPTuples, fogList, CommunicationType, Service, DataCenter, WithGateway);

                            //foreach (var item in fogList)
                            //{

                            //    item.MaxCapacity = MaxFogCapacity;
                            //}
                            FogUtility.GenerateNodeLevelQueuesOnMeanRoundRRobinBasis(mPTuples, fogList, CommunicationType, Service, DataCenter, WithGateway);
                            //foreach (var item in fogList)
                            //{

                            //    item.MaxCapacity = MaxFogCapacity;
                            //}
                            FogUtility.GenerateNodeLevelQueuesOnMeanRoundRRobinBasis(lpTuples, fogList, CommunicationType, Service, DataCenter, WithGateway);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(ex.Message);
                }
                #endregion
            }
            else
            {
                #region random
                try
                {
                    var split = LinqExtensions.Split(tupleList, 16).ToList();
                    watch.Start();
                    if (WithGateway)
                    {
                        GlobalGateway.GatewayPathDecider(tupleList, fogList, CommunicationType, Service, DataCenter, false);
                    }
                    else
                    {
                        s            = new SmartThreadPool();
                        s.MaxThreads = 1000;
                        s.MinThreads = 1000;
                        for (int j = 0; j < split.Count(); j++)
                        {
                            foreach (var item in split[j])
                            {
                                var tupleTime = new TupleTimes()
                                {
                                    TupleArrival = DateTime.Now.ToString("hh:mm:ss.fff tt"), Name = item.Name
                                };
                                s.QueueWorkItem(o => FogUtility.FogSim(item, fogList, CommunicationType, Service, DataCenter), new object());
                                //FogUtility.FogSim(item, fogList, CommunicationType, Service, DataCenter);
                            }
                        }

                        try
                        {
                            s.WaitForIdle();
                            s.Shutdown();
                        }
                        catch { };
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                #endregion
            }
            watch.Stop();
            if (policy == "4")
            {
                if (resultList != null)
                {
                    Excel.CreateExcelSheetForFog(resultList, FogTimings.ToList(), TupleTimings.ToList());
                }
                if (CloudSimulator.resultList.ToList().Count() > 0)
                {
                    Excel.CreateExcelSheetForCloud(CloudSimulator.resultList.ToList());
                }
            }
            else
            {
                Excel.CreateExcelSheetForFog(resultList, FogTimings.ToList(), TupleTimings.ToList());
            }
        }
Ejemplo n.º 3
0
        public IHttpActionResult createDS(FogSimulationPost model)
        {
            try
            {
                Random rnd = new Random();

                FogPost             fog          = model.FogPost;
                Models.TuplePost    tuple        = model.TuplePost;
                bool                F_homo_hetro = true; //true means Homogenious Fogs
                bool                T_homo_hetro = true; //true mean Homogenious  Tuples
                long                FogSize      = fog.FogSize;
                List <FogDevice>    fogList      = new List <FogDevice>();
                List <Models.Tuple> tupleList    = new List <Models.Tuple>();

                #region create Fog dataSet
                if (fog.FogDevice.RAM != 0)
                {
                    #region Fog
                    F_homo_hetro = true;
                    for (int i = 0; i < FogSize; i++)
                    {
                        bool[] bit = { true, false };
                        var    b   = rnd.Next(bit.Length);

                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomDataType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                        fogList.Add(new FogDevice(
                                        Guid.NewGuid(),
                                        1,
                                        fog.FogDevice.MIPS,
                                        fog.FogDevice.NumberOfPes,
                                        fog.FogDevice.RAM,
                                        fog.FogDevice.UpBW,
                                        fog.FogDevice.DownBW,
                                        fog.FogDevice.Size,
                                        fog.FogDevice.Storage,
                                        fog.FogDevice.Name + "-" + i,
                                        randomDataType.ToString(),
                                        new CloudletScheduler(),
                                        GeoDistance.RandomGeoLocation(rnd),
                                        bit[b],
                                        0,
                                        PowerUtility.SetIdlePower(), 15)
                                    );
                    }

                    #endregion Fog
                }
                else
                {
                    #region Fog
                    F_homo_hetro = false;
                    for (int i = 0; i < FogSize; i++)
                    {
                        bool[] bit = { true };
                        var    b   = rnd.Next(bit.Length);

                        int[] randomRam = { 4096, 6144, 8192, 10240, 12288, 16384 };
                        //  var randomRamIndex = rnd.Next(randomRam.Length);
                        var index = rnd.Next(randomRam.Length);
                        ///commented original values
                        int[] randomMips = { 25000, 50000, 75000, 85000, 95000, 110000 };

                        //these smaller mips were added by ali for testing
                        //int[] randomMips = { 4000, 5000, 10000, 12000, 15000,3000 };


                        var randomMipsIndex = rnd.Next(randomMips.Length);

                        int[] randomPe      = { 1, 1, 2, 2, 3, 4 };
                        var   randomPeIndex = rnd.Next(randomPe.Length);

                        int[] randomSize      = { 7000, 10000, 12000, 15000, 20000, 25000 };
                        var   randomSizeIndex = rnd.Next(randomSize.Length);

                        int[] randomDownBW      = { 500, 700, 1000, 1200, 1500, 1700 };
                        var   randomDownBWIndex = rnd.Next(randomDownBW.Length);

                        int[] randomUpBW      = { 700, 1000, 1200, 1500, 2000, 2500 };
                        var   randomUpBWIndex = rnd.Next(randomUpBW.Length);

                        int[] randomStorage      = { 5000, 10000, 12000, 15000, 20000, 25000 };
                        var   randomStorageIndex = rnd.Next(randomStorage.Length);

                        //processor burst time is random since it is OS defined and processor defined and it is not calculated
                        int[] timeSlice      = { 15, 20, 25, 30 };
                        var   timeSliceIndex = rnd.Next(timeSlice.Length);

                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomDataType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                        fogList.Add(new FogDevice(
                                        Guid.NewGuid(),
                                        1,
                                        randomMips[index],
                                        randomPe[index],
                                        randomRam[index],
                                        randomUpBW[index],
                                        randomDownBW[index],
                                        randomSize[index],
                                        randomStorage[index],
                                        fog.FogDevice.Name + "-" + i,
                                        randomDataType.ToString(),
                                        new CloudletScheduler(),
                                        GeoDistance.RandomGeoLocation(rnd),
                                        bit[b],
                                        0,
                                        PowerUtility.SetIdlePower(), timeSlice[timeSliceIndex])
                                    );
                    }
                    // for writing Json file

                    #endregion Fog
                }
                #endregion

                #region Create Tuple data Set

                if (tuple.TupleData.RAM != 0)
                {
                    T_homo_hetro = true;
                    for (int i = 0; i < tuple.TupleSize; i++)
                    {
                        Array        values         = Enum.GetValues(typeof(EnumDataType));
                        EnumDataType randomDataType = (EnumDataType)values.GetValue(rnd.Next(values.Length));

                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomNodeType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                        tupleList.Add(new Models.Tuple(
                                          Guid.NewGuid(),
                                          1,
                                          tuple.TupleData.MIPS,
                                          tuple.TupleData.NumberOfPes,
                                          tuple.TupleData.RAM,
                                          tuple.TupleData.BW,
                                          tuple.TupleData.Size,
                                          "T-" + i,
                                          randomDataType.ToString(),
                                          100,
                                          0.0,
                                          "Medium",//its medium temporarly
                                          new CloudletScheduler(),
                                          GeoDistance.RandomGeoLocation(rnd),
                                          false,
                                          randomNodeType.ToString(), 20, 0)
                                      );
                    }
                }
                else
                {
                    T_homo_hetro = false;
                    for (int i = 0; i < tuple.TupleSize; i++)
                    {
                        Array        values          = Enum.GetValues(typeof(EnumDataType));
                        EnumDataType randomDataType  = (EnumDataType)values.GetValue(rnd.Next(values.Length));
                        var          randomMipsIndex = 0;
                        bool         BulkOrLarge     = false;
                        List <int>   randomMips      = new List <int>();
                        bool         MedORLB         = randomDataType.ToString() == "Medical" || randomDataType.ToString() == "LocationBased";
                        switch (randomDataType.ToString())
                        {
                        case "Bulk":
                            randomMips.Add(700);
                            randomMips.Add(900);
                            randomMips.Add(1000);
                            randomMips.Add(1200);
                            BulkOrLarge     = true;
                            randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                            break;

                        case "Large":
                            randomMips.Add(500);
                            randomMips.Add(700);
                            randomMips.Add(900);
                            randomMips.Add(1000);
                            BulkOrLarge     = true;
                            randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                            break;

                        default:
                            randomMips.Add(50);
                            randomMips.Add(75);
                            randomMips.Add(100);
                            randomMips.Add(150);
                            randomMips.Add(200);
                            randomMips.Add(250);

                            randomMipsIndex = rnd.Next(randomMips.Count);
                            break;
                        }
                        //MB
                        int[] randomRam = { 100, 150, 200, 300, 500, 1024 };
                        // var randomRamIndex = rnd.Next(randomRam.Length);
                        var   index         = rnd.Next(randomRam.Length);
                        int[] randomPe      = { 1, 1, 1, 1, 1, 1 };
                        var   randomPeIndex = rnd.Next(randomPe.Length);

                        //MB
                        int[] randomSize      = { 80, 120, 170, 220, 270, 300 };
                        var   randomSizeIndex = rnd.Next(randomSize.Length);

                        //bit/sec
                        int[] randomBW      = { 20, 50, 80, 90, 100, 150 };
                        var   randomBWIndex = rnd.Next(randomBW.Length);

                        string[] _priority      = { "medium", "low" };
                        var      _priorityIndex = rnd.Next(_priority.Length);

                        double[] randomTupleBurstTimes = { 20, 40, 60 };
                        var      randomBusrtIndex      = rnd.Next(randomTupleBurstTimes.Length);

                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomNodeType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));
                        //if(BulkOrLarge) randomMipsIndex

                        var    tupleMips         = BulkOrLarge == true ? randomMips[randomMipsIndex - 2] : randomMips[randomMipsIndex];
                        double burstTimeForTuple = 0.0;
                        if (tupleMips <= 100)
                        {
                            burstTimeForTuple = 10;
                        }

                        else if (tupleMips > 100 && tupleMips <= 300)
                        {
                            burstTimeForTuple = 15;
                        }

                        else if (tupleMips > 300 && tupleMips < 500)
                        {
                            burstTimeForTuple = 20;
                        }

                        else if (tupleMips > 500 && tupleMips < 700)
                        {
                            burstTimeForTuple = 25;
                        }
                        else if (tupleMips > 700 && tupleMips < 900)
                        {
                            burstTimeForTuple = 30;
                        }

                        else if (tupleMips > 900 && tupleMips <= 1200)
                        {
                            burstTimeForTuple = 35;
                        }

                        tupleList.Add(new Models.Tuple(Guid.NewGuid(),
                                                       1,
                                                       BulkOrLarge == true ? randomMips[randomMipsIndex - 2] : randomMips[randomMipsIndex],
                                                       randomPe[randomMipsIndex],
                                                       randomRam[randomMipsIndex],
                                                       randomBW[randomMipsIndex],
                                                       randomSize[randomMipsIndex],
                                                       "T-" + i,
                                                       randomDataType.ToString(),
                                                       100,
                                                       0.0,
                                                       //adding medical, location based and shortest jobs to high priority
                                                       MedORLB == true ? "high" : BulkOrLarge == true?"low":tupleMips <= 100?"high": _priority[_priorityIndex],
                                                       new CloudletScheduler(),
                                                       GeoDistance.RandomGeoLocation(rnd),
                                                       false,
                                                       randomNodeType.ToString(), burstTimeForTuple, 0)
                                      );
                    }
                }

                #endregion

                if (fogList != null && tupleList != null)
                {
                    if (F_homo_hetro)
                    {
                        SimJson.WriteJson(fogList, "H**o", "JsonFog.txt");
                    }
                    else
                    {
                        SimJson.WriteJson(fogList, "Hetro", "JsonFog.txt");
                    }
                    if (T_homo_hetro)
                    {
                        SimJson.WriteJson(tupleList, "H**o", "JsonTuple.txt");
                    }
                    else
                    {
                        SimJson.WriteJson(tupleList, "Hetro", "JsonTuple.txt");
                    }
                }
                return(Ok("ok"));
            }
            catch (Exception ex)
            {
                return(Ok(ex.Message.ToString()));
            }
        }
Ejemplo n.º 4
0
        public IHttpActionResult CreateEdgeDS(FogSimulationPost model)
        {
            try
            {
                /// We are using Same classes in Edge computing
                /// but changing the specifications for Edge..

                Random rnd = new Random();

                FogPost             edge         = model.FogPost;
                Models.TuplePost    tuple        = model.TuplePost;
                bool                F_homo_hetro = true; // true means Homogenious Fogs
                bool                T_homo_hetro = true; // true mean Homogenious  Tuples
                long                EdgeSize     = edge.FogSize;
                List <FogDevice>    edgeList     = new List <FogDevice>();
                List <Models.Tuple> tupleList    = new List <Models.Tuple>();

                #region create Edge dataSet
                if (edge.FogDevice.RAM != 0)
                {
                    #region Edge Homogenious
                    F_homo_hetro = true;
                    for (int i = 0; i < EdgeSize; i++)
                    {
                        bool[] bit = { true, false };
                        var    b   = rnd.Next(bit.Length);

                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomDataType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                        edgeList.Add(new FogDevice(
                                         Guid.NewGuid(),
                                         1,
                                         edge.FogDevice.MIPS,
                                         edge.FogDevice.NumberOfPes,
                                         edge.FogDevice.RAM,
                                         edge.FogDevice.UpBW,
                                         edge.FogDevice.DownBW,
                                         edge.FogDevice.Size,
                                         edge.FogDevice.Storage,
                                         edge.FogDevice.Name + "-" + i,
                                         randomDataType.ToString(),
                                         new CloudletScheduler(),
                                         GeoDistance.RandomGeoLocation(rnd),
                                         bit[b],
                                         0,
                                         PowerUtility.SetIdlePower(), 15)
                                     );
                    }

                    #endregion Edge
                }
                else
                {
                    #region Edge Hetrogenious
                    F_homo_hetro = false;
                    for (int i = 0; i < EdgeSize; i++)
                    {
                        bool[] bit = { true };
                        var    b   = rnd.Next(bit.Length);

                        int[] randomRam = { 512, 1024, 2048, 3072, 3584, 4096 };
                        //  var randomRamIndex = rnd.Next(randomRam.Length);
                        var   index           = rnd.Next(randomRam.Length);
                        int[] randomMips      = { 2000, 3500, 7000, 10000, 15000, 18000 };
                        var   randomMipsIndex = rnd.Next(randomMips.Length);

                        int[] randomPe      = { 1, 1, 2, 2, 3, 4 };
                        var   randomPeIndex = rnd.Next(randomPe.Length);

                        int[] randomSize      = { 4000, 5000, 7000, 10000, 12000, 15000 };
                        var   randomSizeIndex = rnd.Next(randomSize.Length);

                        int[] randomDownBW      = { 400, 500, 700, 1000, 1200, 1500 };
                        var   randomDownBWIndex = rnd.Next(randomDownBW.Length);

                        int[] randomUpBW      = { 500, 700, 1000, 1200, 1500, 2000 };
                        var   randomUpBWIndex = rnd.Next(randomUpBW.Length);

                        int[] randomStorage      = { 4000, 5000, 7000, 10000, 12000, 15000 };
                        var   randomStorageIndex = rnd.Next(randomStorage.Length);

                        int[] timeSlice      = { 15, 20, 25, 30 };
                        var   timeSliceIndex = rnd.Next(timeSlice.Length);



                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomDataType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                        edgeList.Add(new FogDevice(
                                         Guid.NewGuid(),
                                         1,
                                         randomMips[index],
                                         randomPe[index],
                                         randomRam[index],
                                         randomUpBW[index],
                                         randomDownBW[index],
                                         randomSize[index],
                                         randomStorage[index],
                                         edge.FogDevice.Name + "-" + i,
                                         randomDataType.ToString(),
                                         new CloudletScheduler(),
                                         GeoDistance.RandomGeoLocation(rnd),
                                         bit[b],
                                         0,
                                         PowerUtility.SetIdlePower(), timeSlice[timeSliceIndex])
                                     );
                    }
                    // for writing Json file

                    #endregion Fog
                }
                #endregion

                #region Create Tuple data Set

                if (tuple.TupleData.RAM != 0)
                {
                    T_homo_hetro = true;
                    for (int i = 0; i < tuple.TupleSize; i++)
                    {
                        Array            values         = Enum.GetValues(typeof(EnumDataTypeEdge));
                        EnumDataTypeEdge randomDataType = (EnumDataTypeEdge)values.GetValue(rnd.Next(values.Length));

                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomNodeType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                        tupleList.Add(new Models.Tuple(
                                          Guid.NewGuid(),
                                          1,
                                          tuple.TupleData.MIPS,
                                          tuple.TupleData.NumberOfPes,
                                          tuple.TupleData.RAM,
                                          tuple.TupleData.BW,
                                          tuple.TupleData.Size,
                                          "T-" + i,
                                          randomDataType.ToString(),
                                          100,
                                          0.0,
                                          "medium",
                                          new CloudletScheduler(),
                                          GeoDistance.RandomGeoLocation(rnd),
                                          false,
                                          randomNodeType.ToString(), 20, 0)
                                      );
                    }
                }
                else
                {
                    T_homo_hetro = false;
                    for (int i = 0; i < tuple.TupleSize; i++)
                    {
                        Array            values         = Enum.GetValues(typeof(EnumDataTypeEdge));
                        EnumDataTypeEdge randomDataType = (EnumDataTypeEdge)values.GetValue(rnd.Next(values.Length));
                        bool             MedORLB        = randomDataType.ToString() == "Medical" || randomDataType.ToString() == "LocationBased";

                        var        randomMipsIndex = 0;
                        bool       datatypecheck   = false;
                        List <int> randomMips      = new List <int>();
                        switch (randomDataType.ToString())
                        {
                        //case "Bulk":
                        //    randomMips.Add(500);
                        //    randomMips.Add(700);
                        //    randomMips.Add(900);
                        //    randomMips.Add(1000);
                        //    BulkOrLarge = true;
                        //    randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                        //    break;
                        case "Abrupt":
                            randomMips.Add(350);
                            randomMips.Add(375);
                            randomMips.Add(400);
                            randomMips.Add(450);
                            datatypecheck   = true;
                            randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                            break;

                        case "Large":
                            randomMips.Add(400);
                            randomMips.Add(450);
                            randomMips.Add(500);
                            randomMips.Add(700);
                            datatypecheck   = true;
                            randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                            break;

                        case "Medical":
                            randomMips.Add(250);
                            randomMips.Add(270);
                            randomMips.Add(300);
                            randomMips.Add(350);
                            datatypecheck   = true;
                            randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                            break;

                        case "LocationBased":
                            randomMips.Add(300);
                            randomMips.Add(350);
                            randomMips.Add(375);
                            randomMips.Add(400);
                            datatypecheck   = true;
                            randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                            break;

                        //LocationBased
                        case "Multimedia":
                            randomMips.Add(325);
                            randomMips.Add(350);
                            randomMips.Add(375);
                            randomMips.Add(425);
                            datatypecheck   = true;
                            randomMipsIndex = rnd.Next(randomMips.Count) + 2;
                            break;

                        default:
                            randomMips.Add(75);
                            randomMips.Add(100);
                            randomMips.Add(120);
                            randomMips.Add(150);
                            randomMips.Add(150); randomMips.Add(175);
                            randomMipsIndex = rnd.Next(randomMips.Count);
                            break;
                        }
                        //MB
                        int[] randomRam = { 100, 150, 200, 300, 400, 512 };
                        // var randomRamIndex = rnd.Next(randomRam.Length);
                        var   index         = rnd.Next(randomRam.Length);
                        int[] randomPe      = { 1, 1, 1, 1, 1, 1 };
                        var   randomPeIndex = rnd.Next(randomPe.Length);

                        //MB
                        int[] randomSize      = { 80, 120, 170, 220, 270, 300 };
                        var   randomSizeIndex = rnd.Next(randomSize.Length);

                        //bit/sec
                        int[] randomBW      = { 20, 50, 80, 90, 100, 150 };
                        var   randomBWIndex = rnd.Next(randomBW.Length);

                        string[] _priority      = { "medium", "low" };
                        var      _priorityIndex = rnd.Next(_priority.Length);

                        double[] randomTupleBurstTimes = { 20, 40, 60 };
                        var      randomBusrtIndex      = rnd.Next(randomTupleBurstTimes.Length);


                        var    tupleMips         = datatypecheck == true ? randomMips[randomMipsIndex - 2] : randomMips[randomMipsIndex];
                        double burstTimeForTuple = 0.0;
                        if (tupleMips <= 100)
                        {
                            burstTimeForTuple = 10;
                        }

                        else if (tupleMips > 100 && tupleMips <= 300)
                        {
                            burstTimeForTuple = 15;
                        }

                        else if (tupleMips > 300 && tupleMips < 500)
                        {
                            burstTimeForTuple = 20;
                        }

                        else if (tupleMips > 500 && tupleMips < 700)
                        {
                            burstTimeForTuple = 25;
                        }
                        else if (tupleMips > 700 && tupleMips < 900)
                        {
                            burstTimeForTuple = 30;
                        }

                        else if (tupleMips > 900 && tupleMips <= 1200)
                        {
                            burstTimeForTuple = 35;
                        }
                        Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                        EnumNodeType randomNodeType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));
                        //if(BulkOrLarge) randomMipsIndex
                        tupleList.Add(new Models.Tuple(Guid.NewGuid(),
                                                       1,
                                                       datatypecheck == true ? randomMips[randomMipsIndex - 2] : randomMips[randomMipsIndex],
                                                       randomPe[randomMipsIndex],
                                                       randomRam[randomMipsIndex],
                                                       randomBW[randomMipsIndex],
                                                       randomSize[randomMipsIndex],
                                                       "T-" + i,
                                                       randomDataType.ToString(),
                                                       100,
                                                       0.0,
                                                       MedORLB == true ? "high" : _priority[_priorityIndex],
                                                       new CloudletScheduler(),
                                                       GeoDistance.RandomGeoLocation(rnd),
                                                       false,
                                                       randomNodeType.ToString(), burstTimeForTuple, 0)
                                      );
                    }
                }

                #endregion

                if (edgeList != null && tupleList != null)
                {
                    if (F_homo_hetro)
                    {
                        SimJson.WriteJson(edgeList, "EHomo", "JsonEdge.txt");
                    }
                    else
                    {
                        SimJson.WriteJson(edgeList, "EHetro", "JsonEdge.txt");
                    }
                    if (T_homo_hetro)
                    {
                        SimJson.WriteJson(tupleList, "EHomo", "JsonTuple.txt");
                    }
                    else
                    {
                        SimJson.WriteJson(tupleList, "EHetro", "JsonTuple.txt");
                    }
                }
                return(Ok("ok"));
            }
            catch (Exception ex)
            {
                return(Ok(ex.Message.ToString()));
            }
        }
Ejemplo n.º 5
0
        public static void MPRSimulation(FogPost edge, TuplePost tuple, string policy, int CommunicationType, int Service, List <string> DataCenter, string gateway, string cooperation, string edgeType)
        {
            Random    rnd    = new Random();
            Stopwatch watch  = new Stopwatch();
            var       result = new Results();

            edgeResultList = new List <Results>();
            edgeList       = new List <FogDevice>();
            tupleList      = new List <Models.Tuple>();
            PowerUtility.FillNumRange();
            string JsonReturn, path;

            #region DataSet reading
            if (edgeType == "0")
            {
                #region Memory Homogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "H**o\\JsonFog.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                edgeList   = JsonConvert.DeserializeObject <List <FogDevice> >(JsonReturn);
                EdgeSize   = edgeList.Count;

                #endregion

                #region Tuple homogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "H**o\\JsonTuple.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                tupleList  = JsonConvert.DeserializeObject <List <Models.Tuple> >(JsonReturn);

                #endregion Tuple
            }
            else
            {
                #region Memory Hetrogenous

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "Hetro\\JsonFog.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                edgeList   = JsonConvert.DeserializeObject <List <FogDevice> >(JsonReturn);
                EdgeSize   = edgeList.Count;

                #endregion

                #region Tuple Hetrogenious

                path       = (new FileInfo(Path.Combine(FileInformation.GetDirectory(), "Hetro\\JsonTuple.txt"))).ToString();
                JsonReturn = SimJson.ReadJsonFile(path);
                tupleList  = JsonConvert.DeserializeObject <List <Models.Tuple> >(JsonReturn);
                #endregion Tuple
            }

            #region create fog for Edge-fog cloud
            if (CommunicationType == 1)
            {
                int fCount = Convert.ToInt32(EdgeSize / 2);
                for (int i = 0; i < fCount; i++)
                {
                    bool[] bit = { true };
                    var    b   = rnd.Next(bit.Length);

                    int[] randomRam = { 512, 1024, 2048, 3072, 3584, 4096 };
                    //  var randomRamIndex = rnd.Next(randomRam.Length);
                    var   index           = rnd.Next(randomRam.Length);
                    int[] randomMips      = { 2000, 4000, 8000, 12000, 18000, 20000 };
                    var   randomMipsIndex = rnd.Next(randomMips.Length);

                    int[] randomPe      = { 1, 1, 2, 2, 3, 4 };
                    var   randomPeIndex = rnd.Next(randomPe.Length);

                    int[] randomSize      = { 4000, 5000, 7000, 10000, 12000, 15000 };
                    var   randomSizeIndex = rnd.Next(randomSize.Length);

                    int[] randomDownBW      = { 400, 500, 700, 1000, 1200, 1500 };
                    var   randomDownBWIndex = rnd.Next(randomDownBW.Length);

                    int[] randomUpBW      = { 500, 700, 1000, 1200, 1500, 2000 };
                    var   randomUpBWIndex = rnd.Next(randomUpBW.Length);

                    int[] randomStorage      = { 2500, 4500, 5000, 7000, 10000, 12000 };
                    var   randomStorageIndex = rnd.Next(randomStorage.Length);

                    Array        NodeTypevalues = Enum.GetValues(typeof(EnumNodeType));
                    EnumNodeType randomDataType = (EnumNodeType)NodeTypevalues.GetValue(rnd.Next(NodeTypevalues.Length));

                    fogServers.Add(new FogDevice(
                                       Guid.NewGuid(),
                                       1,
                                       randomMips[index],
                                       randomPe[index],
                                       randomRam[index],
                                       randomUpBW[index],
                                       randomDownBW[index],
                                       randomSize[index],
                                       randomStorage[index],
                                       "fog" + "-" + i,
                                       randomDataType.ToString(),
                                       new CloudletScheduler(),
                                       GeoDistance.RandomGeoLocation(rnd),
                                       bit[b],
                                       0,
                                       PowerUtility.SetIdlePower())
                                   );
                }
            }

            #endregion

            #endregion
            SmartThreadPool s = new SmartThreadPool();
            s.MaxThreads = 1000;
            s.MinThreads = 1000;

            List <Task> myTaskList = new List <Task>();
            if (policy == "1")
            {
                //FCFS
                #region P1 FCFS

                s = new SmartThreadPool();
                watch.Start();
                foreach (var item in tupleList)
                {
                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                }
                watch.Stop();
                try
                {
                    s.WaitForIdle();
                    s.Shutdown();
                }
                catch { };
                #endregion
            }
            else if (policy == "2")
            {
                #region P2 SJF
                var localtupleList = tupleList.OrderBy(x => x.MIPS).ToList();

                s = new SmartThreadPool();
                watch.Start();
                foreach (var item in localtupleList)
                {
                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                }
                watch.Stop();
                try
                {
                    s.WaitForIdle();
                    s.Shutdown();
                }
                catch { };
                #endregion
            }
            else if (policy == "3")
            {
                #region P3 LJF
                var localtupleList = tupleList.OrderByDescending(x => x.MIPS).ToList();

                s = new SmartThreadPool();
                watch.Start();
                foreach (var item in localtupleList)
                {
                    s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                }
                watch.Stop();
                try
                {
                    s.WaitForIdle();
                    s.Shutdown();
                }
                catch { };
                #endregion
            }
            else
            {
                #region random
                try
                {
                    var split = LinqExtensions.Split(tupleList, 16).ToList();
                    watch.Start();
                    s = new SmartThreadPool();
                    for (int j = 0; j < split.Count(); j++)
                    {
                        foreach (var item in split[j])
                        {
                            s.QueueWorkItem(o => FogUtility.EdgeSim(item, edgeList, CommunicationType), new object());
                        }
                    }
                    try
                    {
                        s.WaitForIdle();
                        s.Shutdown();
                    }
                    catch { };
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                #endregion
            }
            watch.Stop();
            if (policy == "4")
            {
                if (edgeResultList != null)
                {
                    Excel.CreateExcelSheetEdgeFog(edgeResultList, FogTimings.ToList(), TupleTimings.ToList(), DropedtupleList.ToList());
                }
            }
            else

            {
                Excel.CreateExcelSheetEdgeFog(edgeResultList, FogTimings.ToList(), TupleTimings.ToList(), DropedtupleList.ToList());
                if (CommunicationType == 1)
                {
                    Excel.CreateExcelSheetForFog(FogSimulator.resultList, FogSimulator.FogTimings.ToList(), FogSimulator.TupleTimings.ToList());
                }
            }
        }