LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
retrieval_routing.m
1% Cache with probabilistic per-item routing through a retrieval system.
2clc; clear solver AvgTable;
3
4accessProb = [0.6, 0.3, 0.1]; % per-item access probabilities (3 items)
5
6model = Network('DelayedHits');
7
8n = numel(accessProb); % number of items
9capacity = [2]; % per-level cache capacity
10
11source = Source(model, 'Source');
12cacheNode = Cache(model, 'Cache', n, capacity, ReplacementStrategy.FIFO);
13isQueue = Queue(model, 'IS Queue', SchedStrategy.INF);
14queue1 = Queue(model, 'Queue 1', SchedStrategy.FCFS);
15queue2 = Queue(model, 'Queue 2', SchedStrategy.FCFS);
16queues = {isQueue, queue1, queue2};
17sink = Sink(model, 'Sink');
18
19jobClass = OpenClass(model, 'InitClass', 0);
20hitClass = OpenClass(model, 'HitClass', 0);
21missClass = OpenClass(model, 'MissClass', 0);
22
23source.setArrival(jobClass, Exp(1));
24
25% Read class service per queue = default per-item fetch service (uniform over items).
26isQueue.setService(jobClass, Exp(2.0));
27queue1.setService(jobClass, Exp(3.0));
28queue2.setService(jobClass, Exp(3.0));
29
30pAccess = DiscreteSampler(accessProb);
31cacheNode.setRead(jobClass, pAccess);
32cacheNode.setHitClass(jobClass, hitClass);
33cacheNode.setMissClass(jobClass, missClass);
34
35cacheNode.setRetrievalSystem(jobClass, missClass, queues);
36
37% Per-item routing over [IS(1), Queue1(2), Queue2(3), Cache(4)], applied via the
38% per-item routing methods. Index nQ+1 (last row/col) is the cache; row=from, col=to.
39routingMatrices = { ...
40 [0.00, 0.50, 0.00, 0.50; % from IS
41 0.00, 0.00, 0.70, 0.30; % from Queue1
42 0.00, 0.00, 0.00, 1.00; % from Queue2
43 0.70, 0.30, 0.00, 0.00]; % from Cache
44 [0.00, 0.30, 0.00, 0.70;
45 0.00, 0.00, 0.50, 0.50;
46 0.00, 0.00, 0.00, 1.00;
47 0.20, 0.80, 0.00, 0.00];
48 [0.00, 0.60, 0.00, 0.40;
49 0.00, 0.00, 0.40, 0.60;
50 0.00, 0.00, 0.00, 1.00;
51 0.50, 0.50, 0.00, 0.00]};
52
53nQ = numel(queues);
54for item = 1:n
55 R = routingMatrices{item};
56 for a = 1:nQ
57 cacheNode.setItemRoutingProb(jobClass, item, cacheNode, queues{a}, R(nQ+1, a)); % cache -> queue a
58 cacheNode.setItemRoutingProb(jobClass, item, queues{a}, cacheNode, R(a, nQ+1)); % queue a -> cache
59 for b = 1:nQ
60 cacheNode.setItemRoutingProb(jobClass, item, queues{a}, queues{b}, R(a, b));
61 end
62 end
63end
64
65P = model.initRoutingMatrix();
66P{jobClass, jobClass}(source, cacheNode) = 1.0;
67P{hitClass, hitClass}(cacheNode, sink) = 1.0;
68P{missClass, missClass}(cacheNode, sink) = 1.0;
69model.link(P);
70
71% Simulation
72SSA(model, 'samples', 5000, 'method', 'serial', 'seed', 1).getAvgCacheTable
73LDES(model, 'samples', 1e6, 'seed', 1).getAvgCacheTable
74
75% Analytical
76MVA(model).getAvgCacheTable
77NC(model).getAvgCacheTable
78
79% Item-level cache occupancy
80MVA(model).getAvgItemTable
81NC(model).getAvgItemTable
Definition Station.m:245