mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-03-07 08:37:30 +01:00
simplify and fix adaptive threshold logic
This commit is contained in:
@@ -234,8 +234,6 @@
|
||||
cluster={clusterInfos.find((c) => c.name == job.cluster)}
|
||||
subCluster={job.subCluster}
|
||||
isShared={job.shared != "none"}
|
||||
numhwthreads={job.numHWThreads}
|
||||
numaccs={job.numAcc}
|
||||
zoomState={zoomStates[metric.data.name] || null}
|
||||
thresholdState={thresholdStates[metric.data.name] || null}
|
||||
{plotSync}
|
||||
|
||||
@@ -43,8 +43,6 @@
|
||||
subCluster,
|
||||
isShared = false,
|
||||
forNode = false,
|
||||
numhwthreads = 0,
|
||||
numaccs = 0,
|
||||
zoomState = null,
|
||||
thresholdState = null,
|
||||
extendedLegendData = null,
|
||||
@@ -83,9 +81,7 @@
|
||||
const thresholds = $derived(findJobAggregationThresholds(
|
||||
subClusterTopology,
|
||||
metricConfig,
|
||||
scope,
|
||||
numhwthreads,
|
||||
numaccs
|
||||
scope
|
||||
));
|
||||
const longestSeries = $derived.by(() => {
|
||||
if (useStatsSeries) {
|
||||
@@ -276,9 +272,7 @@
|
||||
function findJobAggregationThresholds(
|
||||
subClusterTopology,
|
||||
metricConfig,
|
||||
scope,
|
||||
numhwthreads,
|
||||
numaccs
|
||||
scope
|
||||
) {
|
||||
|
||||
if (!subClusterTopology || !metricConfig || !scope) {
|
||||
@@ -303,21 +297,13 @@
|
||||
}
|
||||
|
||||
if (metricConfig?.aggregation == "sum") {
|
||||
// Scale Thresholds
|
||||
let fraction;
|
||||
if (numaccs > 0) fraction = subClusterTopology.accelerators.length / numaccs;
|
||||
else if (numhwthreads > 0) fraction = subClusterTopology.core.length / numhwthreads;
|
||||
else fraction = 1; // Fallback
|
||||
|
||||
let divisor;
|
||||
// Exclusive: Fraction = 1; Shared: Fraction > 1
|
||||
if (scope == 'node') divisor = fraction;
|
||||
// Cap divisor at number of available sockets or domains
|
||||
else if (scope == 'socket') divisor = (fraction < subClusterTopology.socket.length) ? subClusterTopology.socket.length : fraction;
|
||||
else if (scope == "memoryDomain") divisor = (fraction < subClusterTopology.memoryDomain.length) ? subClusterTopology.socket.length : fraction;
|
||||
// Use Maximum Division for Smallest Scopes
|
||||
if (scope == 'node') divisor = 1 // Node Scope: Always return unscaled (Maximum Scope)
|
||||
// Partial Scopes: Get from Topologies
|
||||
else if (scope == 'socket') divisor = subClusterTopology.socket.length;
|
||||
else if (scope == "memoryDomain") divisor = subClusterTopology.memoryDomain.length;
|
||||
else if (scope == "core") divisor = subClusterTopology.core.length;
|
||||
else if (scope == "hwthread") divisor = subClusterTopology.core.length; // alt. name for core
|
||||
else if (scope == "hwthread") divisor = subClusterTopology.node.length;
|
||||
else if (scope == "accelerator") divisor = subClusterTopology.accelerators.length;
|
||||
else {
|
||||
console.log('Unknown scope, return default aggregation thresholds for sum', scope)
|
||||
|
||||
@@ -178,8 +178,6 @@
|
||||
timestep={selectedData.timestep}
|
||||
scope={selectedScope}
|
||||
metric={metricName}
|
||||
numaccs={job.numAcc}
|
||||
numhwthreads={job.numHWThreads}
|
||||
series={selectedSeries}
|
||||
{isShared}
|
||||
{zoomState}
|
||||
@@ -194,8 +192,6 @@
|
||||
timestep={selectedData.timestep}
|
||||
scope={selectedScope}
|
||||
metric={metricName}
|
||||
numaccs={job.numAcc}
|
||||
numhwthreads={job.numHWThreads}
|
||||
series={selectedSeries}
|
||||
{isShared}
|
||||
{zoomState}
|
||||
|
||||
Reference in New Issue
Block a user