From 931153885c56f612e5796ebab7569e108b59f517 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Fri, 19 Aug 2022 04:27:24 +0000 Subject: [PATCH] Run per-slot fork choice at a further distance from the head (#3487) ## Issue Addressed NA ## Proposed Changes Run fork choice when the head is 256 slots from the wall-clock slot, rather than 4. The reason we don't *always* run FC is so that it doesn't slow us down during sync. As the comments state, setting the value to 256 means that we'd only have one interrupting fork-choice call if we were syncing at 20 slots/sec. ## Additional Info NA --- beacon_node/beacon_chain/src/beacon_chain.rs | 6 +++++- beacon_node/beacon_chain/src/state_advance_timer.rs | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs index 2cb33d7da..4d37926dd 100644 --- a/beacon_node/beacon_chain/src/beacon_chain.rs +++ b/beacon_node/beacon_chain/src/beacon_chain.rs @@ -131,7 +131,11 @@ const PREPARE_PROPOSER_HISTORIC_EPOCHS: u64 = 4; /// run the per-slot tasks (primarily fork choice). /// /// This prevents unnecessary work during sync. -const MAX_PER_SLOT_FORK_CHOICE_DISTANCE: u64 = 4; +/// +/// The value is set to 256 since this would be just over one slot (12.8s) when syncing at +/// 20 slots/second. Having a single fork-choice run interrupt syncing would have very little +/// impact whilst having 8 epochs without a block is a comfortable grace period. +const MAX_PER_SLOT_FORK_CHOICE_DISTANCE: u64 = 256; /// Reported to the user when the justified block has an invalid execution payload. pub const INVALID_JUSTIFIED_PAYLOAD_SHUTDOWN_REASON: &str = diff --git a/beacon_node/beacon_chain/src/state_advance_timer.rs b/beacon_node/beacon_chain/src/state_advance_timer.rs index 48c0f2f8a..4359b6f1e 100644 --- a/beacon_node/beacon_chain/src/state_advance_timer.rs +++ b/beacon_node/beacon_chain/src/state_advance_timer.rs @@ -38,7 +38,11 @@ use types::{AttestationShufflingId, EthSpec, Hash256, RelativeEpoch, Slot}; const MAX_ADVANCE_DISTANCE: u64 = 4; /// Similarly for fork choice: avoid the fork choice lookahead during sync. -const MAX_FORK_CHOICE_DISTANCE: u64 = 4; +/// +/// The value is set to 256 since this would be just over one slot (12.8s) when syncing at +/// 20 slots/second. Having a single fork-choice run interrupt syncing would have very little +/// impact whilst having 8 epochs without a block is a comfortable grace period. +const MAX_FORK_CHOICE_DISTANCE: u64 = 256; #[derive(Debug)] enum Error {