LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches

Focused layered performance model by aggregation (FSPT). More...

#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstddef>
#include <functional>
#include <limits>
#include <map>
#include <set>
#include <stdexcept>
#include <string>
#include <utility>
#include <vector>
#include "line/lang/lang_types.h"
#include "line/lang/lqn/lqn_reader.h"
#include "line/lang/lqn/lqn_struct.h"
#include "line/solvers/ln/solver_ln.h"
Include dependency graph for lqn_focus.h:

Go to the source code of this file.

Classes

struct  line::lqn::LqnFocusOptions
 Options of lqn_focus, as the MATLAB name/value pairs. More...
struct  line::lqn::LqnFocusGroup
 One dependency group and its aggregate task. More...
struct  line::lqn::LqnFocusRetained
 OM and FM metrics of the retained tasks, entries and hosts. More...
struct  line::lqn::LqnFocusResult
 Focused model and diagnostics, fields named as the MATLAB info struct. More...
struct  line::lqn::focus_detail::Call
struct  line::lqn::focus_detail::Inv
struct  line::lqn::focus_detail::Om
struct  line::lqn::focus_detail::Sat

Namespaces

namespace  line
 Conservation laws of a layered queueing network, enumerated from its structure.
namespace  line::lqn
namespace  line::lqn::focus_detail

Functions

double line::lqn::focus_detail::nan_ ()
bool line::lqn::focus_detail::is_prio (SchedStrategy s)
double line::lqn::focus_detail::dmean (const Distrib< double > &d)
bool line::lqn::focus_detail::has_time (const Distrib< double > &d)
void line::lqn::focus_detail::fail (const std::string &msg)
std::size_t line::lqn::focus_detail::index_of (const std::vector< std::string > &v, const std::string &s)
Inv line::lqn::focus_detail::inventory (const LqnModel< double > &m)
double line::lqn::focus_detail::z (double v)
Om line::lqn::focus_detail::solve (const LqnModel< double > &m, const LqnFocusOptions &opt, const Inv &inv)
Sat line::lqn::focus_detail::saturation (const Inv &inv, const Om &om)
void line::lqn::focus_detail::closure (const Inv &inv, std::vector< bool > &PT, std::vector< bool > &PH)
std::string line::lqn::focus_detail::unique_name (std::set< std::string > &all, std::string nm)
std::string line::lqn::focus_detail::map_name (int g, const std::string &name, const std::vector< LqnFocusGroup > &grp, bool task)
LqnFocusResult line::lqn::focus_detail::build (const LqnModel< double > &model, const Inv &inv, const Om &om, const Sat &sat, std::vector< bool > PT, std::vector< bool > PH, const LqnFocusOptions &opt, bool validate)
LqnFocusResult line::lqn::lqn_focus (const LqnModel< double > &model, const LqnFocusOptions &opt=LqnFocusOptions())
 Focused model of a layered network by FSPT aggregation.

Detailed Description

Focused layered performance model by aggregation (FSPT).

Port of matlab/src/api/lqn/lqn_focus.m, on the raw model LqnModel<double> (the form LqnBuilder and the .lqnx reader produce). Reduces a layered network to a focused model (FM) that keeps a set of preserved tasks and hosts as they are and replaces every other task by one aggregate task per dependency group, following Islam, Petriu and Woodside, "Focused Layered Performance Modelling by Aggregation", ACM TOMPECS 7(2-4), 2022.

The original model (OM) is solved once with SolverLN to obtain the saturations S = U/m of every task and host. The preserved set is chosen by the sat (forced elements plus every resource with S > Smax/r), acc (forced elements plus the i most saturated resources, i grown until the reference-task throughput error is below x) or manual (forced elements, the most saturated resource and preserve) strategy. A preserved task preserves its host and a preserved host all of its tasks. Tasks using features FSPT does not aggregate (priorities, AND forks/joins, second phases, asynchronous calls, forwarding, open arrivals, replication, fan-in or fan-out, setup/delay-off and activity think times) are always preserved.

Non-preserved tasks with the same set Pi(T) of preserved tasks depending on them form a group, replaced by one aggregate task with one entry and one activity (eqs. 7-11). A host shared by several groups is split into shadow hosts of speed s_H (1 - saturation by the other groups) (eq. 15), or preserved when that capacity is not positive. Aggregate processors have unit speed, the aggregate speed of eq. 9 being folded into the aggregate demand.

Definition in file lqn_focus.h.