Skip to main content
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.
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: 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.