![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
SolverLQNS: the layered model solved by the external lqns / lqsim binaries. More...
#include "line/util/line_console.h"#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <ctime>#include <fstream>#include <iterator>#include <limits>#include <map>#include <memory>#include <string>#include <utility>#include <vector>#include <dirent.h>#include <sys/stat.h>#include <unistd.h>#include "json.hpp"#include "line/lang/lqn/lqn_reader.h"#include "line/lang/lqn/lqn_writer.h"#include "line/solvers/wrappers/lqns/lqns_probe.h"#include "line/util/error.h"#include "line/util/http.h"#include "line/util/subprocess.h"#include "line/util/tempdir.h"#include "line/util/xml.h"Go to the source code of this file.
Classes | |
| struct | line::lqns::LqnsOptions |
| Knobs of the wrapper, the subset of SolverOptions that reaches lqns. More... | |
| struct | line::lqns::LqnsRawAvg |
| Everything the .lqxo carries, indexed as the struct is. More... | |
| struct | line::lqns::LqnsSolution< T > |
| The six measures, on the element index space, with a defined mask each. More... | |
| class | line::lqns::SolverLQNS< T > |
| The layered model solved by lqns or lqsim. More... | |
Namespaces | |
| namespace | line |
| namespace | line::lqns |
SolverLQNS: the layered model solved by the external lqns / lqsim binaries.
Port of matlab/src/solvers/wrappers/LQNS/@SolverLQNS (SolverLQNS.m, runAnalyzer.m, parseXMLResults.m, getEnsembleAvg.m, runRemoteLQNS.m), of jline.solvers.wrappers.lqns.SolverLQNS and of the native-Python twin. It is a WRAPPER, not an engine: nothing here computes a queueing result. The model is written as .lqnx (lqn_writer.h), a binary is run over it, and the .lqxo it leaves behind is read back.
LINE SHIPS NO LQNS BINARY. Its licence is an evaluation agreement that forbids redistribution, so the binary is one the user installed; a missing one is reported by name, with the two ways to obtain an answer anyway (an install, or a host already running the REST service), rather than as a failed exec.
WHAT THE COLUMNS MEAN, and why they are not the ones lqns prints. The reference's getEnsembleAvg permutes them so that a layered result reads the same whichever solver produced it:
QLen <- the element's UTILIZATION (a task's utilization IS its mean number in service) Util <- its PROCESSOR utilization: lqns and SolverLN both sum it over the host's servers, so no rescaling applies. Verbatim for hosts, tasks and activities; for an entry it is aggregated over the activity graph, which lqns itself reports as 0 in the activity-graph form RespT <- its PHASE 1 SERVICE TIME Tput <- its throughput ResidT, ArvR: lqns computes neither, so they stay undefined rather than being filled with a zero that would read as a computed value
THE .lqxo IS THE ONLY OUTPUT READ. lqns also prints a human-readable report; parsing that instead would tie the port to a print format that changes between releases, and it carries fewer digits than the XML.
Definition in file solver_lqns.h.