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)
5serviceRates = [2.0, 2.0, 2.0; % Queue_1 per-item retrieval rates
6 3.0, 3.0, 3.0]; % Queue_2 per-item retrieval rates
9model = Network(
'DelayedHits');
11n = size(serviceRates, 2); % number of items
12capacity = [1]; % per-level cache capacity
14source = Source(model,
'Source');
15cacheNode = Cache(model,
'Cache', n, capacity, ReplacementStrategy.FIFO);
16queues = cell(1, nQueues);
18 queues{i} = Queue(model, sprintf(
'Queue_%d', i), SchedStrategy.FCFS);
20sink = Sink(model,
'Sink');
22jobClass = OpenClass(model,
'InitClass', 0);
23hitClass = OpenClass(model,
'HitClass', 0);
24missClass = OpenClass(model,
'MissClass', 0);
26source.setArrival(jobClass, Exp(1));
28pAccess = DiscreteSampler(accessProb);
29cacheNode.setRead(jobClass, pAccess);
30cacheNode.setHitClass(jobClass, hitClass);
31cacheNode.setMissClass(jobClass, missClass);
33cacheNode.setRetrievalSystem(jobClass, missClass, queues, serviceRates);
35% Per-item chain: Cache -> Queue_1 -> Queue_2 -> Cache
37 cacheNode.setItemQueueEntryProbability(jobClass, item, queues{1}, 1.0);
38 for q = 1:(nQueues - 1)
39 cacheNode.setItemRoutingProbability(jobClass, item, queues{q}, queues{q + 1}, 1.0);
41 cacheNode.setItemQueueExitProbability(jobClass, item, queues{nQueues}, 1.0);
44P = model.initRoutingMatrix();
45P{jobClass, jobClass}(source, cacheNode) = 1.0;
46P{hitClass, hitClass}(cacheNode, sink) = 1.0;
47P{missClass, missClass}(cacheNode, sink) = 1.0;
51SSA(model,
'samples', 5000,
'method',
'serial',
'seed', 1).getAvgCacheTable
52LDES(model,
'samples', 1e6,
'seed', 1).getAvgCacheTable
55MVA(model).getAvgCacheTable
56NC(model).getAvgCacheTable
58% Item-level cache occupancy
59MVA(model).getAvgItemTable
60NC(model).getAvgItemTable