EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026 Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026
<== Date ==> <== Thread ==>

Subject: Re: PVXS and CA Put benchmark
From: Michael Davidsaver via Tech-talk <tech-talk at aps.anl.gov>
To: Bernardo Brotas Carvalho <bernardo.carvalho at tecnico.ulisboa.pt>
Cc: tech-talk at aps.anl.gov
Date: Mon, 11 May 2026 18:06:23 -0700
softIocPVX (aka. QSRV2) has mainly seen optimization work for the MONITOR operation, which is by far the most widely used.  The PUT operation has seen less effort, so it is not surprising to find differences.  See:


On 5/2/26 12:23 AM, Bernardo Brotas Carvalho wrote:
Thanks for the replies.

I didn’t mention, but my tests were first done with a “softIocPVX", which it seems not doing a great job…

I repeat it now with a softIocPVA, and now the performance did level up:

 ./put_pvxs
=== EPICS PVXS Put Benchmark: 1000 PVs ===

[PHASE 1] Creating PVXS client...
  Client creation time:  1.47648 ms

  Connect time:          31.721 ms
[PHASE 2] Issuing put requests...
  Put issue time:        8.59501 ms
  Puts issued: 1000

[PHASE 3] Waiting for put completions...
  Wait time:             78.9013 ms
  Completed: 1000/1000 puts

=== SUMMARY ===
  Client creation:       1.47648 ms (1.22253%)
  Put issue phase:       8.59501 ms (7.11672%)
  Wait phase:            78.9013 ms (65.3307%)
  ---------------------------------
  TOTAL TIME:            120.772 ms
  Throughput:            8280.06 puts/sec


On 23 Apr 2026, at 11:05, Michael Davidsaver <mdavidsaver at gmail.com> wrote:

On 4/22/26 7:30 PM, Bernardo Brotas Carvalho via Tech-talk wrote:
Hi Epics tech-talkers,

While working on a prototype gateway to a WinCCOA  I ended up using PVXS C++ client library,
but I was a little surprised by the relatively low Throughput (when compared to a plain CA client), 
when making a bunch of "puts" to 1000 ai-PVs, served by a softIocPVX.

A couple of thoughts.

Overall put_pvxs.cpp is structured correctly, so the PUTs are being issued in parallel.

After exec()ing all Operations, you could call client::Context::hurryUp() [1].  Somewhat analogous to ca_flush_io(), this optional hint can speed up the search phase.  If you want to understand the effect, you can set:


export PVXS_LOG=pvxs.client.setup=DEBUG
Look for messages mentioning "hurryUp()" [2].

Also, you and your friend might wish to read about std::condition_variable or epicsEvent instead of sleep_for() in a loop ;)


[1] https ://epics-base.github.io/pvxs/client.html#_CPPv4N4pvxs6client7Context7hurryUpEv

[2] https ://github.com/epics-base/pvxs/blob/3d854e492c44261ca25541dfda2177e934efb8b7/src/client.cpp#L723-L731



My first result, made on a 10 year old Intel PC where:

## PVXS Client
=== EPICS PVXS Put Benchmark: 1000 PVs ===
=== SUMMARY ===
  Client creation:       1.02404 ms (0.100708%)
  Put issue phase:       4.97025 ms (0.488793%)
  Wait phase:            1010.81 ms (99.4072%)
  ---------------------------------
  TOTAL TIME:            1016.84 ms
  Throughput:            983.437 puts/sec

## CA Client
=== EPICS CA Put Benchmark: 1000 PVs ===
…. 
=== SUMMARY ===
  Connect phase:         100.629 ms (95.7%)
  Put issue phase:       0.195 ms (0.2%)
  Wait phase:            4.252 ms (4.0%)
  ---------------------------------
  TOTAL TIME:            105.130 ms
  Throughput:            9512.0 puts/sec

A second test, performed on an more recent 40-core Intel(R) Xeon(R) CPU, and using PV grouping, pool, threading, etc. 
( 50 groups of ~20 PVs each), gave me ~2000 puts/sec for PVXS , but still far from CA.

My Env is:
EPICS_CA_ADDR_LIST=localhost
EPICS_CA_AUTO_ADDR_LIST=NO
EPICS_PVA_ADDR_LIST=localhost
EPICS_PVA_AUTO_ADDR_LIST=NO
EPICS_PVA_NAME_SERVERS=localhost

Am I missing something?

In case of interest, my codes made “With a Little Help From My AI Friends”, are in:

Thanks in advance

Bernardo
IPFN-IST Portugal








References:
PVXS and CA Put benchmark Bernardo Brotas Carvalho via Tech-talk
Re: PVXS and CA Put benchmark Michael Davidsaver via Tech-talk
Re: PVXS and CA Put benchmark Bernardo Brotas Carvalho via Tech-talk

Navigate by Date:
Prev: Re: Pva Michael Davidsaver via Tech-talk
Next: Re: Understanding alarms, alarm server and notification usage in other facilities Michael Davidsaver via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026
Navigate by Thread:
Prev: Re: PVXS and CA Put benchmark Bernardo Brotas Carvalho via Tech-talk
Next: BO which should switch to 1 whenever processed Majer Karel via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026
ANJ, 11 May 2026 · Home · News · About · Talk · Base · Modules · Extensions ·
· Distributions · Download · Documents · Links · Licensing ·