Skip to content

UASDK: dissection of large structures shows bad performance #194

@ralphlange

Description

@ralphlange

Deserialization and distribution of large structures using the UASDK client takes too long
Found in production, with a 0.10 Device Support on top of UASDK 1.7.4.
Server is an S7-1518, sending large structures (hundreds of elements) at a fast rate (100ms).

First analysis shows that the traversal of the structure tree (recursive setIncomingData()), run inside a callback called from a low-level worker thread of the UASDK, takes often more than 100ms, so that the low-level library eventually drops updates.

During this, the CPU load is exceptionally high, showing all load on the low-level worker threads and almost no load on the callback threads (record processing).

Suspicion:
Something is really wrong. Feels like each layer of the recursive setIncomingData() deserializes, queries the structure and then serializes again when calling each of its children.

Setup:

  • OPCUA Support: 0.10
  • Platform: RHEL 8.5
  • EPICS Base: 7.0.4.1
  • Client library: UA SDK 1.7.4
  • Server: S7-1518

Metadata

Metadata

Assignees

Labels

performanceSomething does not perform as expected

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions