EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Problem with huge waveforms in EPICS 7
From: Michael Davidsaver via Core-talk <core-talk at aps.anl.gov>
To: "Zimoch Dirk (PSI)" <dirk.zimoch at psi.ch>
Cc: "core-talk at aps.anl.gov" <core-talk at aps.anl.gov>
Date: Mon, 27 Jun 2022 07:51:06 -0700
On 6/27/22 06:56, Zimoch Dirk (PSI) via Core-talk wrote:
On Mon, 2022-06-27 at 15:12 +0200, Zimoch Dirk wrote:
The problem appears between commit 4ab98081 and 56f05d72. (The two commits in between do not produce stable code.)


Ben did some code refactoring of db_field_log which changed array handling.

In particular in dbEvent.c the following snipped disappeared from db_queue_event_log()

     /*
      * if we have an event on the queue and both the last
      * event on the queue and the current event are emtpy
      * (i.e. of type dbfl_type_rec), simply ignore duplicate
      * events (saving empty events serves no purpose)
      */
     if (pevent->npend > 0u &&
         (*pevent->pLastLog)->type == dbfl_type_rec &&
         pLog->type == dbfl_type_rec) {
         db_delete_field_log(pLog);
         UNLOCKEVQUE (ev_que);
         return;
     }

I have added a debug printf in this code and see that it triggers whenever a frame is dropped. That is about 3 out of 4
frames in my test case.

It is not trivial to put back the code because dbfl_type_rec disappeared from enum dbfl_type too.

I think the (untested) equivalent would now be:

diff --git a/modules/database/src/ioc/db/dbEvent.c b/modules/database/src/ioc/db/dbEvent.c
index 0164f55b9..480784d1e 100644
--- a/modules/database/src/ioc/db/dbEvent.c
+++ b/modules/database/src/ioc/db/dbEvent.c
@@ -789,6 +789,18 @@ static void db_queue_event_log (evSubscrip *pevent, db_field_log *pLog)
LOCKEVQUE (ev_que); + /* if we have an event on the queue and both the last
+     * event on the queue and the current event are empty,
+     * simply ignore duplicate events.
+     */
+    if (pevent->npend > 0u
+            && !dbfl_has_copy(*pevent->pLastLog)
+            && !dbfl_has_copy(pLog)) {
+        db_delete_field_log(pLog);
+        UNLOCKEVQUE (ev_que);
+        return;
+    }
+
     /*
      * add to task local event que
      */

Replies:
RE: Problem with huge waveforms in EPICS 7 Mark Rivers via Core-talk
References:
Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk
Re: Problem with huge waveforms in EPICS 7 Andrew Johnson via Core-talk
Re: Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk
Re: Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk
Re: Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk
Re: Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk
Re: Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk

Navigate by Date:
Prev: Re: Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk
Next: [Bug 1424092] Re: epicsAssert() message lost mdavidsaver via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
Navigate by Thread:
Prev: Re: Problem with huge waveforms in EPICS 7 Zimoch Dirk (PSI) via Core-talk
Next: RE: Problem with huge waveforms in EPICS 7 Mark Rivers via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
ANJ, 14 Sep 2022 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·