1% cache with state dependent routing
4model = Network(
'model');
6n = 5; % number of items
9source = Source(model,
'Source');
10cacheNode = Cache(model,
'Cache', n, m, ReplacementStrategy.FIFO);
11delay1 = Delay(model,
'Delay1');
12delay2 = Delay(model,
'Delay2');
13sink = Sink(model,
'Sink');
15jobClass = OpenClass(model,
'InitClass', 0);
16hitClass = OpenClass(model,
'HitClass', 0);
17missClass = OpenClass(model,
'MissClass', 0);
19source.setArrival(jobClass, Exp(2));
21delay1.setService(hitClass, Exp(10));
22delay1.setService(missClass, Exp(1));
23delay2.setService(hitClass, Exp(20));
24delay2.setService(missClass, Exp(2));
26pAccess = DiscreteSampler((1/n)*ones(1,n)); % uniform item references
27cacheNode.setRead(jobClass, pAccess);
29cacheNode.setHitClass(jobClass, hitClass);
30cacheNode.setMissClass(jobClass, missClass);
32model.addLink(source, cacheNode);
33model.addLink(cacheNode, delay1);
34model.addLink(cacheNode, delay2);
35model.addLink(delay1, sink);
36model.addLink(delay2, sink);
38source.setProbRouting(jobClass, cacheNode, 1.0);
40cacheNode.setRouting(hitClass,RoutingStrategy.RROBIN);
42 line_printf(
'The example first illustrates and invalid routing setup for a cache that triggers the following exception:\n');
43 line_printf(
'%s\n',ME.message);
44 line_printf(
'We now illustrate the correct setup of the same model.\n');
47% cacheNode.setRouting(missClass,RoutingStrategy.RROBIN);
48% delay1.setProbRouting(hitClass, sink, 1.0);
49% delay1.setProbRouting(missClass, sink, 1.0);
50% delay2.setProbRouting(hitClass, sink, 1.0);
51% delay2.setProbRouting(missClass, sink, 1.0);
53% solver{1} = CTMC(model,
'keep',
false,
'cutoff',1);
54% AvgTable{1} = solver{1}.getAvgNodeTable; AvgTable{1}
57% solver{2} = SSA(model,
'samples',1e4,
'verbose',
true,
'method',
'serial',
'seed',23000);
58% AvgTable{2} = solver{2}.getAvgNodeTable; AvgTable{2}
61% solver{3} = MVA(model);
62% AvgTable{3} = solver{3}.getAvgNodeTable; AvgTable{3}
65% solver{4} = NC(model);
66% AvgTable{4} = solver{4}.getAvgNodeTable; AvgTable{4}
68% hitRatio=cacheNode.getHitRatio
69% missRatio=cacheNode.getMissRatio
72% cache with state dependent routing
75model = Network(
'model');
77n = 5; % number of items
78m = 2; % cache capacity
80source = Source(model,
'Source');
81cacheNode = Cache(model,
'Cache', n, m, ReplacementStrategy.FIFO);
82routerNode = Router(model,
'Router');
83delay1 = Delay(model,
'Delay1');
84delay2 = Delay(model,
'Delay2');
85sink = Sink(model,
'Sink');
87jobClass = OpenClass(model,
'InitClass', 0);
88hitClass = OpenClass(model,
'HitClass', 0);
89missClass = OpenClass(model,
'MissClass', 0);
91source.setArrival(jobClass, Exp(2));
93delay1.setService(hitClass, Exp(10));
94delay1.setService(missClass, Exp(1));
96delay2.setService(hitClass, Exp(20));
97delay2.setService(missClass, Exp(2));
99pAccess = DiscreteSampler((1/n)*ones(1,n)); % uniform item references
100cacheNode.setRead(jobClass, pAccess);
101cacheNode.setHitClass(jobClass, hitClass);
102cacheNode.setMissClass(jobClass, missClass);
104model.addLink(source, cacheNode);
105model.addLink(cacheNode, routerNode);
106model.addLink(routerNode, delay1);
107model.addLink(routerNode, delay2);
108model.addLink(delay1, sink);
109model.addLink(delay2, sink);
111source.setProbRouting(jobClass, cacheNode, 1.0);
113cacheNode.setProbRouting(hitClass, routerNode, 1.0);
114cacheNode.setProbRouting(missClass, routerNode, 1.0);
116routerNode.setRouting(hitClass, RoutingStrategy.RAND);
117routerNode.setRouting(missClass, RoutingStrategy.RAND);
119delay1.setProbRouting(hitClass, sink, 1.0);
120delay1.setProbRouting(missClass, sink, 1.0);
122delay2.setProbRouting(hitClass, sink, 1.0);
123delay2.setProbRouting(missClass, sink, 1.0);
125solver{1} = CTMC(model,
'keep',
false,
'cutoff',1);
126AvgTable{1} = solver{1}.getAvgNodeTable; AvgTable{1}
129solver{2} = SSA(model,
'samples',1e4,
'verbose',
true,
'method',
'serial',
'seed',23000);
130AvgTable{2} = solver{2}.getAvgNodeTable; AvgTable{2}
133solver{3} = MVA(model);
134AvgTable{3} = solver{3}.getAvgNodeTable; AvgTable{3}
137solver{4} = NC(model);
138AvgTable{4} = solver{4}.getAvgNodeTable; AvgTable{4}
140hitRatio=cacheNode.getHitRatio
141missRatio=cacheNode.getMissRatio