lighthouse/testing/ef_tests/src
Jimmy Chen 2de3451011 Rate limiting backfill sync (#3936)
## Issue Addressed

#3212 

## Proposed Changes

- Introduce a new `rate_limiting_backfill_queue` - any new inbound backfill work events gets immediately sent to this FIFO queue **without any processing**
- Spawn a `backfill_scheduler` routine that pops a backfill event from the FIFO queue at specified intervals (currently halfway through a slot, or at 6s after slot start for 12s slots) and sends the event to `BeaconProcessor` via a `scheduled_backfill_work_tx` channel
- This channel gets polled last in the `InboundEvents`, and work event received is  wrapped in a `InboundEvent::ScheduledBackfillWork` enum variant, which gets processed immediately or queued by the `BeaconProcessor` (existing logic applies from here)

Diagram comparing backfill processing with / without rate-limiting: 
https://github.com/sigp/lighthouse/issues/3212#issuecomment-1386249922

See this comment for @paulhauner's  explanation and solution: https://github.com/sigp/lighthouse/issues/3212#issuecomment-1384674956

## Additional Info

I've compared this branch (with backfill processing rate limited to to 1 and 3 batches per slot) against the latest stable version. The CPU usage during backfill sync is reduced by ~5% - 20%, more details on this page:

https://hackmd.io/@jimmygchen/SJuVpJL3j

The above testing is done on Goerli (as I don't currently have hardware for Mainnet), I'm guessing the differences are likely to be bigger on mainnet due to block size.

### TODOs

- [x] Experiment with processing multiple batches per slot. (need to think about how to do this for different slot durations)
- [x] Add option to disable rate-limiting, enabed by default.
- [x] (No longer required now we're reusing the reprocessing queue) Complete the `backfill_scheduler` task when backfill sync is completed or not required
2023-04-03 03:02:55 +00:00
..
cases Rate limiting backfill sync (#3936) 2023-04-03 03:02:55 +00:00
bls_setting.rs Bump the MSRV to 1.62 and using #[derive(Default)] on enums (#3304) 2022-07-15 07:31:19 +00:00
case_result.rs Rust 1.54.0 lints (#2483) 2021-07-30 01:11:47 +00:00
cases.rs Added Merkle Proof Generation for Beacon State (#3674) 2022-11-08 01:58:18 +00:00
decode.rs Replace OpenOptions::new with File::options to be readable (#3059) 2022-03-07 06:30:18 +00:00
error.rs Add fork choice EF tests (#2737) 2021-11-08 07:29:04 +00:00
handler.rs Fork choice modifications and cleanup (#3962) 2023-03-21 07:34:41 +00:00
lib.rs add historical summaries (#3865) 2023-01-11 12:40:21 +11:00
results.rs Rust 1.54.0 lints (#2483) 2021-07-30 01:11:47 +00:00
type_name.rs Clean capella (#4019) 2023-03-01 03:19:02 +00:00