mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-03-07 08:37:30 +01:00
@@ -271,6 +271,8 @@ For release specific notes visit the [ClusterCockpit Documentation](https://clus
|
|||||||
|
|
||||||
## Known issues
|
## Known issues
|
||||||
|
|
||||||
|
- The new dynamic memory management is not bullet proof yet across restarts. We
|
||||||
|
will fix that in a subsequent patch release
|
||||||
- Currently energy footprint metrics of type energy are ignored for calculating
|
- Currently energy footprint metrics of type energy are ignored for calculating
|
||||||
total energy.
|
total energy.
|
||||||
- With energy footprint metrics of type power the unit is ignored and it is
|
- With energy footprint metrics of type power the unit is ignored and it is
|
||||||
|
|||||||
@@ -395,6 +395,7 @@ func runServer(ctx context.Context) error {
|
|||||||
|
|
||||||
// Set GC percent if not configured
|
// Set GC percent if not configured
|
||||||
if os.Getenv(envGOGC) == "" {
|
if os.Getenv(envGOGC) == "" {
|
||||||
|
// trigger GC when heap grows 15% above the previous live set
|
||||||
debug.SetGCPercent(15)
|
debug.SetGCPercent(15)
|
||||||
}
|
}
|
||||||
runtime.SystemdNotify(true, "running")
|
runtime.SystemdNotify(true, "running")
|
||||||
|
|||||||
@@ -234,8 +234,6 @@
|
|||||||
cluster={clusterInfos.find((c) => c.name == job.cluster)}
|
cluster={clusterInfos.find((c) => c.name == job.cluster)}
|
||||||
subCluster={job.subCluster}
|
subCluster={job.subCluster}
|
||||||
isShared={job.shared != "none"}
|
isShared={job.shared != "none"}
|
||||||
numhwthreads={job.numHWThreads}
|
|
||||||
numaccs={job.numAcc}
|
|
||||||
zoomState={zoomStates[metric.data.name] || null}
|
zoomState={zoomStates[metric.data.name] || null}
|
||||||
thresholdState={thresholdStates[metric.data.name] || null}
|
thresholdState={thresholdStates[metric.data.name] || null}
|
||||||
{plotSync}
|
{plotSync}
|
||||||
|
|||||||
@@ -43,8 +43,6 @@
|
|||||||
subCluster,
|
subCluster,
|
||||||
isShared = false,
|
isShared = false,
|
||||||
forNode = false,
|
forNode = false,
|
||||||
numhwthreads = 0,
|
|
||||||
numaccs = 0,
|
|
||||||
zoomState = null,
|
zoomState = null,
|
||||||
thresholdState = null,
|
thresholdState = null,
|
||||||
extendedLegendData = null,
|
extendedLegendData = null,
|
||||||
@@ -83,9 +81,7 @@
|
|||||||
const thresholds = $derived(findJobAggregationThresholds(
|
const thresholds = $derived(findJobAggregationThresholds(
|
||||||
subClusterTopology,
|
subClusterTopology,
|
||||||
metricConfig,
|
metricConfig,
|
||||||
scope,
|
scope
|
||||||
numhwthreads,
|
|
||||||
numaccs
|
|
||||||
));
|
));
|
||||||
const longestSeries = $derived.by(() => {
|
const longestSeries = $derived.by(() => {
|
||||||
if (useStatsSeries) {
|
if (useStatsSeries) {
|
||||||
@@ -276,9 +272,7 @@
|
|||||||
function findJobAggregationThresholds(
|
function findJobAggregationThresholds(
|
||||||
subClusterTopology,
|
subClusterTopology,
|
||||||
metricConfig,
|
metricConfig,
|
||||||
scope,
|
scope
|
||||||
numhwthreads,
|
|
||||||
numaccs
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
if (!subClusterTopology || !metricConfig || !scope) {
|
if (!subClusterTopology || !metricConfig || !scope) {
|
||||||
@@ -303,22 +297,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (metricConfig?.aggregation == "sum") {
|
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;
|
let divisor;
|
||||||
// Exclusive: Fraction = 1; Shared: Fraction > 1
|
if (scope == 'node') divisor = 1 // Node Scope: Always return unscaled (Maximum Scope)
|
||||||
if (scope == 'node') divisor = fraction;
|
// Partial Scopes: Get from Topologies
|
||||||
// Cap divisor at number of available sockets or domains
|
else if (scope == 'socket') divisor = subClusterTopology?.socket?.length || 1;
|
||||||
else if (scope == 'socket') divisor = (fraction < subClusterTopology.socket.length) ? subClusterTopology.socket.length : fraction;
|
else if (scope == "memoryDomain") divisor = subClusterTopology?.memoryDomain?.length || 1;
|
||||||
else if (scope == "memoryDomain") divisor = (fraction < subClusterTopology.memoryDomain.length) ? subClusterTopology.socket.length : fraction;
|
else if (scope == "core") divisor = subClusterTopology?.core?.length || 1;
|
||||||
// Use Maximum Division for Smallest Scopes
|
else if (scope == "hwthread") divisor = subClusterTopology?.node?.length || 1;
|
||||||
else if (scope == "core") divisor = subClusterTopology.core.length;
|
else if (scope == "accelerator") divisor = subClusterTopology?.accelerators?.length || 1;
|
||||||
else if (scope == "hwthread") divisor = subClusterTopology.core.length; // alt. name for core
|
|
||||||
else if (scope == "accelerator") divisor = subClusterTopology.accelerators.length;
|
|
||||||
else {
|
else {
|
||||||
console.log('Unknown scope, return default aggregation thresholds for sum', scope)
|
console.log('Unknown scope, return default aggregation thresholds for sum', scope)
|
||||||
divisor = 1;
|
divisor = 1;
|
||||||
|
|||||||
@@ -178,8 +178,6 @@
|
|||||||
timestep={selectedData.timestep}
|
timestep={selectedData.timestep}
|
||||||
scope={selectedScope}
|
scope={selectedScope}
|
||||||
metric={metricName}
|
metric={metricName}
|
||||||
numaccs={job.numAcc}
|
|
||||||
numhwthreads={job.numHWThreads}
|
|
||||||
series={selectedSeries}
|
series={selectedSeries}
|
||||||
{isShared}
|
{isShared}
|
||||||
{zoomState}
|
{zoomState}
|
||||||
@@ -194,8 +192,6 @@
|
|||||||
timestep={selectedData.timestep}
|
timestep={selectedData.timestep}
|
||||||
scope={selectedScope}
|
scope={selectedScope}
|
||||||
metric={metricName}
|
metric={metricName}
|
||||||
numaccs={job.numAcc}
|
|
||||||
numhwthreads={job.numHWThreads}
|
|
||||||
series={selectedSeries}
|
series={selectedSeries}
|
||||||
{isShared}
|
{isShared}
|
||||||
{zoomState}
|
{zoomState}
|
||||||
|
|||||||
Reference in New Issue
Block a user