3% h-LRU / LRU(m) replacement: h LRU lists of capacities m(1..h); a miss
4% inserts
the item at
the head of list 1, a hit in list l exchanges
the item
5% with
the tail of list l+1. Exact in CTMC; simulated in SSA/LDES; MVA uses
6%
the characteristic-time (TTL) approximation of Gast and Van Houdt
7% (SIGMETRICS 2015), which reduces to
the Che approximation
for h=1.
9model = Network(
'model');
11n = 6; % number of items
12m = [2 1]; % list capacities: list 1 holds 2 items, list 2 holds 1
14source = Source(model,
'Source');
15cacheNode = Cache(model,
'Cache', n, m, ReplacementStrategy.HLRU);
16sink = Sink(model,
'Sink');
18jobClass = OpenClass(model,
'InitClass', 0);
19hitClass = OpenClass(model,
'HitClass', 0);
20missClass = OpenClass(model,
'MissClass', 0);
22source.setArrival(jobClass, Exp(1));
24pAccess = Zipf(1.2, n); % Zipf-like item references
25cacheNode.setRead(jobClass, pAccess);
27cacheNode.setHitClass(jobClass, hitClass);
28cacheNode.setMissClass(jobClass, missClass);
30P = model.initRoutingMatrix;
31P{jobClass, jobClass}(source, cacheNode) = 1.0;
32P{hitClass, hitClass}(cacheNode, sink) = 1.0;
33P{missClass, missClass}(cacheNode, sink) = 1.0;
36solver{1} = CTMC(model,
'keep',
false,
'cutoff',1); % exact
37AvgTable{1} = solver{1}.getAvgNodeTable; AvgTable{1}
40solver{2} = MVA(model); % TTL approximation
41AvgTable{2} = solver{2}.getAvgNodeTable; AvgTable{2}
44solver{3} = SSA(model,
'samples',1e4,
'method',
'serial',
'seed',23000);
45AvgTable{3} = solver{3}.getAvgNodeTable; AvgTable{3}