diff --git a/perf/README.md b/perf/README.md index 91ba69b5ab..9e6449cbe8 100644 --- a/perf/README.md +++ b/perf/README.md @@ -69,6 +69,7 @@ perf/ServerLoadHarness/bin/Release/net10.0/ServerLoadHarness.exe run --scenario | `--duration`, `--warmup` | 20, 10 | Measurement window and warm-up in seconds. | | `--diag`, `--audit` | 0 | Server diagnostics and auditing. | | `--threads`, `--queue` | 200, 2000 | `MaxRequestThreadCount` and `MaxQueuedRequestCount` of the server; `MinRequestThreadCount` is the smaller of 50 and `--threads`. | +| `--isolation` | `default` | `sharedonly`: run the server with the SharedOnly [resource isolation](../docs/ResourceIsolation.md) mode (no isolation provider, one FIFO request queue) instead of the default profile. | | `--trace ` | | Record the measurement window with `dotnet-trace`. | | `--trace-profile` | `cpu` | `cpu` (sampled thread time), `alloc` (allocation ticks), `contention` or `gc`. | | `--trace-side` | `server` | The process to record: `server` (the child) or `client` (the harness itself). | diff --git a/perf/ServerLoadHarness/Program.cs b/perf/ServerLoadHarness/Program.cs index 4107c468d7..ab6c5f65b6 100644 --- a/perf/ServerLoadHarness/Program.cs +++ b/perf/ServerLoadHarness/Program.cs @@ -318,6 +318,10 @@ namespace Opc.Ua.Perf.ServerLoadHarness : contract ? new BenchmarkContractServer(telemetry, ArgInt("async-node-manager", 1) != 0) : new ReferenceServer(telemetry); + if (Arg("isolation", "default") == "sharedonly") + { + server.ResourceIsolationOptions.Mode = Opc.Ua.Server.ServerResourceIsolationMode.SharedOnly; + } server.TransportBindings = TestTransportBindings.WithAllSchemes(); await application.StartAsync(server).ConfigureAwait(false); Console.WriteLine(FormattableString.Invariant($"READY {endpointUrl} {Environment.ProcessId}")); @@ -391,7 +395,7 @@ namespace Opc.Ua.Perf.ServerLoadHarness }; (Process startedServer, BlockingCollection startedLines) = StartServerChild( FormattableString.Invariant( - $"server --port {port} --diag {Arg("diag", "0")} --audit {Arg("audit", "0")} --threads {Arg("threads", "200")} --counters {(scenario == "counters" ? Arg("nodes", "1") : "0")} --sampling {Arg("sampling", "10")} --queue {Arg("queue", "2000")}"), + $"server --port {port} --diag {Arg("diag", "0")} --audit {Arg("audit", "0")} --threads {Arg("threads", "200")} --counters {(scenario == "counters" ? Arg("nodes", "1") : "0")} --sampling {Arg("sampling", "10")} --queue {Arg("queue", "2000")} --isolation {Arg("isolation", "default")}"), serverEnvironment); using Process server = startedServer; using BlockingCollection serverLines = startedLines;