Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Since 6/8/22, the DAQ code has been was updated to eliminate a separate buffer allocation mechanism (including the associated wait state when the pool is empty) for the small input and /result data buffers for/from the TEB.  These buffers are now allocated using the same index with which the pebble is allocated.  Since this index is now shared with the TEB, this change has put constraints on its range (set by the cfgRxCount parameter in the tdetsim/kcu service file) across DRPs.  A DRP in the common readout group must have the largest range and DRPs in subsidiary/slower readout groups must have smaller or the same range.

Roughly, if a DRP chain is stalled for some reason, the DMA buffers will be consummed at the trigger rate.  So in the above example, the HSDs will start back pressuring into firmware after roughly 1 second given a trigger rate of 1 MHz.  For a given trigger rate, it seems like there is no benefit to having one DRP have more or less DMA buffers than another.  The first one to run out of buffers will cause backpressure and ultimately inhibit triggers, leaving additional buffers on other DRPs inaccessible.  Thus, I suggest making the number of DMA buffers (cfgRxCount + 4) the same for each DRP in a given readout group and to roughly keep the cfgRxCounts in the same ratio as the trigger rates of the groups (while still following the 2**N - 4 rule of above).

Interrupt Coalescing

We think this can help with errors like:

...