1function [simElem, simDoc] = saveMetrics(self, simElem, simDoc)
2% [SIMELEM, SIMDOC] = SAVEMETRICS(SIMELEM, SIMDOC)
4% Copyright (c) 2012-2026, Imperial College London
7if isempty(self.handles)
8 self.model.getAvgHandles(); % Create handles on model
9 self.handles = self.model.handles; % Copy to JMTIO
11handles = self.handles;
12[simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.Q);
13[simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.U);
14[simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.R);
15[simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.T);
16[simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.A);
17%[simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.W);
18% JMT ResidT
is inconsistently defined with LINE's on some
19% difficult class switching cases, hence we recompute it at the
20% level of the NetworkSolver class to preserve consistency.
22% Save tardiness metrics
23if isfield(handles,'Tard') && ~isempty(handles.Tard)
24 [simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.Tard);
26if isfield(handles,'SysTard') && ~isempty(handles.SysTard)
27 [simElem, simDoc] = saveMetric(self, simElem, simDoc, handles.SysTard);
30% Save FCR (blocking region) metrics
31[simElem, simDoc] = saveFCRMetrics(self, simElem, simDoc);
33% Save Cache Hit Rate metrics for Cache
nodes
34[simElem, simDoc] = saveCacheHitRateMetrics(self, simElem, simDoc);
37function [simElem, simDoc] = saveCacheHitRateMetrics(self, simElem, simDoc)
38% Request Cache Hit Rate metrics for each Cache node
43 if sn.nodetype(ind) == NodeType.Cache
44 nodeName = sn.nodenames{ind};
45 hitclass = sn.nodeparam{ind}.hitclass;
47 % Request Cache Hit Rate
for each class that has a hit class defined
48 for r = 1:length(hitclass)
50 hitClassName = sn.classnames{hitclass(r)};
52 performanceNode = simDoc.createElement(
'measure');
53 performanceNode.setAttribute(
'alpha', num2str(1 - self.simConfInt, 2));
54 performanceNode.setAttribute(
'name', sprintf(
'CacheHitRate_%s_%s', nodeName, hitClassName));
55 performanceNode.setAttribute(
'nodeType',
'station');
56 performanceNode.setAttribute(
'precision', num2str(self.simMaxRelErr, 2));
57 performanceNode.setAttribute(
'referenceNode', nodeName);
58 performanceNode.setAttribute(
'referenceUserClass', hitClassName);
59 performanceNode.setAttribute(
'type',
'Cache Hit Rate');
60 performanceNode.setAttribute(
'verbose',
'false');
61 simElem.appendChild(performanceNode);