OPC UA Performance
OPC UA Performance
Thesis supervisor:
Thesis advisor:
Preface
I would like to thank my instructor Jouni Aro for providing the thesis topic and for
his support during the whole process. Another thanks goes to Ilkka Seilonen who
operated as my supervisor. All the comments and improvements were appreciated.
This thesis has been made at Prosys PMS Ltd, Espoo, Finland. Everyone at Prosys
deserves a thanks for providing a good atmosphere to work in. Special thanks goes
to my sister Hanna, who helped with the valuable job of proofreading.
Otaniemi, 3.3.2016
Heikki Tahvanainen
v
Contents
Abstract ii
Preface iv
Contents v
Abbreviations vii
1 Introduction 1
1.1 Background and motivation . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objectives and scope . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Research methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Structure of the work . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 OPC UA 8
3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3 Mappings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4 Subscription model . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.5 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5 Test requirements 24
5.1 Elapsed time (batch) measurements . . . . . . . . . . . . . . . . . . . 24
5.1.1 Impact of signing and encrypting . . . . . . . . . . . . . . . . 25
5.2 Response time measurements . . . . . . . . . . . . . . . . . . . . . . 25
5.2.1 Read mechanism . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.2.2 Subscription mechanism . . . . . . . . . . . . . . . . . . . . . 26
vi
7 Results 33
7.1 Elapsed time results . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2 Response time results . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.2.1 Test setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.2.2 Read mechanism . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.2.3 Subscription mechanism . . . . . . . . . . . . . . . . . . . . . 44
8 Conclusions 51
References 53
vii
Abbreviations
Abbreviations
OPC OLE for Process Control
OPC UA OPC Unified Architecture
SCADA Supervisory Control And Data Acquisition
SDK Software Development Kit
GUI Graphical User Interface
LAN Local Area Network
XML Extensible Markup Language
PLC Programmable Logic Controller
CA Certificate Authority
QA Quality Assurance
JVM Java Virtual Machine
JDK Java Development Kit
1 Introduction
1.1 Background and motivation
Information transfer is an essential factor in todays automation systems. Currently,
industrial networks are often characterized with automation pyramid approach. [1]
OPC Unified Architecture (abbreviated OPC UA) is a software specification which
creates a common infrastructure for sharing information between different systems.
The most common use case is an OPC UA server acting as a gateway exposing
data from underlying data source to OPC UA clients residing on higher level of
this conceptual automation pyramid. OPC Classic, UAs predecessor, enabled data
from automation instruments of different manufacturers to be accessed using one
protocol. OPC UA is an evolution of this previous standard and an attempt to
create an extensible specification to expose and access data regardless of the purpose
or meaning of the data, enabling interoperability between any number of systems
of different purposes [2]. OPC UA is an IEC standard IEC 62541 [3]. OPC UA
specification addresses data communication in a client-server architecture and also
defines information modeling in the form of an address space model, server discovery
services, security modes and subscription mechanism [4]. Among other things, the
actual data communication is an important feature of OPC UA specification.
OPC UA is already a mature specification used in industrial environments.
Things like scalability and performance are growing in importance as more use
cases are explored. When developing a product or service utilizing OPC UA data
communications it is a matter of importance for the developer and user to know
the possible performance constraints. The importance of performance studies can
be seen by looking at recent studies where, for example, OPC UA performance has
been studied in the context of an agricultural system [5] and in the context of smart
electric grids [6]. It seems that performance studies are carried out at the same time
when other study goals are the main objective. Thus, there is a need for a study
focusing on OPC UA performance.
The evaluation of performance aspects provides valuable information for a system
designer or for end-users. Mostly, end-users are not interested in detailed information.
They want to know if a given service may be used for their application scenario,
and if so, which parameters seem to have the biggest impact for communication.
Using results from pre-tested platforms, system designers can quickly gauge the
level of hardware performance they require and possibly eliminate the need to test
systems themselves. [7] With historical benchmarking data, it is also possible to show
for example an improvement in design and implementation when developing OPC
UA products. Organizations that are currently migrating their existing production
systems to OPC UA are interested in performance figures. [8] One aspect regarding
this migration is that the new system must preserve or increase the quality of
communication performance. For this reason some organizations must run their
own performance tests when considering migration. These organizations themselves
declare that they would benefit from performance tests that would help them choose
between protocols.
2
directly used by an end user. OPC UA communication SDKs, which are the basis for
this thesis, belong to this system software category. Micro-benchmarks can be used
to compare for example two different algorithms that accomplish the same thing.
Same kind of classification is presented in the context of hardware testing.
System software testing, the most suitable classification for tests done in this
thesis, can further be divided into multiple categories. Some tests measure "how fast"
a given unit of work can be processed or acknowledged; others measure "how much"
work can be performed with a given quantity of computing resources [14]. A usual way
to classify performance tests is to categorize them to Elapsed time, Throughput
or Response time tests [15]. The simplest way of measuring performance is to select
a certain task and see how long it takes to accomplish. This is called elapsed time
or batch measurement. These measurements measure the amount of time (or other
resources) that must be used to accomplish certain workload. Conversely, throughput
5
Repeatability The test is able to run multiple times yielding the same result.
average response time of its requests. Changes in that number are not indicative of a
performance problem unless the reported throughput is the same. A server that can
sustain 500 operations per second with a 0.5 second response time is performing better
than a server that reports a 0.3 second response time but only 400 operations per
second. [15] Throughput measurements are usually taken after a suitable warm-up
period, particularly since what is being measured is not a fixed set of work.
2.3.2 Faban
Faban is free and open-source, Java-based load generator. It can be used to create
and execute workloads. [18] Faban comes with a fhb program, that can be used to
measure the performance of a URL [15].
fhb W 1000 r 300/300/60 c 25 http : / / h o s t : p o r t / t e s t u r l
This example measures 25 clients making requests to the server. Each request has a
1-second cycle time. The benchmark has a 5-minute (300-second) warm-up period, 5
minute measurement period and a 1-minute ramp-down period. Following the test,
fhb reports the OPS and response times for the test. Because there is think time
in this example, the response times will be the important metric and operations
per second will be constant (unless the server is overloaded by this workload). In
addition to the fhb program, Faban has a framework for defining benchmark load
generators in Java.
8
3 OPC UA
3.1 Overview
OPC Unified Architecture is already a mature industrial communication specification
and many good introductions to the subject exist [2] [19]. Another brief introduction
is provided here in the context of this thesis. OPC UA is essentially an application-
layer protocol which is designed to be used in automation and industrial use cases.
The primary purpose of an application-layer protocol is to define how processes
running on different end systems pass messages to each other. An application-layer
protocol defines the types of messages (requests and responses), the syntax of the
messages (fields), the meaning of information in these fields and rules determining
when and how a process sends messages and responds to messages [20]. Applications
operating in the control layer of the industrial computer systems are designed not
only to perform real-time data exchange between each other, but also to communicate
information to higher levels (SCADA, MES, ERP). OPC Unified Architecture is
an example of a standard that is designed to handle this type of communication.
The fundamental parts of OPC UA are data transport and information modeling [2,
pp.19]. It leaves it up to other organizations to define what data is described in their
information models.
OPC UA protocol is a classical example of the client-server communication model.
All communication between OPC UA applications is based on the exchange of
messages initiated by the client application. [4] Usually the OPC UA server resides
on an automation device. One of the areas where OPC UA has really excelled is PLC
interfaces. An OPC UA server encapsulates the source of process information like a
PLC and makes the information available via its interface. An OPC UA client, for
example SCADA system, connects to the OPC UA server and can access and consume
the offered data. Applications consuming and providing data can be both client and
server at the same time. In its current form, OPC UA applications mostly use binary
encoding and TCP transport protocol called UA TCP to access automation data.
Also, OPC UA communication is inherently tightly coupled and session-oriented. In
many applications this connection oriented approach is advantageous, for example
timely detection of communication failure and rapid recovery with no loss of data can
be achieved with this approach. However keeping track of sessions must in theory
introduce some boundaries on scalability of OPC UA applications.
OPC UA is an evolution of the previous OPC standard (currently referred to as
OPC Classic). [2] To understand OPC UA, it is best to become familiar with reasons
leading to the creation of the original OPC Classic protocol. The motivation for the
original OPC standard was to provide access to intelligent field devices provided
by multiple vendors and thus enable connecting industrial devices to control and
supervision applications. The development of OPC standard began in 1995 as an
answer to this connectivity problem. The standard became successful and in fact has
become a de facto standard in factory automation for integrating different production
automation related software in multivendor environments. This original version was
denoted OPC Data Access (DA). Later on OPC Classic developed to contain several
9
different protocol specifications, for example Alarms & Event (AE) and Historical
Data Access (HDA) among others. These specifications broadened the scope of OPC
Classic.
OPC classic was based on proprietary COM/DCOM technology which restricted
its use practically to PC computers in LAN networks because of scalability and
security issues. Also the robustness of OPC was a problem and the segmentation
to different parts was considered negative. The motivation for the development of
OPC UA was to offer modern equivalent to OPC without loss of functionality or
performance. [2] The name Unified Architecture literally means unifying different
OPC specifications under one umbrella. OPC UA was designed to be better than OPC
in terms of information security, platform independence and enhanced information
modeling. OPC Foundation, which is the organization developing OPC, introduced
this new version in 2009.
3.2 Parts
OPC UA standard consists of 13 parts, which are listed in table 4. As of writing
this, the latest OPC UA specification version 1.03 was released by OPC Foundation
in 2015. The specification describes UA internal mechanisms, which get handled
through the communication stack and are mostly only of interest for those that port
a stack to a specific target or those that want to implement their own UA stack.
The OPC UA application developers usually code using some commercial SDK and
therefore mainly use API documentation. However, parts 3, 4, and 5 may also be of
interest for application developers. These parts describe the address space model,
services and the default information model of OPC UA.
All data in OPC UA communication is accessed via objects in address space.
Specification part 3 describes the address space and its objects. [21] Part 3 is
the OPC UA meta model on which OPC UA information models are based. The
primary objective of the OPC UA address space is to provide a standard way for
servers to represent objects to clients. Objects and their components are represented
in the address space as a set of nodes described by attributes and interconnected
by references. Specification part 5 defines the standardised nodes of the address
space of an empty OPC UA Server. These nodes are standardised types as well as
standardised instances used for diagnostics or as entry points to server-specific nodes.
The default information model contains about 5000 predefined nodes [22]. However,
it is not expected that all servers will provide all of these nodes [23].
OPC UA services are defined in specification part 4 and organized into nine
service sets as illustrated in table 5. Out of these, Discovery, Secure channel and
Session service sets are related to the underlying connection and the rest are used
to view, modify and use the data that is available from the information model. [24]
Each OPC UA Service described in Part 4 has a request and response message.
The defined Services are considered abstract because no particular mechanism for
implementation is defined in part 4. Part 6 specifies concrete mappings supported
for implementation.
10
3.3 Mappings
OPC UA standard is defined in such a way that same abstract features can be
implemented with different protocols. This is done to increase the flexibility of
the standard. [2] Building actual OPC UA applications still requires that the
implementation details have been agreed upon. Specification part 6 describes mapping
between the security model described in Part 2, the abstract service definitions,
described in Part 4, the data structures defined in Part 5 and the physical network
protocols that can be used to implement the OPC UA specification [25]. Mapping
specifies how to implement an OPC UA feature with a specific technology. For
example, the OPC UA binary encoding is a mapping that specifies how to serialize
OPC UA data structures as sequences of bytes. Mappings can be organized into
three groups: data encodings, security protocols and transport protocol as illustrated
in table 6. Security Protocol ensures the integrity and privacy of UA Messages that
are exchanged between OPC UA applications. Data encoding is a way to serialize
OPC UA messages and data structures. Transport protocol represents a way to
11
OPC UA currently specifies two encodings: OPC UA Binary and XML. OPC
UA Binary has been designed with performance and overhead on the wire in mind.
This is the most efficient way for data exchange in OPC UA. In addition to this, the
specification defines XML encoding. This structured format offers for example easier
debugging of messages. The cost of any structured encoding format such as XML is
the overhead introduced in the form of larger messages. Large majority of current
OPC UA applications use UA Binary encoding.
There is currently one security protocol defined for OPC UA in order to map
the abstract services defined in part 4 of the specification: UASecureConversation.
This security protocol is based on a certificate-based connection establishment.
UASecureConversation is a security protocol defined by the OPC UA working
group. It is a combination of techniques and mechanisms of the standards TLS4 and
WSSecureConversation [2, pp. 196]. Previously there was also a second optional
security protocol called WS-SecureConversation. However, in the version 1.03 of the
specification this is marked as deprecated because of not being widely adopted by
industry.
For transporting data, OPC UA currently has two technology mappings supported,
a TCP protocol based UA TCP and a HTTPS protocol. These protocols are used
for establishing a connection between an OPC UA client and server at network level.
UA TCP is by far the most widely used one of the transport protocols. UA TCP is a
protocol defined by OPC Foundation on top of TCP. UA TCP contains application
level configurable buffer sizes for sending and receiving data, the possibility to use
12
same IP-address and port for different endpoints of OPC UA server and the possibility
to react on and recover from errors occurring at transport level [2, pp. 198]. HTTPS
refers to HTTP Messages exchanged over an SSL/TLS connection. In this protocol,
OPC UA messages are transferred in the body of HTTP messages. Previously
there was also a third optional transport protocol called SOAP-HTTP. However,
in the version 1.03 of the specification this is marked as deprecated because of not
being widely adopted by industry. This protocol was based on SOAP web service
technologies.
The combination of data encoding, security protocol and transport protocol is
referred to as transport facet by the OPC UA specification. The standard currently
defines three different transport facets (see table 7). In order for OPC UA commu-
nication to work between two applications, both must support at least one mutual
transport facet. In practice, binary UA-TCP is the most common transport facet in
use today.
Monitored item
Service set Monitored Item
N
1
Subscription
Service set Subscription
N
1
Session
Figure 1: Subscriptions have a set of MonitoredItems assigned to them by the Client.
MonitoredItems generate Notifications that are to be reported to the Client by the
Subscription (modified from [2]).
Sampling interval Queue of data or events
Subscription
Monitored item for data
Variable
f
value
Publish enabled
notification messages and the republish service to get lost notification messages from
the server.
A subscription requires a session to transport the data to the client. The
subscription can be transferred to another session, for example to be used in a session
created by a redundant backup client if the client that created the subscription is no
longer available. Therefore the subscription lifetime is independent of the session
lifetime and a subscription has a timeout that gets reset every time data or keep-alive
messages get sent to the client. [2]
3.5 Security
OPC UA specifies security capabilities, which make use of standard public key
cryptography mechanisms. If HTTPS protocol is used, then TLS security is used
to encrypt the traffic already in the Transport Layer. This section will cover the
14
Transport layer
Figure 3: Transport Layer, Secure Channel and Session (modified from[26, pp. 12])
OPC UA enables a flexible selection of the used security policy and security mode
between each connection. Specification defines several alternative Security Policies:
None, Basic128Rsa15, Basic256 and Basic256Sha256 as of writing this. New policies
can be defined and old ones made obsolete as security requirements increase in future.
These define the suite of algorithms used to sign or encrypt messages. For example,
if the security policy Basic256Sha256 is used, then asymmetric signature algorithm is
Rsa_Sha256, symmetric signature algorithm is Hmac_Sha256, asymmetric encryp-
tion algorithm Rsa_Oaep and symmetric encryption algorithm Aes256_CBC. Three
Message Security Modes are available: None, Sign and SignAndEncrypt. These define
the level of security applied to each message. If "None" is selected, then the messages
will not be secured. Of course also no overhead is imposed because of signing or
encrypting. When "Sign" is chosen then the message is signed. Signing messages
15
size and the network speed. For example reading 2.5 megabyte data block from an
OPC UA server takes about 200 milliseconds [7]. The network that is used has an
effect on the absolute performance. When read calls on localhost are in the range
of average 1.4 milliseconds, same read calls can be almost as fast (1.5 milliseconds)
when executed in fast LAN network. However same read calls over rural 3G network
takes on average 96 milliseconds. Ping time to some common servers in this same
network is in the range of 30 - 40 milliseconds. [5]
The read service call uses request-response pattern, and delays are present in both
steps. In contrast, notification messages are transferred without a specific request,
making them more responsive. For this reason, the latency of subscriptions can
be assumed to be smaller than periodic reading of variable values discussed above.
Sometimes it is more important to achieve the biggest throughput possible rather
than concentrate on fast responses [30]. However, previous studies do not seem to
present comprehensive throughput results. Fojcik and Folkert [12] present result of
250 kB/s throughput. However, that result is not the maximum possible throughput
as the test case is defined to test what is the average network traffic generated with
certain use case.
Signing and encrypting data has been of interest in many studies. Signing and
encryption adds overhead to the communication [31]. The conventional wisdom is
that signing and encrypting data is a time demanding task and potentially unusable
in resource limited devices. The previous results show somewhat ambiguous results:
some studies report that encrypting messages seems to increase round-trip time
by a factor of ten, whereas signing seems to have little or no effect [32]. On the
other hand, some studies show that with small message sizes encryption doubles
the amount of round-trip delay and signing and encryption operations take almost
identical times [33]. These studies also differ so that the first one reads variable
with static size 102400 bytes whereas the second one shows results with multiple
variable sizes and concludes that the impact of signing and encrypting gets smaller
as message sizes increase. These two results are illustrated in figures 4 and 5. In
figure 5 the results are presented normalizing the values of the round-trip time to
those achieved considering scenario no security and UA TCP. This study presents
different results for security modes "no security" and "secure channel with security
mode none". It is not completely clear what the difference between these is. The
conclusion is however that there is a clear difference between these results.
In addition to the attribute and subscription service sets, the session service
set could also be evaluated as an important part during an OPC UA session. In
some use cases where the goal is to gather data from multiple sources, the connect
and disconnect times may become important. Results obtained with OMNeT++
simulator show that creating an OPC UA session takes from 0.054 seconds to 14
seconds depending on what kind of CA verification is used. [33]
In conclusion, OPC UA communication effectiveness depends on the way that
the data in the OPC UA server address space is updated, the network speed, number
of nodes per call and data block size. Here, updating the server address space is
considered to include possible subscription settings such as sampling interval and
publish interval in case of subscription. To some extent the selected security mode
18
60
50
40
Milliseconds
none
30 128sign
256sign
20 128enc
256enc
10
0
0 20 40 60 80 100
Measurement
3.5
3
Relative round-trip time
2.5
UA TCP none
2 UA TCP sign
UA TCP encrypt
1.5
1
4 1024 2048 4096 8192 16384 32768
Size of variable in bytes
(whether or not to use signing and encrypting) has an effect. The programming
language and operating system may have an impact on performance, but the impact
is probably much smaller than with the before mentioned features. Different data
types do not influence read and write performance.
Figure 6: CPU load as the function of monitored items according to Fojcik and
Folkert (modified from [12]).
changes are reported reliably and the speed of actual data communication is not that
important. The resource usage of other services besides subscriptions was not found
in previous studies.
it appears that systems based on the OPC UA scale better in terms of address space
size than analogous systems based on OPC-DA. Using UA TCP and binary encoding,
OPC UA is able to keep the performance of Classic OPC, while at the same time
providing new features, such as security of the communication [36, pp. 179].
Historically XML encoding has been seen as resource intensive [2, pp. 308].
The OPC UA book presents results of measuring round-trip times with different
transport protocols and data encodings. The numbers indicate that there is only
a small overhead for using SOAP/HTTP protocol with binary encoding instead of
the UA TCP protocol. There is a much bigger overhead when using SOAP/HTTP
protocol with XML encoding instead of the UA TCP protocol. SOAP/HTTP protocol
with XML encoding is 1.8 times slower for small messages and 18 times slower for
large messages [2]. Some publications even deem the XML format prohibiting high
performance real-time systems [37]. However, XML or other structured data encodings
have also positive sides such as human-understandable format and flexibility. Usually
using structured data such as XML messages results in much bigger message sizes,
16 to 25 times larger than a conventional binary message [13]. This illustrates the
overhead that is associated with using a structured versus a custom data format.
However, Efficient XML Interchange (EXI) data encoding of XML messages may
increase the efficiency of structured data formats. In an example case, message size
is 10 kB for UA Binary, 270 kB for XML and 15 kB for EXI encoded XML message
[38]. According to this example, the message size for UA Binary coding (3.75% of
the original XML message size) is nearly the same as for the default EXI coding
(5.15% of the original XML message size). However, this study does not report
results of round-trip times or resource usage when using EXI encoded XML-messages
and thus it is not clear that the smaller message size leads to better communication
performance automatically.
Some protocol comparisons are more of a qualitative kind. One interesting study
from year 2011 compares multiple IP-based protocols in terms of suitability for
automation gateway role. SNMP, LDAP, SQL, Web servers, OPC XML-DA, OPC
UA and a proprietary protocol are compared. [1] One interesting conclusion is that
web servers presenting HTML are well suited for presenting fieldbus and gateway
data to a human operator but introduces overheads with periodic data exchange.
Using SQL as gateway is also an interesting premise. The study criticizes support
for generic clients and support for different data types when using SQL.
In conclusion, it can be stated that binary data encoding should be more efficient
than XML or other structured formatting. OPC UA binary and classic OPC should
exhibit same kind of performance. OPC UA standard has been developed to use
cases in automation gateway role and contains features needed in that application
area.
4.4 Tools
Unified Automations UaExpert software is shipped with a Performance View feature.
This performance view can be used to measure the performance of certain UA service
calls to a UA server. It can be configured to call a service for a defined number
22
5 Test requirements
It would not be feasible to discuss all the possible aspects of OPC UA performance
more deeply in this thesis. In this section OPC UA functionality is assessed based on
previous studies. Usually users are in the first place interested in data transferring
capabilities of OPC UA applications [39]. Performance and possible limitations of
OPC UA subscription model are interesting, especially because the subscription
model has previously been the limiting factor of performance in some cases [34].
When analyzing the data transferring capabilities of an OPC UA application it
would be obvious to expect that the network imposes restrictions on data throughput.
However, previous research has concluded that indeed this is not the case with fast
LAN network but actually the internal architecture of the server and utilization of
hardware resources can be a bottleneck [12]. OPC UA supports multiple technology
mappings. Using HTTPS as the transport or XML as the encoding is not that
popular. In the following tests only UA TCP and UA binary encoding are considered.
Based on previous studies, three main research topics can be formulated:
To provide some logical separation, the selected test cases are logically divided
into elapsed time (batch) measurements, throughput measurements and response
time measurements. Based on previous studies, executing response time tests is the
most interesting part, since that kind of studies have not been done previously with
OPC UA, whereas with other information systems response time testing is usual. In
response time tests, workload and throughput are constant.
For the elapsed time tests, the server application needed to contain variables
of selected size. In these tests, client and server application resided on the same
host. Round-trip times without network effect were measured as well as relative
effect of signing and encrypting. Synchronic (blocking) read calls were used. Only
the round-trip time was measured and in this case the client functionality was
really straightforward. For the response time tests, a custom client application was
implemented and the idea was that the response time client could be used with any
OPC UA server. The client functionality as well as collected metrics were more
complicated. When running the response time tests, client and server applications
were always on different host machines. In response time tests the main idea was
to measure the response times until the server application becomes saturated with
more requests than it can handle.
2) Grow batch size, while keeping the amount of sessions and frequency constant.
The session amount should be one and frequency should be decided based on
previous test case.
3) Grow the amount of sessions while keeping other parameters constant. Batch
size and frequency of reads should be decided based on results of previous test
case.
1) Test response times and throughput with one session, one subscription and
variable amount of monitored items.
2) Test response times and throughput with one session, variable amount of
subscriptions and constant amount of monitored items. The constant amount
is decided based on the previous test.
3) Test response times and throughput with variable amount of sessions and
constant amount of subscriptions and monitored items. The constant amount
is again decided based on the previous test.
27
Periodic reads from the client application was developed by defining a Runnable
object which handled the asynchronous read calls and scheduling this Runnable with
ScheduledExecutorService. ScheduledExecutorService is a fixed-size thread pool
that supports delayed and periodic task execution, similar to Timer [14, pp. 120].
Scheduled thread pools allow multiple threads for executing periodic tasks. Sched-
uledThreadPoolExecutor also deals properly with ill-behaved tasks and continues
the execution even if some individual tasks ended up in error. At the end of the
executions, statistical information including information about round-trip times per
single request and total throughput statistics will be printed. Parameter percentile
can be used to print certain percentile value of all arrived requests. The default
option is to print 90th percentile response time of all request-response round-trip
times. An example of statistics printed out by the program is shown below.
Number o f read r e q u e s t s : 9000
Number o f read r e s p o n s e s : 9000
T ot al d u r a t i o n : 8 9 9 9 8 . 9 7 9 1 4 6 9 9 9 9 9 m i l l i s e c o n d s
Average r e s p o n s e time : 1 . 7 4 5 7 1 5
Max r e s p o n s e time : 1 0 . 3 2 3 4 3 5
0 . 9 p e r c e n t i l e r e s p o n s e time : 1 . 8 4 5 7 5 4
Number o f r e s u l t s : 900000
R e s u l t s p er second : 1 0 0 0 0 . 1 1 3 4 2 9 3 9 7 7 2
In the default mode, the Prosys OPC UA Java SDK contains functionality to monitor
server status. This server status monitoring is done by reading the server status as
any other data. With large amounts of read requests, the client may falsely think that
the server is not responding because of long wait times before the server responds to
29
status reads. Clients can set an interval for this status check as well as a timeout
value. By adjusting the timeout, the user can configure for how long the client
continues to operate without knowing what the status of the server is. In the client
application, this status check timeout is set in the following manner.
c l i e n t . setStatusCheckTimeout (< s u i t a b l e value >) ;
However, during testing there is really no point to monitor the status at all.
Either the client stays connected to the server or, if not, the test run can be repeated.
Also, the server status reading actually interferes with the test run because it also
involves issuing read requests. Because of this, it is better to disable the status check
altogether by setting the status check interval to zero.
c l i e n t . setStatusCheckInterval (0) ;
obtained. The delay could be measured through number of ways: 1) based on the
timestamp field of response header in publish responses, 2) from the publish time
field of notification message (there is one notification message per publish response)
or 3) from individual data values server timestamp. In practice, the difference in all
these approaches is probably not that big but the most correct way would be to use
the timestamp of each individual data value. The specification states that the server
timestamp is used to reflect the time that the server received a variable value or knew
it to be accurate [24, pp. 121]. During testing, it was however noticed that calculating
the time difference from every received value update consumes surprisingly much
resources and client side easily becomes a bottleneck because of this. The next best
thing in delay measurement is the publish time field of notification message, which
OPC UA specification defines as the time that the message was sent to the client
[24, pp. 136]. This was deemed very suitable for these measurements as there is
considerably less notification messages than individual data values.
The tests were made with server and client applications residing on different hosts.
In read service testing the round-trip time is measured with the client system clock.
In subscription delay measurement however, server machine sets the publish time,
and client application calculates delay from this time. Differences in these clocks
are reflected in the measured delay. The first delay time measurements pointed out
that internal clocks actually drift a considerable amount if no clock synchronization
protocol is used. Adjusting clocks before every test would be daunting and would also
introduce huge differences in measured delay values. Because of this, it is important
to use clock synchronization protocol. Despite the use of clock synchronization
protocol, some difference of clocks was visible between different client hosts. Two
client hosts were used, and immediately after synchronizing clocks, the other one
reported average delay time of 7 milliseconds. In similar test run on the other host,
the delay was in the range of 60 milliseconds. In absolute values, this may seem like
a small difference, but it is still an increase of almost ten times. The delay presented
in the subscription tests should be anyway thought of in relative terms. This means
that the most interesting thing in practice is to see how the delay time grows when
more data notifications are handled.
With subscriptions, an important aspect of testing was to try to evaluate whether
or not all notification messages actually arrive at the client application. This is very
important in the case of subscription mechanism, where one missing data notification
could mean that the client never gets the newest value of some variable. Missing
some value update altogether might potentially be very harmful. Delivering all
notifications reliably is more important than delay of notifications. In OPC UA, one
publish response always contains data notifications for only one subscription. In
UaPerfClient, incoming data notifications are counted and in addition to this, the
publish responses per subscription are monitored. This is by no means a perfect
way of telling if all notification messages arrived as they should have but it does
not consume much resources and it still provides some information about how fairly
subscriptions have been treated. Measuring all individual notification messages and
analysing that they arrived in order would be better, but when designing the system
it was deemed too resource intensive because it is possible that high amount of
31
defined in milliseconds.
- QueueSize is the requested size of the MonitoredItem queue.
7 Results
7.1 Elapsed time results
Modern PC hardware usually contains hardware-accelerated encryption. However,
not all devices support such features. The purpose of this test case was to find out
what kind of performance could be expected from different hardware platforms. We
compared the following computers:
Raspberry Pi, OS Raspbian Linux, 700 MHz single-core ARM, 512 MB RAM
memory and SD card as a storage.
0.8
Milliseconds
0.6
0.4
0.2
0
none sign sign and encrypt
Security mode
Figure 8: Average round-trip time with laptop and byte array of length 10.
30
25
Milliseconds
20
15
10
0
none sign sign and encrypt
Security mode
Figure 9: Average round-trip time with Raspberry Pi and byte array of length 10.
35
Table 10: Relative average round-trip values compared to security mode none with
different security modes and the security policy Basic128RSA15.
Platform Variable size None Sign Sign and encrypt
Laptop 10 1 1.2 2.2
Laptop 10000 1 1.5 2.7
Raspberry Pi 10 1 1.1 1.6
Raspberry Pi 10000 1 1.3 3.8
the laptop computer, round trip times with signing take 1.5 times as long as the time
without security. Adding encryption adds more overhead and round trip times with
encryption take 2.7 times as long as without security. In the case of the Raspberry
Pi, the corresponding values are 1.3 and 3.8. These values are illustrated in table
10. Of course in absolute measurements the laptop is always faster in round trip
times. Looking at the relative numbers however shows that with small message sizes,
adding signing or encryption actually adds relatively more overhead to the laptop
version. When the message size is increased this relative difference is no longer true.
Signing messages adds much less relative overhead than encrypting messages.
36
1
0.8
0.6
0.4
0.2
0
none sign sign and encrypt
Security Mode
Figure 10: Average round-trip time with laptop and byte array of length 10 000.
50
40
30
20
10
0
none sign sign and encrypt
Security Mode
Figure 11: Average round-trip time with Raspberry Pi and byte array of length 10
000.
37
Server machine:
Client1:
Client2:
amount worth of testing was 100 requests per second. The duration of the test was
180 seconds.
Table 11 shows that on average it takes 25 percent more time to read one value
when the rate increases to 10 times the original. Considering the 90th percentile
value, the difference is even smaller. It is noticeable that there is a good reason why
the percentile values are widely used. The 90th percentile value is growing logically
with more reads and not fluctuating. Average values are also pretty reliable. Some
random variations can be seen in the maximum values from run to run, which is
expected. When interpreting these results, it also has to be considered that the client
side handling of read requests and responses is mostly counted in this time also. To
test whether or not the response times change when two clients connect to the server
at the same time, a test with a rate 1000 was run also with the other test client.
After this, the measurement was done with both test clients started at the same time
with rate being 1000. If the server is the bottleneck, connecting two simultaneous
client applications should add further delay. The tests were started manually and
it was made sure that they were started and finished during the same second time
interval. Based on table 12, the conclusion can be drawn that the OPC UA server is
not a limiting factor when client reads one attribute value per millisecond.
The next test is to increase the amount of batch size per read request and keep
the session count still at one. In practical terms, the read rate of previous tests
(one value per millisecond) is really high. Therefore a rate of 100 reads per second
was considered. This is still an unrealistically high value considering any real world
39
application. It is used here because this way the test can overload the server and
show rise in round-trip times. In previous test, the duration of 180 seconds was
used. This was deemed needlessly long and following read tests were executed with
the duration of 90 seconds as this seemed to provide good balance between the test
duration and reliability and consistency of results.
In the following tests, SampleConsoleServer and UaPerfClient applications were
run with explicitly defined JVM options in order to make sure that the applications
would not run out of memory. These command line options were:
Xmx2048m Xms2048m
In table 13 it can be seen that 3000 value requests 100 times per second is
clearly out of reach for the tested server. The total duration should be 90 but
it is prolonged to 120 seconds. More clearly, the round-trip values have become
unsustainable averaging at over one minute. At the level of 2500 value requests 100
times per second, the server is already pretty stressed and round-trip times have
grown noticeably. Still at this level of batchsize 2500, the throughput remains good.
Table 13: Measurement with client 1 and variable amount of nodes to read
nodesToRead Total dura- Average Max (ms) 90th per- Throughput
tion (s) (ms) centile (responses
(ms) per second)
100 90 1.8 36.4 1.9 9998.3
500 90 6.6 143.1 6.5 49988.5
1000 90 16.4 813.4 13.4 99982.7
1500 90 28.2 1108.3 17.0 149971.8
2000 90 53.8 2511.7 26.6 199928.9
2500 90 103.8 3060.6 62.5 249922.7
3000 120 64030.1 112318.4 92214.8 223641.6
Many OPC UA servers have a setting that can be used to limit the number of
simultaneous sessions. There must be some background to this setting, so testing
the possible number of sessions is an interesting part of the read functionality. In
order to reliably overload the server and be able to observe differences between OPC
UA server applications, suitable values for batchsize and rate were selected. Based
on previous tests, the number of batchsize 100 and rate 100 were deemed suitable.
Amount of sessions was varied while the batchsize and rate were kept at these values.
The test was run with SampleConsoleServer on the server machine and UaPerf-
Client application on the Client1 machine. Server application was restarted after
each test run. Results are shown in table 14. It is visible that the response times
start to degrade rapidly with rising amount of sessions. However, the user might not
notice this because only at the level of 25 sessions does the total duration start to
rise and even at this level the throughput remains pretty much at the desired level.
After 30 sessions, it is clear that the server application is not working correctly. Here
the drop in throughput is clearly visible.
40
Table 15: Measurement with two client machines and 15 sessions each
Client Sessions Duration Average Max (ms) 90th per- Throughput
(s) (ms) centile (responses
(ms) per second)
1 15 90 13.3 377.5 14.9 149967.7
2 15 90 64.3 2265.5 24.8 149986.8
1 16 95 2531.5 13275.5 8959.0 151527.3
2 16 99 2192.5 13337.5 8413.6 145111.6
41
Next logical test is to test when the UA Demo Server reaches its throughput
limit. To assess this, the amount of sessions was grown from the 30. Results are
shown in table 17. Up to the level of 35 sessions from one client, the UA Demo
Server works quite correctly. At this level, again, total duration and round-trip times
start to grow. Also, the throughput level gets lower, even though only a little. Only
one session more, and on the level of 36 sessions, each reading 100 values 100 times
a second, this particular server setup will not be able to handle all requests. It is
interesting that the drop in server performance happens so fast in this situation. It
seems that about 350,000 reads per second can be handled by the server in this case
and the maximum is something below 360,000 reads per second.
Table 17: Measurement with variable amount of sessions and Ua Demo Server.
Sessions Total Average (ms) Max (ms) 90th percentile Throughput
dura- (ms) (responses per
tion second)
(s)
30 90 9.2 259.2 15.7 299951.3
31 90 9.8 325.4 16.7 309933.8
32 90 10.5 212.0 17.4 319945.6
33 90 63.5 337.4 124.9 329602.8
34 90 14.1 170.2 22.8 339949.6
35 92 181.8 401.1 238.5 348981.7
36 100 351.0 2789.0 634.4 22341.0
To test this hypothesis that about 360,000 values can be read from this particular
server per second, two physical client machines were used. Here, the two test
applications were started at the same time. Results are shown in table 18. In the
case of two clients both initiating 17 sessions, the server is not able to respond to
the load. This test shows that server throughput is something between 320,000 and
360,000 reads per second. It is noticeable that in the case of SampleConsoleServer,
two physical machines noticed larger throughput than one physical machine only. In
the case of UA Demo Server, the inverse is true. This is something that seems to be
implementation specific.
During these measurements, the CPU and memory consumption of the server
and client hosts was monitored manually. An interesting feature was noticed. The
two OPC UA servers had clearly a different kind of implementation which was
visible in the way they used CPU on the server machine. Figure 12 shows how the
42
Table 18: Measurement with variable amount of sessions and UA Demo Server. Client
1 and 2 were used the same time.
Sessions Total Average (ms) Max (ms) 90th percentile Throughput
dura- (ms) (responses per
tion second)
(s)
13 90 8.3 97.7 13.3 129978.9
13 90 6.3 28.9 12.1 129986.8
14 90 5.3 66.3 8.6 139983.6
14 90 5.4 25.5 9.5 139986.1
15 90 8.7 61.6 15.9 149963.3
15 90 9.2 48.2 14.7 149981.2
16 90 184.2 255.1 236.0 159971.4
16 90 182.2 254.7 234.8 159613.7
17 100 273.1 2977.6 424.8 7894.8
17 100 410.8 3552.3 1863.0 13787.6
SampleConsoleServer used CPU. This shows that all CPU cores are working quite
symmetrically. On the other hand, figure 13 shows that the UA Demo Server was
working in a different fashion. One of the CPU cores is fully utilized (first from the
left in the picture), other is about 1/3 occupied (rightmost) and two cores are almost
not used at all (two in the middle). It is also evident that the memory usage differs
significantly between the servers. In figure 13 the memory usage is practically fixed
whereas in figure 12 the memory grows rapidly. These kinds of reproducible test
cases can be used to empirically quantify the benefit achieved from changes to the
server side application. One important continuation is to look at why the memory is
consumed and whether the working of the server can be changed. This however is
outside the scope of this thesis.
43
Figure 12: SampleConsoleServer CPU usage with 300000 value attribute reads per
second (30 session reading 100 values 100 times a second)
Figure 13: Ua Demo Server CPU usage with same settings as in figure 12
44
Table 19: Measurement with variable amount of monitored items. Number of sessions
and subscriptions is always one.
Publish requests
Max. updates
Min. updates
Data changes
Duration (s)
1 180 180 180 180 0.99 16 25 23 180 180
1,000 180 180 180000 180 999 16 24 22 180 180
10,000 181 181 1810000 180 10051 22 32 29 181 181
100,000 361 361 18050000 180 100248 38 124 44 361 361
Table 20: Measurement with two client machines and 100,000 monitored items.
Max. updates
Min. updates
Data changes
Duration (s)
Client
grown amount of publish requests. The "Min. updates" and "Max. updates" fields
indicate the minimum and maximum amount of publish responses per subscription.
In table 19 it is clear that the delay is the only thing that really grows as the
number of monitored items grows. Based on table 20, it can be seen that throughput
remains the same even when two clients are subscribed to 100000 items at the same
time. The delay grows, but throughput is on the same level as previously. Between
these measurements the clocks were synced, so the absolute delay times are different.
What we are trying to find is whether or not the delay grows in the server side
application. The server side is not the bottleneck and it can be concluded that the
server is capable of handling 200000 monitored items simultaneously. The server
CPU usage level was 20% when 200000 monitored items were requested once per
second. The number of publish requests and publish responses is different based on
whether the tests are run concurrently. This seems weird and the reason for this
needs to be studied. However, examining this detail is outside of the scope of this
thesis.
46
100000 monitored items each changing per second can be considered a large
amount and next we should consider the case where the number of subscriptions
is other than 1. Let us start with 1000 monitored items per subscription and start
growing the number of subscriptions. With growing number of subscriptions it quickly
becomes clear that actually creating subscriptions can be time consuming. When
creating 100 subscriptions takes 19 seconds, creating 500 subscriptions takes already
472 seconds in this setup.
Results in table 21 show that "items per second" value is not keeping up with
the actual amount of data changes when amount of subscriptions and monitored
items is growing. For example, in the case of 300 subscriptions, there should be
300000 items changing per second, and only 292314 changes are reported to the client.
From the average and 0.9 percentile delay not much can be stated other than they
do not seem to change much. From the max delay it can be stated that it clearly
gets bigger with more subscriptions. The minimum and maximum subscription ID
measurements come in handy here and show clear difference. In the case of 300
subscriptions, at least one subscription got publish response through to the client
only 147 times, although the number should be 180 for all subscriptions. The first
test case where the drop in subscription frequency is seen is the test case with 1
sessions, 20 subscriptions and 1000 monitored items. One thing that can be reasoned
from this table is that creating subscriptions requires more resources and is more
heavy than using monitored items. While the same server and client combination
handled 100,000 monitored items easily, the combination seems to be incapable of
reliably handling 100 subscriptions with 1000 monitored items each.
Table 21: Measurement with variable amount of subscriptions 0.9 percentile (ms)
Publish responses
Max. updates
Min. updates
Data changes
Subscriptions
Duration (s)
Next the case where different amount of sessions is used is considered. In a normal
use case of OPC UA, the client would probably make many monitored items but
only small amount of subscriptions. Also, in previous test case it was confirmed that
47
Max. updates
Min. updates
Data changes
Duration (s)
Sessions
To test whether or not the client side application was the bottleneck, a test case
with two physical machines hosting a test application with 50 sessions was made,
see table 23. If this test shows similar results as the test in table 22, then it can be
argued that the client side test application is the bottleneck. If on the other hand,
the throughput is lower, then server side is most probably the bottleneck. Results
show that the client side test application probably is not the bottleneck. From these
results, no definite limit for the subscription performance can be decided. At least the
test case depicted in table 23 is clearly out of the reach for the SampleConsoleServer
in the depicted hardware platform. Also, it could be argued that the test case for 20
sessions in table 22 is not sustainable as some subscriptions only get 163 responses
through whereas they should get 180 responses through to the client. In a normal
production system, the amount of data notification would probably fluctuate and
48
it seems that the server could probably sustain momentary overload for some time
without crashing.
Max. updates
Min. updates
Data changes
Duration (s)
Sessions
1 50 72584 72562 66950570 180 371901 679 2057 706 137 166
2 50 74013 73993 69228285 180 384436 303 4359 317 141 175
As in the case of read testing, a different OPC UA server was tested to see whether
or not some differences between OPC UA implementations exist. The same settings
were used as in previous testing with growing amount of sessions. The updates per
subscription show different values than previously but this is normal as the variable
in question might not be actually changing every second. These tests were started
for example with the following command line options:
n " ns =4; s=Counter1 " c l i e n t s 1 s u b s c r i p t i o n s 10 i t e m s
1000 d u r a t i o n 180 opc . t cp :// < ipa d d r e s s >:4841
Table 24: Measurements with UA Demo Server. See table 22 for comparison.
0.9 percentile (ms)
Publish responses
Max. updates
Min. updates
Data changes
Duration (s)
Sessions
Figure 14: UA Demo Server error when 30 sessions make 10 subscriptions each
containing 1000 monitored items.
Results for UA Demo Server in the table 24 show similar results as in Sample-
ConsoleServer test up to the case of 10 sessions. The subscriptions show somewhat
different results but overall everything seems to go properly. After this, with test
cases 20 sessions and 30 sessions, the drop in throughput can be observed in the
minimum and maximum subscriptions IDs (min. updates and max. updates). Finally,
with test case of 30 sessions, the server stops working correctly. One interesting
thing is that the measured delay does not grow very much. Thus, it can be said
that the server is not able to handle all subscriptions correctly, but those publish
responses that it sends arrive at the client pretty quickly. Another difference between
SampleConsoleServer and UA Demo Server can be observed in the minimum and
maximum subscriptions IDs. Taking the 30 sessions test case as an example, the
SampleConsoleServer provides figures of minimum 143 and maximum of 186 publish
responses per subscriptions. In this same case, UA Demo Server provides correspond-
ing figures of 83 and 84. Even though UA Demo Server clearly is not sending all
publish responses, it is sending an equal amount of responses per subscription. In
SampleConsoleServer, some subscriptions send much less publish responses than
others.
Because of the error shown in figure 14, measurements with more sessions than 30
were not made. This however raises the question whether the crashing was somehow
caused by the client. To test whether or not this really was the limit of the server, a
test case was prepared where two physical client machines started 15 sessions each. In
this case the server application did not crash, which was a little surprising. This again
shows the importance of using actual physically different machines in performance
tests. Results of this test are shown in table 25. Based on this it seems that this
really was the limit that the server could handle. This is because the combined
items per second measurement shows similar value as in the test with one physical
50
machine and 30 sessions. This is also true for the data changes measurement. Also,
minimum and maximum subscription ID frequencies are the same as in the test case
with one physical machine. This validates that the test client works and can overload
the server.
Table 25: Measurements with two physical machines subscribing to 15 sessions each.
Max. updates
Min. updates
Data changes
Duration (s)
Sessions
8 Conclusions
OPC UA allows the user to configure security mode settings flexibly. Overhead of
security modes were assessed with elapsed time measurements. Adding signing or
encryption imposes overhead to OPC UA communication. With larger message sizes,
the overhead is proportionally larger. With less powerful hardware, the overhead
is larger in absolute measures but not necessarily in relative measures. General
statements in performance studies are dangerous. However it is fairly safe to say
that with desktop grade hardware the overhead of encryption is negligible. With
embedded hardware some consideration should be applied, but in a normal case
there should be no problem. Signing messages adds considerably less overhead than
encrypting messages.
With read and subscription testing, an example test client was presented. This
serves as a proof-of-concept for the idea of a generic response time test client for
OPC UA servers. The client was developed with the purpose that it could overload
server applications. Multiple differences between the tested servers were observed.
Read service testing offered an insight into how much read requests the servers are
able to handle. The tested servers proved to be able to handle hundreds of thousands
of value reads per second. In this particular setup, the Prosys OPC UA Java SDK
based SampleConsoleServer was able to handle 250,000 - 300,000 reads per second
and the Unified Automation C++ UA SDK based UA Demo Server was able to
handle 320,000 - 350,000 reads per second. The testing also showed that there are
differences between different server implementations in terms of resource usage.
In subscription testing, the limit of sessions, subscriptions and monitored items
of the two example server applications were studied. Both servers were able to
handle hundreds of thousands of monitored items changing once per second. For both
servers, the test case with 300,000 monitored items allocated to 300 subscriptions
and 30 sessions can be considered as an upper limit in this particular setup. For UA
Demo Server, this test case resulted in error which stopped the server application.
For SampleConsoleServer, the limit was observed in that some subscriptions did not
send publish responses with the desired frequency. Testing confirmed the fact that
normally multiple monitored items should be made instead of multiple subscriptions.
During subscription testing and in high load situations, the tested servers handled
subscriptions differently which was clearly visible in the minimum and maximum
number of publish responses per subscription. When an application is saturated
with more requests than it can handle, the outcome can be graceful degradation or
abrupt ending of all application functionality. The tested servers exhibited different
behaviour also in this area.
One of the research questions was to figure out what kind of issues surround
performance testing of OPC UA applications. Testing that all data notifications
arrive reliably from subscriptions under heavy load proved to be difficult. This
reliability is also perhaps the most central feature of subscriptions and thus, this
aspect should be figured out. However, with small and moderate load the tested
OPC UA servers handled all value updates reliably.
The test client developed during this thesis proved to be practical when analysing
52
OPC UA server applications. Reproducible test cases that are easy to run proved
to be useful in product development work. During performance testing, parameters
with most effect on read and subscription performance were uncovered. Thus, it
can be argued that this thesis provides information that is valuable for product
development of OPC UA SDKs as well as to users of OPC UA applications. There
are many features that could be added to the test client. For example, support for
more services could be added. Write and browse services are the most obvious ones.
Also, more configuration options for existing services could be added. For example,
now the reads and subscriptions were always made to only one node. This thesis
concentrated on server side testing. A possible future agenda could be to broaden
the scope to client side testing.
53
References
[1] T. Sauter and M. Lobashov, How to access factory floor information using
internet technologies and gateways, Industrial Informatics, IEEE Transactions
on, vol. 7, pp. 699712, Nov 2011.
[2] W. Mahnke, S.-H. Leitner, and M. Damm, OPC Unified Architecture. Springer,
2009.
[3] Iec webstore: Iec/tr 62541-1:2010, opc unified architecture - part 1. http:
//webstore.iec.ch/webstore/webstore.nsf/Artnum_PK/43769. Accessed:
2015-04-01.
[4] OPC Foundation. OPC Unified Architecture Specification, Part 1: Overview
and Concepts. Release 1.03. 2015.
[5] P. Piirainen, Opc ua based remote access to agricultural field machines, masters
thesis, Aalto University, 2014.
[6] A. Claassen, S. Rohjans, and S. Lehnhoff, Application of the opc ua for the
smart grid, in Innovative Smart Grid Technologies (ISGT Europe), 2011 2nd
IEEE PES International Conference and Exhibition on, pp. 18, IEEE, 2011.
[7] Intel, Ascolab, and Unified Automation, Reducing product
development effort for opc unified architecture. white paper:
http://www.ascolab.com/en/company-media/company-press-releases/150-
intel-case-study.html, 2009.
[8] Opc-ua end user considerations. https://wikis.web.cern.ch/wikis/
display/EN/OPC-UA+End+User+Considerations. Accessed: 2015-03-30.
[9] Prosys PMS Ltd. OPC UA Client Java SDK & OPC UA Server Java SDK.
2015. http://www.prosysopc.com/.
[10] D. Mosberger and T. Jin, httperfa tool for measuring web server performance,
ACM SIGMETRICS Performance Evaluation Review, vol. 26, no. 3, pp. 3137,
1998.
[11] A. Bog, Benchmarking transaction and analytical processing systems : the
creation of a mixed workload benchmark and its application. Springer, 2014.
[12] M. Fojcik and K. Folkert, Introduction to opc ua performance, in Computer
Networks (A. Kwiecie, P. Gaj, and P. Stera, eds.), vol. 291 of Communications
in Computer and Information Science, pp. 261270, Springer Berlin Heidelberg,
2012.
[13] C. Groba and S. Clarke, Web services on embedded systems - a performance
study, in Pervasive Computing and Communications Workshops (PERCOM
Workshops), 2010 8th IEEE International Conference on, pp. 726731, March
2010.
54
[30] T. Burke, The performance and throughput of opc, tech. rep., Rockwell Soft-
ware Inc., 1998. White paper, available: http://www.ascolab.com/images/
stories/ascolab/doc/opc_performance.pdf last accessed 27.02.2015.
[32] O. Post, J. Seppl, and H. Koivisto, The performance of opc-ua security model
at field device level., in ICINCO-RA, pp. 337341, 2009.
[36] S. Rohjans, Semantic Service Integration for Smart Grids, vol. 14 of Studies on
the Semantic Web. IOS Press, 2012.
[37] S. Chilingaryan and W. Eppler, High speed data exchange protocol for mod-
ern distributed data acquisition systems based on opc xml-da, in Real Time
Conference, 2005. 14th IEEE-NPSS, pp. 5 pp., June 2005.