LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
retrieval_default.m
1% Retrieval system whose per-item miss routing AND service are taken, by
2% default, from the read class: routing from the read class's edges among the
3% retrieval queues in the top-level P matrix, and service from the read class's
4% service distribution at each queue. Per-item overrides
5% (setItemRoutingProb with the cache as source/dest / queue.setItemServiceRate)
6% then reconfigure one item at finer granularity.
7clc; clear solver AvgTable;
8
9accessProb = [0.6, 0.3, 0.1]; % per-item access probabilities (3 items)
10
11model = Network('DelayedHits');
12
13n = numel(accessProb); % number of items
14capacity = [1]; % per-level cache capacity
15
16source = Source(model, 'Source');
17cacheNode = Cache(model, 'Cache', n, capacity, ReplacementStrategy.FIFO);
18% PS retrieval stations: per-item (class-dependent) service rates are admissible
19% in the analytical retrieval algorithm (FCFS/SIRO would require identical rates).
20queue1 = Queue(model, 'Queue_1', SchedStrategy.PS);
21queue2 = Queue(model, 'Queue_2', SchedStrategy.PS);
22sink = Sink(model, 'Sink');
23
24jobClass = OpenClass(model, 'InitClass', 0);
25hitClass = OpenClass(model, 'HitClass', 0);
26missClass = OpenClass(model, 'MissClass', 0);
27
28source.setArrival(jobClass, Exp(1));
29
30% Read class service at each retrieval queue = default per-item fetch service.
31queue1.setService(jobClass, Exp(2.0));
32queue2.setService(jobClass, Exp(3.0));
33
34pAccess = DiscreteSampler(accessProb);
35cacheNode.setRead(jobClass, pAccess);
36cacheNode.setHitClass(jobClass, hitClass);
37cacheNode.setMissClass(jobClass, missClass);
38
39% No serviceRates and no routingMatrices: both inherited from the read class.
40cacheNode.setRetrievalSystem(jobClass, missClass, {queue1, queue2});
41
42% Item-level overrides for item 1: skip Queue_2 and fetch faster at Queue_1.
43cacheNode.setItemRoutingProb(jobClass, 1, queue1, queue2, 0.0); % delete default edge
44cacheNode.setItemRoutingProb(jobClass, 1, queue1, cacheNode, 1.0); % exit after Queue_1
45queue1.setItemServiceRate(cacheNode, jobClass, 1, 5.0); % faster item-1 fetch
46
47P = model.initRoutingMatrix();
48P{jobClass, jobClass}(source, cacheNode) = 1.0;
49% Default retrieval topology, drawn once for the read class: cache -> Q1 -> Q2 -> cache
50P{jobClass, jobClass}(cacheNode, queue1) = 1.0; % entry into retrieval
51P{jobClass, jobClass}(queue1, queue2) = 1.0; % Queue_1 -> Queue_2
52P{jobClass, jobClass}(queue2, cacheNode) = 1.0; % exit back to cache
53P{hitClass, hitClass}(cacheNode, sink) = 1.0;
54P{missClass, missClass}(cacheNode, sink) = 1.0;
55model.link(P);
56
57% Simulation
58SSA(model, 'samples', 5000, 'method', 'serial', 'seed', 1).getAvgCacheTable
59LDES(model, 'samples', 1e6, 'seed', 1).getAvgCacheTable
60
61% Analytical
62MVA(model).getAvgCacheTable
63NC(model).getAvgCacheTable
64
65% Item-level cache occupancy
66MVA(model).getAvgItemTable
67NC(model).getAvgItemTable
Definition Station.m:245