1% Cache with a single-queue retrieval system (delayed hits).
2clc; clear solver AvgTable;
4accessProb = [0.6, 0.3, 0.1]; % per-item access probabilities (3 items)
5serviceRates = [2.0, 2.0, 2.0]; % per-item retrieval service rates
7model = Network(
'DelayedHits');
9n = numel(serviceRates); % number of items
10capacity = [1]; % per-level cache capacity
12source = Source(model,
'Source');
13cacheNode = Cache(model,
'Cache', n, capacity, ReplacementStrategy.FIFO);
14queue = Queue(model,
'Queue', SchedStrategy.INF);
15sink = Sink(model,
'Sink');
17jobClass = OpenClass(model,
'InitClass', 0);
18hitClass = OpenClass(model,
'HitClass', 0);
19missClass = OpenClass(model,
'MissClass', 0);
21source.setArrival(jobClass, Exp(1));
23pAccess = DiscreteSampler(accessProb);
24cacheNode.setRead(jobClass, pAccess);
25cacheNode.setHitClass(jobClass, hitClass);
26cacheNode.setMissClass(jobClass, missClass);
28% Queue -> Cache and Cache -> Queue inside the retrieval system
29retrievalRoutingMatrix = [0.0, 1.0; % Queue -> [Queue, Cache]
30 1.0, 0.0]; % Cache -> [Queue, Cache]
31cacheNode.setRetrievalSystem(jobClass, missClass, queue, serviceRates, retrievalRoutingMatrix);
33P = model.initRoutingMatrix();
34P{jobClass, jobClass}(source, cacheNode) = 1.0;
35P{hitClass, hitClass}(cacheNode, sink) = 1.0;
36P{missClass, missClass}(cacheNode, sink) = 1.0;
40SSA(model,
'samples', 5000,
'method',
'serial',
'seed', 1).getAvgCacheTable
41LDES(model,
'samples', 1e6,
'seed', 1).getAvgCacheTable
44MVA(model).getAvgCacheTable
45NC(model).getAvgCacheTable
47% Item-level cache occupancy
48MVA(model).getAvgItemTable
49NC(model).getAvgItemTable