11:18, EEST
July 22, 2014
Is there any performance or benchmark information for Prosys OPC UA available?
In particular, we would like to know how many events, OPC UA method calls or variable updates can be handled per second, where the client and server are on different hosts in the local network.
Also, for a device that produces array data, for example up to about a 50Kb array of numeric values: How fast could the client get the data from the server, assuming a fast network and hosts? It seems that only arrays of objects (Number) are supported, an not primitive types. Does that make much difference?
In my own performance tests, I noticed this type of log message on the server side:
“Acknowledge on Subscription 10: 1 – Bad_SequenceNumberUnknown”
I thought I could fix the issue by tuning these items on the client, but with limited success:
dataItem.setSamplingInterval(0.0); // fastest rate
dataItem.setQueueSize(100);
How can you test the maximum performance of OPC UA variable updates, method calls and event updates?
Thanks!
8:18, EEST
April 17, 2013
Is there any performance or benchmark information for Prosys OPC UA available?
How can you test the maximum performance of OPC UA variable updates, method calls and event updates?
There’s no performance or benchmark information publicly available for Prosys OPC UA SDK. This is mostly because of the diversity of applications where SDK is used. However, we have made some performance related tests for development purposes internally.
we would like to know how many events, OPC UA method calls or variable updates can be handled per second, where the client and server are on different hosts in the local network.
In normal situations the OPC UA communication will probably not be the performance bottleneck of your application. At least hundreds of events, method calls or variable updates can be handled per second.
That said, it is possible that certain applications need special performance consideration. One example of a system which needed special performance consideration regarding subscriptions is detailed in this blog post: http://www.prosysopc.com/blog/…..ed-server/
for example up to about a 50Kb array of numeric values: How fast could the client get the data from the server, assuming a fast network and hosts?
Call times for read-method usually are something in the range of one millisecond. However, accurate results may only be acquired by benchmarking the specific system at hand.
In this specific case you could try measuring the call time of client applications read()-method when reading that 50kb array. Java’s System.nanoTime() can be used to benchmark method call times as long as the drawbacks of micro benchmarking are taken into account.
With subscriptions you have two metrics that you probably are interested in: the time it takes to deliver value from server to client and the total throughput of the connection. If you want to analyse the performance of subscriptions, I would advice you to start by timestamping values when they are received at the client application and then comparing these with source timestamps of same data. This way the time to deliver notification values from server to client can be estimated. Remember however that publishing interval affects this value. If timestamps show that delivering values to client application takes longer and longer, then the throughput of the subscription may not be adequate and notification buffers will be filled at some point.
It seems that only arrays of objects (Number) are supported, and not primitive types (Integer). Does that make much difference?
This probably won’t be the bottleneck of performance within your application. However if you are interested in the performance of different data types you could try using OPC UA ByteString (byte []) as your data type and see if that has any effect on your applications performance.
“Acknowledge on Subscription 10: 1 – Bad_SequenceNumberUnknown”
This error message states that server application has already deleted the subscription message that client application is acknowledging. SubscriptionManager class contains method public void setMaxRetransmissionQueueSize(int maxRetransmissionQueueSize) which can be used to set the number of notification messages to keep in the retransmit queue. This can be set in your server application like this:
15:16, EEST
July 22, 2014
I’m using this code in a performance test (variable and array updates, sending events):
MonitoredDataItem dataItem = createMonitoredDataItem(nodeId, attributeId);
dataItem.setSamplingInterval(0.0); // 0 means use fastest rate
It does not seem to make a difference in performance whether testing over WIFI or ethernet, or even on the localhost.
What is the fastest rate? Is there a special polling interval that is used when SamplingInterval is 0, so that it is not possible to go faster than that rate?
For the performance test the client calls a method on the OPC UA server that starts a timer at a specified interval in microseconds and sets a variable or sends an event.
At some point, making the interval smaller does not have any effect.
14:11, EEST
April 17, 2013
When sampling interval is set from client application with
then the server application will use fastest possible sampling rate. Current minimum in the SDK is 1 millisecond. However, this value can be set to 0 on the server side, which disables sampling interval completely (every value is reported).
If you have some existing application and you’re interested in what is the actual sampling interval that the server application uses, you can see what the CreateMonitoredItemsResponse contains in it’s revisedSamplingInterval field.
13:55, EEST
December 21, 2011
Heikki Tahvanainen said
If you have some existing application and you’re interested in what is the actual sampling interval that the server application uses, you can see what the CreateMonitoredItemsResponse contains in it’s revisedSamplingInterval field.
This value is also updated to the SamplingInterval of the client side MonitoredDataItem.
14:30, EEST
July 22, 2014
Thanks for the answers. I noticed different behaviour for sending events and setting variables.
When trying to send events as fast as possible, all events get through to the client, but not as fast as one might expect.
When setting OPC variables, the client is notified more quickly, but not all value changes are passed to the client.
For example, if an OPC integer variable is incremented 100000 times by a timer once per microsecond (or some other very fast rate), the client only receives about 100 actual notifications that the variable changed. I assume this is the expected behaviour, since some hardware devices might produce changes faster than clients can handle them.
So are events always put in a queue and eventually delivered, while variables updates are delivered if there is time, or room in the queue?
Here are some of the server settings I am using for the test:
“`
server.init();
initBuildInfo();
// “Safety limits” for ill-behaving clients
server.getSessionManager().setMaxSessionCount(500);
server.getSessionManager().setMaxSessionTimeout(3600000); // one hour
server.getSubscriptionManager().setMaxSubscriptionCount(500);
server.getSubscriptionManager().setMaxRetransmissionQueueSize(100000);
server.getSubscriptionManager().setMinSamplingInterval(0); // fastest: default is 1 ms
“`
Thanks
10:16, EEST
December 21, 2011
Each MonitoredItem has a QueueSize, which the client can define. In the Java SDK the default for data items is 1 and for event items UnsignedInteger.MAX_VALUE (.e. unlimited). So, if you enable a small SamplingInterval for data items, you should also reserve a big enough QueueSize that can keep all the samples that may get recorded during a PublishingInterval.
Most Users Ever Online: 1919
Currently Online:
14 Guest(s)
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Heikki Tahvanainen: 402
hbrackel: 144
rocket science: 88
pramanj: 86
Francesco Zambon: 83
Ibrahim: 78
Sabari: 62
kapsl: 57
gjevremovic: 49
Xavier: 43
Member Stats:
Guest Posters: 0
Members: 738
Moderators: 7
Admins: 1
Forum Stats:
Groups: 3
Forums: 15
Topics: 1524
Posts: 6451
Newest Members:
jonathonmcintyre, fannielima, kristiewinkle8, rust, christamcdowall, redaahern07571, nigelbdhmp, travistimmons, AnnelCib, dalenegettingerModerators: Jouni Aro: 1026, Pyry: 1, Petri: 0, Bjarne Boström: 1026, Jimmy Ni: 26, Matti Siponen: 346, Lusetti: 0
Administrators: admin: 1