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)
5serviceRates = [2.0, 2.0, 2.0; % IS queue per-item rates
6 3.0, 3.0, 3.0; % Queue 1 per-item rates
7 3.0, 3.0, 3.0]; % Queue 2 per-item rates
8
9model = Network('DelayedHits');
10
11n = size(serviceRates, 2); % number of items
12capacity = [2]; % per-level cache capacity
13
14source = Source(model, 'Source');
15cacheNode = Cache(model, 'Cache', n, capacity, ReplacementStrategy.FIFO);
16isQueue = Queue(model, 'IS Queue', SchedStrategy.INF);
17queue1 = Queue(model, 'Queue 1', SchedStrategy.FCFS);
18queue2 = Queue(model, 'Queue 2', SchedStrategy.FCFS);
19queues = {isQueue, queue1, queue2};
20sink = Sink(model, 'Sink');
21
22jobClass = OpenClass(model, 'InitClass', 0);
23hitClass = OpenClass(model, 'HitClass', 0);
24missClass = OpenClass(model, 'MissClass', 0);
25
26source.setArrival(jobClass, Exp(1));
27
28pAccess = DiscreteSampler(accessProb);
29cacheNode.setRead(jobClass, pAccess);
30cacheNode.setHitClass(jobClass, hitClass);
31cacheNode.setMissClass(jobClass, missClass);
32
33% Per-item routing matrices over [IS(1), Queue1(2), Queue2(3), Cache(4)].
34routingMatrices = { ...
35 [0.00, 0.50, 0.00, 0.50; % from IS
36 0.00, 0.00, 0.70, 0.30; % from Queue1
37 0.00, 0.00, 0.00, 1.00; % from Queue2
38 0.70, 0.30, 0.00, 0.00]; % from Cache
39 [0.00, 0.30, 0.00, 0.70;
40 0.00, 0.00, 0.50, 0.50;
41 0.00, 0.00, 0.00, 1.00;
42 0.20, 0.80, 0.00, 0.00];
43 [0.00, 0.60, 0.00, 0.40;
44 0.00, 0.00, 0.40, 0.60;
45 0.00, 0.00, 0.00, 1.00;
46 0.50, 0.50, 0.00, 0.00]};
47
48cacheNode.setRetrievalSystem(jobClass, missClass, queues, serviceRates, routingMatrices);
49
50P = model.initRoutingMatrix();
51P{jobClass, jobClass}(source, cacheNode) = 1.0;
52P{hitClass, hitClass}(cacheNode, sink) = 1.0;
53P{missClass, missClass}(cacheNode, sink) = 1.0;
54model.link(P);
55
56% Simulation
57SSA(model, 'samples', 5000, 'method', 'serial', 'seed', 1).getAvgCacheTable
58LDES(model, 'samples', 1e6, 'seed', 1).getAvgCacheTable
59
60% Analytical
61MVA(model).getAvgCacheTable
62NC(model).getAvgCacheTable
63
64% Item-level cache occupancy
65MVA(model).getAvgItemTable
66NC(model).getAvgItemTable