LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
cache_replc_routing.m
1% cache with state dependent routing
2clear solver AvgTable;
3
4model = Network('model');
5
6n = 5; % number of items
7m = 2; % cache capacity
8
9source = Source(model, 'Source');
10cacheNode = Cache(model, 'Cache', n, m, ReplacementStrategy.FIFO);
11delay1 = Delay(model,'Delay1');
12delay2 = Delay(model,'Delay2');
13sink = Sink(model, 'Sink');
14
15jobClass = OpenClass(model, 'InitClass', 0);
16hitClass = OpenClass(model, 'HitClass', 0);
17missClass = OpenClass(model, 'MissClass', 0);
18
19source.setArrival(jobClass, Exp(2));
20
21delay1.setService(hitClass, Exp(10));
22delay1.setService(missClass, Exp(1));
23delay2.setService(hitClass, Exp(20));
24delay2.setService(missClass, Exp(2));
25
26pAccess = DiscreteSampler((1/n)*ones(1,n)); % uniform item references
27cacheNode.setRead(jobClass, pAccess);
28
29cacheNode.setHitClass(jobClass, hitClass);
30cacheNode.setMissClass(jobClass, missClass);
31
32model.addLink(source, cacheNode);
33model.addLink(cacheNode, delay1);
34model.addLink(cacheNode, delay2);
35model.addLink(delay1, sink);
36model.addLink(delay2, sink);
37
38source.setProbRouting(jobClass, cacheNode, 1.0);
39try
40cacheNode.setRouting(hitClass,RoutingStrategy.RROBIN);
41catch ME
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');
45end
46
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);
52%
53% solver{1} = CTMC(model,'keep',false,'cutoff',1);
54% AvgTable{1} = solver{1}.getAvgNodeTable; AvgTable{1}
55%
56% model.reset;
57% solver{2} = SSA(model,'samples',1e4,'verbose',true,'method','serial','seed',23000);
58% AvgTable{2} = solver{2}.getAvgNodeTable; AvgTable{2}
59%
60% model.reset;
61% solver{3} = MVA(model);
62% AvgTable{3} = solver{3}.getAvgNodeTable; AvgTable{3}
63%
64% model.reset;
65% solver{4} = NC(model);
66% AvgTable{4} = solver{4}.getAvgNodeTable; AvgTable{4}
67%
68% hitRatio=cacheNode.getHitRatio
69% missRatio=cacheNode.getMissRatio
70
71%%
72% cache with state dependent routing
73clear solver AvgTable;
74
75model = Network('model');
76
77n = 5; % number of items
78m = 2; % cache capacity
79
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');
86
87jobClass = OpenClass(model, 'InitClass', 0);
88hitClass = OpenClass(model, 'HitClass', 0);
89missClass = OpenClass(model, 'MissClass', 0);
90
91source.setArrival(jobClass, Exp(2));
92
93delay1.setService(hitClass, Exp(10));
94delay1.setService(missClass, Exp(1));
95
96delay2.setService(hitClass, Exp(20));
97delay2.setService(missClass, Exp(2));
98
99pAccess = DiscreteSampler((1/n)*ones(1,n)); % uniform item references
100cacheNode.setRead(jobClass, pAccess);
101cacheNode.setHitClass(jobClass, hitClass);
102cacheNode.setMissClass(jobClass, missClass);
103
104model.addLink(source, cacheNode);
105model.addLink(cacheNode, routerNode);
106model.addLink(routerNode, delay1);
107model.addLink(routerNode, delay2);
108model.addLink(delay1, sink);
109model.addLink(delay2, sink);
110
111source.setProbRouting(jobClass, cacheNode, 1.0);
112
113cacheNode.setProbRouting(hitClass, routerNode, 1.0);
114cacheNode.setProbRouting(missClass, routerNode, 1.0);
115
116routerNode.setRouting(hitClass, RoutingStrategy.RAND);
117routerNode.setRouting(missClass, RoutingStrategy.RAND);
118
119delay1.setProbRouting(hitClass, sink, 1.0);
120delay1.setProbRouting(missClass, sink, 1.0);
121
122delay2.setProbRouting(hitClass, sink, 1.0);
123delay2.setProbRouting(missClass, sink, 1.0);
124
125solver{1} = CTMC(model,'keep',false,'cutoff',1);
126AvgTable{1} = solver{1}.getAvgNodeTable; AvgTable{1}
127%%
128model.reset;
129solver{2} = SSA(model,'samples',1e4,'verbose',true,'method','serial','seed',23000);
130AvgTable{2} = solver{2}.getAvgNodeTable; AvgTable{2}
131%%
132model.reset;
133solver{3} = MVA(model);
134AvgTable{3} = solver{3}.getAvgNodeTable; AvgTable{3}
135
136model.reset;
137solver{4} = NC(model);
138AvgTable{4} = solver{4}.getAvgNodeTable; AvgTable{4}
139
140hitRatio=cacheNode.getHitRatio
141missRatio=cacheNode.getMissRatio