1% Cache with a chained retrieval system (delayed hits).
2clc; clear solver AvgTable;
4accessProb = [0.6, 0.3, 0.1]; % per-item access probabilities (3 items)
7model = Network(
'DelayedHits');
9n = numel(accessProb); % number of items
10capacity = [1]; % per-level cache capacity
12source = Source(model,
'Source');
13cacheNode = Cache(model,
'Cache', n, capacity, ReplacementStrategy.FIFO);
14queues = cell(1, nQueues);
16 queues{i} = Queue(model, sprintf(
'Queue_%d', i), SchedStrategy.FCFS);
18sink = Sink(model,
'Sink');
20jobClass = OpenClass(model,
'InitClass', 0);
21hitClass = OpenClass(model,
'HitClass', 0);
22missClass = OpenClass(model,
'MissClass', 0);
24source.setArrival(jobClass, Exp(1));
26% Read
class service at each retrieval queue =
default per-item fetch service.
27queues{1}.setService(jobClass, Exp(2.0));
28queues{2}.setService(jobClass, Exp(3.0));
30pAccess = DiscreteSampler(accessProb);
31cacheNode.setRead(jobClass, pAccess);
32cacheNode.setHitClass(jobClass, hitClass);
33cacheNode.setMissClass(jobClass, missClass);
35% No serviceRates and no routingMatrices: both inherited from
the read
class.
36cacheNode.setRetrievalSystem(jobClass, missClass, queues);
38P = model.initRoutingMatrix();
39P{jobClass, jobClass}(source, cacheNode) = 1.0;
40% Retrieval chain drawn once
for the read
class: Cache -> Queue_1 -> Queue_2 -> Cache
41P{jobClass, jobClass}(cacheNode, queues{1}) = 1.0;
42P{jobClass, jobClass}(queues{1}, queues{2}) = 1.0;
43P{jobClass, jobClass}(queues{2}, cacheNode) = 1.0;
44P{hitClass, hitClass}(cacheNode, sink) = 1.0;
45P{missClass, missClass}(cacheNode, sink) = 1.0;
49SSA(model,
'samples', 5000,
'method',
'serial',
'seed', 1).getAvgCacheTable
50LDES(model,
'samples', 1e6,
'seed', 1).getAvgCacheTable
53MVA(model).getAvgCacheTable
54NC(model).getAvgCacheTable
56% Item-level cache occupancy
57MVA(model).getAvgItemTable
58NC(model).getAvgItemTable