public final class NetworkPerformanceMetrics
extends java.lang.Object
Class implementing different network metrics (i.e. blocking, delay...)
On the one hand, it provides static methods to compute several performance metrics using classical formulae (i.e. Erlang-B or Kaufman-Roberts recursion for call blocking probability...).
On the other hand, given a complete network design, it allows to obtain several performance metrics such as average delay or blocking information, using the referred methods above.
Traffic and queuing delay model
We assume that each demand d is a traffic source of average load hd. The traffic in each link is the aggregation of the traffic from the demands routed through each link. We assume that the packet arrivals in each link are independent from each other, and follow a self-similar pattern with Hurst parameter H ∈ [0.5, 1). Roughly speaking, self-similarity in the traffic means that the traffic is bursty at different time scales. The higher H (H≈1), the more self-similar the traffic is. A Hurst parameter H=0.5 characterizes non self-similar traffic (i.e. Poisson traffic has a parameter H=0.5). There are many models to estimate queuing delays for queues fed with self-similar traffic. Estimations of queuing delays for queues fed with self-similar traffic are usually very complex, so we use the simple estimation in [1].
Constructor and Description |
---|
NetworkPerformanceMetrics(NetPlan netPlan,
java.util.Map<java.lang.String,java.lang.String> net2planParameters,
java.lang.String... paramValuePairs)
Default constructor.
|
Modifier and Type | Method and Description |
---|---|
static double |
erlangBLossProbability(int numberOfServers,
double load)
Returns the probability of call blocking in a
M/M/n/n queue system using the efficient implementation presented in [1]. |
double |
getBlockedTrafficPercentage()
Returns the percentage of blocked traffic.
|
double[] |
getDemandAverageBufferingDelayInSeconds()
Returns the average buffering delay for each demand.
|
double[] |
getDemandAveragePropagationDelayInSeconds()
Returns the average propagation delay for each demand.
|
double[] |
getDemandAverageTotalDelayInSeconds()
Returns the average end-to-end delay (propagation + transmission + buffering) for each demand.
|
double[] |
getDemandAverageTransmissionDelayInSeconds()
Returns the average transmission delay for each demand.
|
int[] |
getDemandBifurcationDegreeVector()
Returns the bifurcation degree for each demand.
|
double[] |
getLinkBufferingDelayInSecondsVector()
Returns the buffering (or queuing) delay for each link.
|
double |
getLinkMaximumUtilization()
Returns the maximum link utilization.
|
double[] |
getLinkPropagationDelayInSecondsVector()
Returns the propagation delay for each link.
|
double[] |
getLinkTotalDelayInSecondsVector()
Returns the total delay (propagation + transmission + buffering) for each link.
|
double[] |
getLinkTransmissionDelayInSecondsVector()
Returns the transmission delay for each link.
|
double |
getNetworkAverageDelay()
Returns the average network delay.
|
double |
getNetworkAveragePropagationDelay()
Returns the average network delay, considering only the propagation time.
|
double |
getNodePairAverageOfferedTrafficInErlangs()
Returns the average offered traffic between every node pair.
|
double |
getRouteAverageLength(double[] linkCostMetric)
Obtains the average route length among the current routes according to
certain link cost metric.
|
double[] |
getRouteBufferingDelayInSecondsVector()
Returns the buffering delay across the sequence of links for each route.
|
double[] |
getRoutePropagationDelayInSecondsVector()
Returns the propagation delay across the sequence of links for each route.
|
double[] |
getRouteTotalDelayInSecondsVector()
Returns the total delay across the sequence of links for each route.
|
double[] |
getRouteTransmissionDelayInSecondsVector()
Returns the transmission delay across the sequence of links for each route.
|
double[] |
getSRGDisjointnessPercentage()
Returns the percentage of SRG disjointness of traffic routes and
protection segments.
|
java.lang.String |
getSRGModel()
Indicates whether SRG definition follows one of the predefined models (per
node, per link...), or 'Mixed' otherwise (or 'None' if no SRGs are defined).
|
double[] |
getTrafficProtectionDegree()
Returns the statistics for protection degree carried traffic.
|
static int |
inverseErlangB(double gradeOfService,
double load)
Returns the number of servers (i.e. link capacity) to achieve a given grade of service (i.e. call blocking probability) under a given load in a
M/M/n/n queue system using the efficient implementation presented in [1]. |
boolean |
isBottleneckLink(int linkId)
Returns
true if the link is a bottleneck (i.e. it has the maximum
utilization among all links), otherwise false . |
boolean |
isRoutingBifurcated()
Returns
true if the routing is bifurcated, otherwise false . |
static double[] |
kaufmanRobertsRecursion(int u_e,
double[] h_p,
int[] s_p)
Computes the Kaufman-Roberts recursion for a multi-rate loss model system.
|
public NetworkPerformanceMetrics(NetPlan netPlan, java.util.Map<java.lang.String,java.lang.String> net2planParameters, java.lang.String... paramValuePairs)
Default constructor.
Parameters:
netPlan
- A network designnet2planParameters
- A key-value map with Net2Plan
-wide configuration optionsparamValuePairs
- Parameters to be passed to the class to tune its operation. An even number of String
is to be passed. For each String
pair, first String
must be the name of the parameter, second a String
with its value. If no name-value pairs are set, default values are usedpublic double getLinkMaximumUtilization()
public double[] getDemandAverageBufferingDelayInSeconds()
public double[] getDemandAveragePropagationDelayInSeconds()
public double[] getDemandAverageTotalDelayInSeconds()
public double[] getDemandAverageTransmissionDelayInSeconds()
public int[] getDemandBifurcationDegreeVector()
public double[] getLinkBufferingDelayInSecondsVector()
public double[] getLinkPropagationDelayInSecondsVector()
public double[] getLinkTotalDelayInSecondsVector()
public double[] getLinkTransmissionDelayInSecondsVector()
public double getNetworkAverageDelay()
public double getNetworkAveragePropagationDelay()
public double getRouteAverageLength(double[] linkCostMetric)
linkCostMetric
- Link cost metric (one per link)public double[] getRouteBufferingDelayInSecondsVector()
public double[] getRoutePropagationDelayInSecondsVector()
public double[] getRouteTotalDelayInSecondsVector()
public double[] getRouteTransmissionDelayInSecondsVector()
public boolean isBottleneckLink(int linkId)
true
if the link is a bottleneck (i.e. it has the maximum
utilization among all links), otherwise false
.linkId
- Link identifiertrue
if the link is a bottleneck, otherwise false
public boolean isRoutingBifurcated()
true
if the routing is bifurcated, otherwise false
.true
if at least one demand is bifurcated, otherwise false
public static double[] kaufmanRobertsRecursion(int u_e, double[] h_p, int[] s_p)
u_e
- Link capacity (in integer units). It must be greater or equal than zeroh_p
- Traffic volume vector. Each element is referred to a connection of type p
and must be greater than zeros_p
- Capacity units occupied in the link by each accepted connection of type p
. Each element must be greater or equal than onep
public static double erlangBLossProbability(int numberOfServers, double load)
M/M/n/n
queue system using the efficient implementation presented in [1].numberOfServers
- Number of servers (i.e. link capacity in integer units). It must be greater or equal than zeroload
- Traffic load (i.e. carried traffic by the link). It must be greater or equal than zero[1] S. Qiao, L. Qiao, "A Robust and Efficient Algorithm for Evaluating Erlang B Formula", Technical Report CAS98-03, McMaster University (Canada), October 1998
public static int inverseErlangB(double gradeOfService, double load)
M/M/n/n
queue system using the efficient implementation presented in [1].gradeOfService
- Grade of service (i.e. call blocking probability). It must be greater or equal than zeroload
- Traffic load (i.e. carried traffic by the link). It must be greater or equal than zero[1] S. Qiao, L. Qiao, "A Robust and Efficient Algorithm for Evaluating Erlang B Formula", Technical Report CAS98-03, McMaster University (Canada), October 1998
public double getBlockedTrafficPercentage()
public double[] getTrafficProtectionDegree()
Returns the statistics for protection degree carried traffic. Returned values are the following:
public double getNodePairAverageOfferedTrafficInErlangs()
public java.lang.String getSRGModel()
public double[] getSRGDisjointnessPercentage()