EPICS Home

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  2025  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024  2025 
<== 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  2025 
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  2025