> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scalacomputing.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Release 0.1.1292

> Simulator software 4.7.0 · Released 2026-08-26 · Supersedes release 0.1.1154 (simulator software 4.6.0)

Simulator software 4.7.0 · Released 2026-08-26 · Supersedes release 0.1.1154 (simulator software 4.6.0)

***

## At a glance

This release improves the accuracy of reported switch statistics, makes two previously fixed PFC and buffer-reporting parameters configurable, corrects ECMP path selection in multi-tier fabrics, adds pre-flight validation that catches misconfigured models before a simulation starts, and includes security updates.

Three items reported by customers are resolved in this release. See **Customer-reported issues** below.

| Component | Previous | This release |
| - | - | - |
| Platform | 0.1.1154 | **0.1.1292** |
| Simulator software | 4.6.0 | **4.7.0** |
| ScalaSwitch model | 3.5.1 | **3.6.0** |

> **Please read *Changes that affect results* before comparing simulations run on this release against earlier ones.** Three changes in this release alter reported values or path selection.

***

## Customer-reported issues resolved

### Transmitted and received byte totals disagreed in the `nd-stats` summary

Customers reported that `totalBytesTxGb` and `totalBytesRxGb` did not match for the same simulation, even when packet counts were identical and no packets were dropped.

This was a reporting error, not a simulation error. Switches recorded transmitted bytes before the ethernet header and frame check sequence were added, so each forwarded frame was counted 18 bytes short — while the receiving end recorded the full on-wire size. The counts now agree exactly.

**No change to simulated behaviour.** Only the reported byte totals change. Transmitted-byte figures in this release will be slightly higher than the same run on 4.6.0, and are now correct.

### `BufferStatsReportInterval` could not be changed

The interval at which internal buffer statistics are reported was hidden and fixed at 1 ms. It is now exposed as a configurable ScalaSwitch attribute and included in the shipped default templates. The default remains 1 ms, so existing configurations are unaffected.

### PFC resume threshold could not be configured

The PFC resume (Xon) threshold had no configurable entry, so it silently used an internal default of 700,000 bytes and could not be set through the platform.

It is now exposed as **`StaticPoolXonThreshold`**, defaulting to **300 KB**, and is included in the shipped default templates alongside `StaticPoolXoffThreshold`.

> **Note the change in effective behaviour.** On earlier releases the resume threshold was effectively 700,000 bytes. Configurations created from the updated templates will use 300 KB, which widens the hysteresis band between pause and resume. If you need the previous behaviour, set `StaticPoolXonThreshold` explicitly.

***

## Changes that affect results

Three changes in this release alter reported values or simulated path selection. Simulations run before and after this release are not directly comparable without accounting for them.

### 1. ECMP path selection — default changed

Investigation of large three-tier fabric runs found that per-switch hash salting, which exists to prevent adjacent ECMP tiers from selecting correlated paths, was not working. The measured effect at 4,096 ranks was severe: fabric switches were sending over a single one of their sixteen wired spine uplinks, leaving the rest of the spine layer idle at low mean utilisation, with no packets lost. This is ECMP polarization, and it makes a fabric look far more capable than it is under real load.

`crc32WithSalt` now correctly de-correlates adjacent tiers, and **the default offered for `EcmpHashMethod` when a configuration is created has moved from `crc32` to `crc32WithSalt`.**

Three things to be aware of:

* **This default applies to newly created configurations.** It is not a fallback. A configuration that does not specify `EcmpHashMethod` at all still uses the simulator's own built-in method and will still polarize. **To get the de-correlating behaviour, set the attribute explicitly.**
* **IPv4 only.** IPv6 path selection supports `hash`, `hashWithSalt`, `dpr` and `dprWithFallback`. For IPv6 topologies, select `hashWithSalt` explicitly.
* **Older configurations may reject the value.** A configuration already at workload version 2.0.1 may carry a stored option list that predates the crc32 methods, in which case validation reports that `crc32WithSalt` is not a valid option. Re-running the workload upgrade from a pre-2.0.1 revision restores the full option list.

Expect meaningfully different utilisation, queueing and completion-time results on multi-tier fabrics once this method is selected.

### 2. Transmitted byte totals now include framing

See **Customer-reported issues** above. Reported transmitted-byte figures increase; simulated behaviour does not change.

### 3. Two statistics reports had misaligned columns

An audit of every CSV produced across a large PFC/DCQCN configuration study and its follow-up — 7,557 files and over 2.5 million data rows — found two report types emitting values that did not line up with the headers they declared. The other twenty-two report types were correct.

In the affected reports the leading columns aligned and the misplaced values were plausible, so the problem was not visible on inspection. **Any analysis that read those two reports by column name should be re-checked against results produced on this release.**

The reporting layer now enforces that a writer emits exactly as many values as its schema declares, so this class of error cannot recur silently.

***

## New in this release

### ScalaSwitch model 3.6.0

The switch model moves to 3.6.0. Attributes that a customer needs in order to control PFC flow control and buffer-statistics reporting are now exposed; attributes that could not affect a result have been hidden to reduce confusion.

**Now configurable:**

| Attribute | Default | Purpose |
| - | - | - |
| `StaticPoolXonThreshold` | 300 KB | PFC resume threshold. Ingress occupancy per port and pool at or below which, once port headroom has drained, a resume frame is sent upstream. Should be at or below `StaticPoolXoffThreshold`; the gap between the two is the flow-control hysteresis band. |
| `BufferStatsReportInterval` | 1 ms | Cadence at which internal buffer statistics are reported. |

**Now hidden**, because both are read only inside the automatic PFC configuration path, whose gate is itself off — they were visible controls that could not change any result:

* `HdrmAllocSfMgn`
* `XonOffset`

Descriptions across the switch model have also been corrected, most notably for `EcmpHashMethod`, which now explains which methods de-correlate adjacent tiers and which do not.

### Pre-flight validation for ScalaSwitch and ScalaRoceNic

Fourteen new configuration checks run before a simulation starts, covering shared buffer management, ECN handling and packet trimming on ScalaSwitch, and ingress/egress buffer management and ECN handling on ScalaRoceNic.

Checks are split into two classes:

* **Blocking** — vector length and non-numeric token errors, headroom exceeding available buffer, and an all-zero pool allocation vector. These stop the simulation before it starts.
* **Advisory** — XOFF pool capacity, ECN threshold ordering, PFC token strictness and ECN rate bounds. These are reported but do not block.

Several of these conditions previously caused a simulation to abort partway through, or to index out of bounds with no clear diagnostic. They are now reported up front with a specific message.

> **A configuration that ran on 4.6.0 may now be rejected before it starts.** That is intentional — the configuration was already invalid, and the failure now arrives immediately with a clear reason rather than partway through a long run. If a previously working configuration is rejected, the message identifies the attribute at fault.

***

## Model catalog changes

* **ScalaSwitch 3.6.0** is published, with the attribute changes described above. The shipped default templates include the two newly configurable attributes.

***

## Platform reliability and stability

A substantial set of reliability fixes landed in the simulation orchestration layer. Customer-visible effects:

* **Simulations are no longer terminated by transient database errors.** A monitoring loop could misread a temporary database failure as "this cluster has no active simulations" and shut down a cluster that was running live work. Both reads now fail safe and retry.
* **Storage is no longer deleted during a failed capacity change.** A failed attempt to grow a filesystem could mark a healthy, in-service filesystem as invalid, after which cleanup deleted it out from under a running simulation.
* **Failed provisioning now reports promptly instead of hanging.** A simulation whose infrastructure provisioning failed could leave the request in a permanent "provisioning" state with no outcome ever returned. Provisioning failures are now terminal and reported, so the request can be resubmitted.
* **Simulation termination is retryable.** A failed termination previously marked the simulation failed and blocked any retry. A retry now succeeds and returns the simulation to normal monitoring.
* **Stranded storage is prevented.** A specific failure during storage setup could leave a filesystem that the platform could never recognise as ready, so the simulation waited out its full timeout before failing — while the provisioned compute and storage continued to accrue cost. The failure is now detected at setup.
* **Monitoring no longer stalls on a single bad record.** A failure reading storage records could abort an entire monitoring pass, leaving unrelated simulations un-reconciled until the next cycle.
* **A deprecated background subsystem has been removed.** It ran for every simulation, launched a compute instance, never completed, and contributed nothing to results. Removing it eliminates that provisioning overhead and the associated error noise.

### Simulation naming

Simulation names are now validated at every point where they are accepted or stored. A name must begin with a letter or digit and may contain only letters, digits, underscores and hyphens, up to 255 characters. Names outside this set are rejected at submission.

### Workspace deletion

Deleting a workspace now revokes access to the simulations inside it, including their results, summary data, download links and logs. Previously, deletion removed the workspace from view but left its contents readable.

***

## Security updates

**This release contains security updates. We recommend upgrading.**

In keeping with our disclosure practice, we do not publish details of security fixes. Customers with a specific compliance question should contact their Scala representative.

***

## Documentation

Switch model documentation has been expanded, including full descriptions of the newly exposed PFC and buffer-reporting attributes, the packet trimmer, and guidance on ECMP method selection and its effect on multi-tier fabrics.

Comprehensive DCQCN configuration documentation is available on request from your Scala representative.

***

## Not included in this release

The following remain open and are not addressed by 0.1.1292:

* **Termination of simulations that are not in a running state.** Termination currently applies only to running simulations.
* **Pre-simulation run-time estimation.** There is currently no supported way to determine in advance whether a trace will exceed the configured simulation time limit.
* **ECN-marked packet counts received at the NIC.** NIC-side receive counters for ECN-marked packets are not yet reported. Switch-side ECN information remains available.

***

## Upgrade notes

* **Model catalog updates apply automatically** when the platform is upgraded. No action is required.
* **Existing configurations continue to work.** Default values for the newly exposed attributes match the behaviour those attributes already had, with the one exception of the PFC resume threshold noted above.
* **Re-baseline before comparing.** If you maintain reference results, re-run your baselines on this release before comparing against new work. See **Changes that affect results**.
* **Check ECMP method selection** on multi-tier fabrics. To benefit from the corrected path selection, set `EcmpHashMethod` explicitly rather than relying on the default.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.