1function updateLayers(self, it)
3ensemble = self.ensemble;
5thinktproc = self.thinktproc;
6servtproc = self.servtproc;
7thinkt_classes_updmap = self.thinkt_classes_updmap;
8arvproc_classes_updmap = self.arvproc_classes_updmap;
9tputproc = self.tputproc;
10call_classes_updmap = self.call_classes_updmap;
11callservtproc = self.callservtproc;
13% reassign service times
14for r=1:size(thinkt_classes_updmap,1)
15 if mod(it, 2)==1 % elevator
16 ri = size(thinkt_classes_updmap,1) - r + 1;
20 idx = thinkt_classes_updmap(ri,1);
21 aidx = thinkt_classes_updmap(ri,2);
22 nodeidx = thinkt_classes_updmap(ri,3);
23 classidx = thinkt_classes_updmap(ri,4);
24 class = ensemble{idxhash(thinkt_classes_updmap(ri,1))}.classes{classidx};
25 % here update the number of jobs in the task chain
26 if aidx <= lqn.tshift + lqn.ntasks
27 % aidx here
is actually set to tidx in buildLayersRecursive
29 case JobClassType.CLOSED
30 if self.options.config.interlocking
31 class.population = self.njobs(aidx,idx);
35 node = ensemble{idxhash(idx)}.nodes{nodeidx};
36 if nodeidx == ensemble{idxhash(idx)}.attribute.clientIdx
37 if lqn.type(aidx) == LayeredNetworkElement.TASK
38 if lqn.sched(aidx) ~= SchedStrategy.REF
39 if ~isempty(thinktproc{aidx}) %
this is empty
for isolated components, which can be ignored
40 node.setService(
class, thinktproc{aidx});
43 node.setService(
class, servtproc{aidx});
46 node.setService(
class, servtproc{aidx});
48 else % server replica (any of them)
49 node.setService(
class, servtproc{aidx});
53% reassign arrival rates
54for r=1:size(arvproc_classes_updmap,1)
56 if mod(it, 2)==1 % elevator
57 ri = size(arvproc_classes_updmap,1) - r + 1;
61 idx = arvproc_classes_updmap(ri,1);
62 eidx_or_cidx = arvproc_classes_updmap(ri,2);
63 nodeidx = arvproc_classes_updmap(ri,3);
64 classidx = arvproc_classes_updmap(ri,4);
65 class = ensemble{idxhash(arvproc_classes_updmap(ri,1))}.classes{classidx};
66 node = ensemble{idxhash(idx)}.nodes{nodeidx};
68 if eidx_or_cidx < 0 % Entry-level arrival (negative index)
70 node.setArrival(
class, lqn.arrival{eidx});
71 else % Async call arrival (positive index)
73 node.setArrival(
class, tputproc{lqn.callpair(cidx,1)});
77% reassign call service time / response time
78for c=1:size(call_classes_updmap,1)
79 if mod(it, 2)==1 % elevator
80 ci = size(call_classes_updmap,1) - c + 1;
84 idx = call_classes_updmap(ci,1);
85 cidx = call_classes_updmap(ci,2);
86 nodeidx = call_classes_updmap(ci,3);
87 class = ensemble{idxhash(call_classes_updmap(ci,1))}.classes{call_classes_updmap(ci,4)};
88 node = ensemble{idxhash(idx)}.nodes{nodeidx};
89 if nodeidx == ensemble{idxhash(idx)}.attribute.clientIdx % client
90 node.setService(
class, callservtproc{cidx});
91 else % server replica (any of them)
92 eidx = lqn.callpair(cidx,2);
93 node.setService(
class, servtproc{eidx});
97% reassign activity think times
98actthinkt_classes_updmap = self.actthinkt_classes_updmap;
99for r=1:size(actthinkt_classes_updmap,1)
100 if mod(it, 2)==1 % elevator
101 ri = size(actthinkt_classes_updmap,1) - r + 1;
105 idx = actthinkt_classes_updmap(ri,1);
106 aidx = actthinkt_classes_updmap(ri,2);
107 nodeidx = actthinkt_classes_updmap(ri,3);
108 classidx = actthinkt_classes_updmap(ri,4);
109 class = ensemble{idxhash(actthinkt_classes_updmap(ri,1))}.classes{classidx};
110 node = ensemble{idxhash(idx)}.nodes{nodeidx};
111 % Activity think-time
is at client delay node
112 if ~isempty(lqn.actthink{aidx})
113 node.setService(class, lqn.actthink{aidx});