mirror of
https://github.com/OPCFoundation/UA-.NETStandard.git
synced 2026-10-29 15:11:53 +08:00
Perf: --isolation sharedonly option for the server load harness
StandardServer's default isolation profile runs the fair queue, so the shared request queue path is measured only with SharedOnly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d50a986b80
commit
e451267c51
@@ -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 <file>` | | 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). |
|
||||
|
||||
@@ -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<string> 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<string> serverLines = startedLines;
|
||||
|
||||
Reference in New Issue
Block a user