LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
getAvgHandles.m
1function [Q,U,R,T,A,W] = getAvgHandles(self)
2% [Q,U,R,T,A,W] = GETAVGHANDLES()
3% Get handles for mean performance metrics.
4%
5% Q(i,r): mean queue-length of class r at node i
6% U(i,r): mean utilization of class r at node i
7% R(i,r): mean response time of class r at node i (summed across visits)
8% T(i,r): mean throughput of class r at node i
9% A(i,r): mean arrival rate of class r at node i
10% W(i,r): mean residence time of class r at node i
11%
12% For tardiness metrics, use getAvgTardHandles() and getAvgSysTardHandles()
13
14% Copyright (c) 2012-2026, Imperial College London
15% All rights reserved.
16% Q = self.getAvgQLenHandles;
17% U = self.getAvgUtilHandles;
18% R = self.getAvgRespTHandles;
19% T = self.getAvgTputHandles;
20% A = self.getAvgArvRHandles;
21% W = self.getAvgResidTHandles;
22
23M = getNumberOfStations(self);
24K = getNumberOfClasses(self);
25classes = self.classes;
26stations = self.stations;
27
28isSource = false(M,1);
29isSink = false(M,1);
30hasServiceTunnel = false(M,1);
31isServiceDefined = true(M,K);
32for ist=1:M
33 isSource(ist) = isa(stations{ist},'Source');
34 isSink(ist) = isa(stations{ist},'Sink');
35 hasServiceTunnel(ist) = strcmpi(class(stations{ist}.server),'ServiceTunnel');
36 if ~hasServiceTunnel(ist)
37 for r=1:K
38 if isempty(stations{ist}.server.serviceProcess{r}) || stations{ist}.server.serviceProcess{r}{end}.isDisabled()
39 isServiceDefined(ist,r) = false;
40 end
41 end
42 end
43end
44
45% Identify cache hit/miss classes (these should not have their throughput disabled)
46isCacheClass = false(1,K);
47nodes = self.nodes;
48for i=1:length(nodes)
49 if isa(nodes{i},'Cache')
50 hitClasses = nodes{i}.server.hitClass;
51 missClasses = nodes{i}.server.missClass;
52 for r=1:length(hitClasses)
53 if hitClasses(r) > 0 && hitClasses(r) <= K
54 isCacheClass(hitClasses(r)) = true;
55 end
56 end
57 for r=1:length(missClasses)
58 if missClasses(r) > 0 && missClasses(r) <= K
59 isCacheClass(missClasses(r)) = true;
60 end
61 end
62 end
63end
64
65if isempty(self.handles) || ~isfield(self.handles,'Q')
66 Q = cell(M,K); % queue-length
67 for ist=1:M
68 for r=1:K
69 Qir = Metric(MetricType.QLen, classes{r}, stations{ist});
70 if isSource(ist)
71 Qir.disabled = true;
72 end
73 if isSink(ist)
74 Qir.disabled = true;
75 end
76 if ~hasServiceTunnel(ist)
77 if ~isServiceDefined(ist,r)
78 Qir.disabled = true;
79 end
80 end
81 Q{ist,r} = Qir;
82 end
83 end
84 self.handles.Q = Q;
85else
86 Q = self.handles.Q;
87end
88
89if isempty(self.handles) || ~isfield(self.handles,'U')
90 M = getNumberOfStations(self);
91 K = getNumberOfClasses(self);
92
93 U = cell(M,1); % utilizations
94 for ist=1:M
95 for r=1:K
96 Uir = Metric(MetricType.Util, classes{r}, stations{ist});
97 if isSource(ist)
98 Uir.disabled = true;
99 end
100 if isSink(ist)
101 Uir.disabled = true;
102 end
103 if isa(stations{ist},'Join') || isa(stations{ist},'Fork')
104 Uir.disabled = true;
105 end
106 if ~hasServiceTunnel(ist)
107 if ~isServiceDefined(ist,r)
108 Uir.disabled = true;
109 end
110 end
111 U{ist,r} = Uir;
112 end
113 end
114 self.handles.U = U;
115else
116 U = self.handles.U;
117end
118
119if isempty(self.handles) || ~isfield(self.handles,'R')
120 M = getNumberOfStations(self);
121 K = getNumberOfClasses(self);
122
123 R = cell(M,K); % response times
124 for ist=1:M
125 for r=1:K
126 Rir = Metric(MetricType.RespT, classes{r}, stations{ist});
127 if isSource(ist)
128 Rir.disabled = true;
129 end
130 if isSink(ist)
131 Rir.disabled = true;
132 end
133 if ~hasServiceTunnel(ist)
134 if ~isServiceDefined(ist,r)
135 Rir.disabled = true;
136 end
137 end
138 R{ist,r} = Rir;
139 end
140 end
141 self.handles.R = R;
142else
143 R = self.handles.R;
144end
145
146if isempty(self.handles) || ~isfield(self.handles,'W')
147 M = getNumberOfStations(self);
148 K = getNumberOfClasses(self);
149
150 W = cell(M,K); % response times
151 for ist=1:M
152 for r=1:K
153 Wir = Metric(MetricType.ResidT, classes{r}, stations{ist});
154 if isSource(ist)
155 Wir.disabled = true;
156 end
157 if isSink(ist)
158 Wir.disabled = true;
159 end
160 if ~hasServiceTunnel(ist)
161 if ~isServiceDefined(ist,r)
162 Wir.disabled = true;
163 end
164 end
165 W{ist,r} = Wir;
166 end
167 end
168 self.handles.W = W;
169else
170 W = self.handles.W;
171end
172
173
174if isempty(self.handles) || ~isfield(self.handles,'T')
175 M = getNumberOfStations(self);
176 K = getNumberOfClasses(self);
177
178 T = cell(1,K); % throughputs
179 for ist=1:M
180 for r=1:K
181 Tir = Metric(MetricType.Tput, classes{r}, stations{ist});
182 if ~hasServiceTunnel(ist)
183 % Don't disable throughput for cache hit/miss classes
184 if ~isServiceDefined(ist,r) && ~isCacheClass(r)
185 Tir.disabled = true;
186 end
187 end
188 T{ist,r} = Tir;
189 end
190 end
191 self.handles.T = T;
192else
193 T = self.handles.T;
194end
195
196if isempty(self.handles) || ~isfield(self.handles,'A')
197 M = getNumberOfStations(self);
198 K = getNumberOfClasses(self);
199
200 A = cell(1,K); % arrival rate
201 for ist=1:M
202 for r=1:K
203 Air = Metric(MetricType.ArvR, classes{r}, stations{ist});
204 if ~hasServiceTunnel(ist)
205 % Don't disable arrival rate for cache hit/miss classes
206 if ~isServiceDefined(ist,r) && ~isCacheClass(r)
207 Air.disabled = true;
208 end
209 end
210 A{ist,r} = Air;
211 end
212 end
213 self.handles.A = A;
214else
215 A = self.handles.A;
216end
217
218if isempty(self.handles) || ~isfield(self.handles,'Tard')
219 M = getNumberOfStations(self);
220 K = getNumberOfClasses(self);
221
222 Tard = cell(M,K); % tardiness
223 for ist=1:M
224 for r=1:K
225 Tardir = Metric(MetricType.Tard, classes{r}, stations{ist});
226 if isSource(ist)
227 Tardir.disabled = true;
228 end
229 if isSink(ist)
230 Tardir.disabled = true;
231 end
232 if ~hasServiceTunnel(ist)
233 if ~isServiceDefined(ist,r)
234 Tardir.disabled = true;
235 end
236 end
237 Tard{ist,r} = Tardir;
238 end
239 end
240 self.handles.Tard = Tard;
241else
242 Tard = self.handles.Tard;
243end
244
245if isempty(self.handles) || ~isfield(self.handles,'SysTard')
246 M = getNumberOfStations(self);
247 K = getNumberOfClasses(self);
248
249 SysTard = cell(1,K); % system tardiness
250 for r=1:K
251 SysTardr = Metric(MetricType.SysTard, classes{r}, []);
252 SysTard{1,r} = SysTardr;
253 end
254 self.handles.SysTard = SysTard;
255else
256 SysTard = self.handles.SysTard;
257end
258
259end
Definition mmt.m:92