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)
6model = Network(
'DelayedHits');
8n = numel(accessProb); % number of items
9capacity = [1]; % per-level cache capacity
11source = Source(model,
'Source');
12cacheNode = Cache(model,
'Cache', n, capacity, ReplacementStrategy.FIFO);
13queue = Queue(model,
'Queue', SchedStrategy.INF);
14sink = Sink(model,
'Sink');
16jobClass = OpenClass(model,
'InitClass', 0);
17hitClass = OpenClass(model,
'HitClass', 0);
18missClass = OpenClass(model,
'MissClass', 0);
20source.setArrival(jobClass, Exp(1));
22% Read
class service at
the retrieval queue =
default per-item fetch service.
23queue.setService(jobClass, Exp(2.0));
25pAccess = DiscreteSampler(accessProb);
26cacheNode.setRead(jobClass, pAccess);
27cacheNode.setHitClass(jobClass, hitClass);
28cacheNode.setMissClass(jobClass, missClass);
30% No serviceRates and no routingMatrices: both inherited from
the read
class.
31cacheNode.setRetrievalSystem(jobClass, missClass, queue);
33P = model.initRoutingMatrix();
34P{jobClass, jobClass}(source, cacheNode) = 1.0;
35% Retrieval topology drawn once
for the read
class: cache <-> queue.
36P{jobClass, jobClass}(cacheNode, queue) = 1.0;
37P{jobClass, jobClass}(queue, cacheNode) = 1.0;
38P{hitClass, hitClass}(cacheNode, sink) = 1.0;
39P{missClass, missClass}(cacheNode, sink) = 1.0;
43SSA(model,
'samples', 5000,
'method',
'serial',
'seed', 1).getAvgCacheTable
44LDES(model,
'samples', 1e6,
'seed', 1).getAvgCacheTable
47MVA(model).getAvgCacheTable
48NC(model).getAvgCacheTable
50% Item-level cache occupancy
51MVA(model).getAvgItemTable
52NC(model).getAvgItemTable