perf(runtime): raise opcua pinned dispatcher throughput 1 -> 100
This commit is contained in:
@@ -109,8 +109,15 @@ akka {
|
|||||||
# Pinned dispatcher used by OpcUaPublishActor (Task 44) so the OPC UA SDK sees
|
# Pinned dispatcher used by OpcUaPublishActor (Task 44) so the OPC UA SDK sees
|
||||||
# only one thread per actor instance — its session/subscription locks expect
|
# only one thread per actor instance — its session/subscription locks expect
|
||||||
# strict single-threaded access.
|
# strict single-threaded access.
|
||||||
|
#
|
||||||
|
# throughput is NOT what provides that guarantee: the PinnedDispatcher does, by
|
||||||
|
# giving the actor its own dedicated thread. throughput only sets how many queued
|
||||||
|
# messages drain per scheduling run, so 100 removes a mailbox re-schedule
|
||||||
|
# round-trip per message on the hottest actor in the process with zero change to
|
||||||
|
# concurrency. Must stay in sync with the inline HOCON copy in
|
||||||
|
# ServiceCollectionExtensions.WithOtOpcUaRuntimeActors.
|
||||||
opcua-synchronized-dispatcher {
|
opcua-synchronized-dispatcher {
|
||||||
type = "PinnedDispatcher"
|
type = "PinnedDispatcher"
|
||||||
executor = "thread-pool-executor"
|
executor = "thread-pool-executor"
|
||||||
throughput = 1
|
throughput = 100
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -302,12 +302,18 @@ public static class ServiceCollectionExtensions
|
|||||||
// bootstrap their own HOCON (e.g. ServiceCollectionExtensionsTests) wouldn't pick it up
|
// bootstrap their own HOCON (e.g. ServiceCollectionExtensionsTests) wouldn't pick it up
|
||||||
// — OpcUaPublishActor.Props pins itself to opcua-synchronized-dispatcher and Akka throws
|
// — OpcUaPublishActor.Props pins itself to opcua-synchronized-dispatcher and Akka throws
|
||||||
// ConfigurationException if it doesn't exist. Prepend a fallback so the runtime extension
|
// ConfigurationException if it doesn't exist. Prepend a fallback so the runtime extension
|
||||||
// is self-contained.
|
// is self-contained. Keep this block identical to the akka.conf one.
|
||||||
|
//
|
||||||
|
// The OPC UA SDK's single-threaded session/subscription requirement is guaranteed by the
|
||||||
|
// PinnedDispatcher alone (a dedicated thread per actor instance), not by throughput.
|
||||||
|
// throughput only sets how many queued messages drain per scheduling run, so 100 removes a
|
||||||
|
// mailbox re-schedule round-trip per message on the hottest actor in the process with zero
|
||||||
|
// change to concurrency.
|
||||||
builder.AddHocon(@"
|
builder.AddHocon(@"
|
||||||
opcua-synchronized-dispatcher {
|
opcua-synchronized-dispatcher {
|
||||||
type = ""PinnedDispatcher""
|
type = ""PinnedDispatcher""
|
||||||
executor = ""thread-pool-executor""
|
executor = ""thread-pool-executor""
|
||||||
throughput = 1
|
throughput = 100
|
||||||
}
|
}
|
||||||
", HoconAddMode.Prepend);
|
", HoconAddMode.Prepend);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user