Skip to content

pack: pack is responsible for ending leader slots #5500

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/app/fdctl/topology.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ fd_topo_initialize( config_t * config ) {
fd_topob_wksp( topo, "dedup_resolv" );
fd_topob_wksp( topo, "resolv_pack" );
fd_topob_wksp( topo, "pack_bank" );
fd_topob_wksp( topo, "pack_poh" );
fd_topob_wksp( topo, "bank_pack" );
fd_topob_wksp( topo, "bank_poh" );
fd_topob_wksp( topo, "bank_busy" );
Expand Down Expand Up @@ -75,6 +76,7 @@ fd_topo_initialize( config_t * config ) {
/* pack_bank is shared across all banks, so if one bank stalls due to complex transactions, the buffer neeeds to be large so that
other banks can keep proceeding. */
/**/ fd_topob_link( topo, "pack_bank", "pack_bank", 65536UL, USHORT_MAX, 1UL );
/**/ fd_topob_link( topo, "pack_poh", "pack_poh", 128UL, sizeof(fd_done_packing_t), 1UL );
FOR(bank_tile_cnt) fd_topob_link( topo, "bank_poh", "bank_poh", 16384UL, USHORT_MAX, 1UL );
FOR(bank_tile_cnt) fd_topob_link( topo, "bank_pack", "bank_pack", 16384UL, USHORT_MAX, 3UL );
/**/ fd_topob_link( topo, "poh_pack", "bank_poh", 128UL, sizeof(fd_became_leader_t), 1UL );
Expand Down Expand Up @@ -170,14 +172,15 @@ fd_topo_initialize( config_t * config ) {
/**/ fd_topob_tile_in( topo, "pack", 0UL, "metric_in", "poh_pack", 0UL, FD_TOPOB_UNRELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "pack", 0UL, "metric_in", "executed_txn", 0UL, FD_TOPOB_UNRELIABLE, FD_TOPOB_POLLED );
fd_topob_tile_out( topo, "pack", 0UL, "pack_bank", 0UL );
fd_topob_tile_out( topo, "pack", 0UL, "pack_poh", 0UL );
FOR(bank_tile_cnt) fd_topob_tile_in( topo, "bank", i, "metric_in", "pack_bank", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
FOR(bank_tile_cnt) fd_topob_tile_out( topo, "bank", i, "bank_poh", i );
FOR(bank_tile_cnt) fd_topob_tile_out( topo, "bank", i, "bank_pack", i );
FOR(bank_tile_cnt) fd_topob_tile_in( topo, "poh", 0UL, "metric_in", "bank_poh", i, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
if( FD_LIKELY( config->tiles.pack.use_consumed_cus ) )
FOR(bank_tile_cnt) fd_topob_tile_in( topo, "pack", 0UL, "metric_in", "bank_pack", i, FD_TOPOB_UNRELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "poh", 0UL, "metric_in", "stake_out", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "poh", 0UL, "metric_in", "pack_bank", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "poh", 0UL, "metric_in", "pack_poh", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_out( topo, "poh", 0UL, "poh_shred", 0UL );
/**/ fd_topob_tile_out( topo, "poh", 0UL, "poh_pack", 0UL );
FOR(shred_tile_cnt) for( ulong j=0UL; j<net_tile_cnt; j++ )
Expand Down Expand Up @@ -250,6 +253,7 @@ fd_topo_initialize( config_t * config ) {
/**/ fd_topob_tile_in( topo, "gui", 0UL, "metric_in", "plugin_out", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "gui", 0UL, "metric_in", "poh_pack", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "gui", 0UL, "metric_in", "pack_bank", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "gui", 0UL, "metric_in", "pack_poh", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
FOR(bank_tile_cnt) fd_topob_tile_in( topo, "gui", 0UL, "metric_in", "bank_poh", i, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
}

Expand Down
9 changes: 4 additions & 5 deletions src/disco/fd_disco_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@

#define POH_PKT_TYPE_MICROBLOCK (0UL)
#define POH_PKT_TYPE_BECAME_LEADER (1UL)
#define POH_PKT_TYPE_DONE_PACKING (2UL)
#define POH_PKT_TYPE_FEAT_ACT_SLOT (3UL)
#define POH_PKT_TYPE_FEAT_ACT_SLOT (2UL)

#define REPLAY_FLAG_FINISHED_BLOCK (0x01UL)
#define REPLAY_FLAG_PACKED_MICROBLOCK (0x02UL)
Expand Down Expand Up @@ -119,12 +118,12 @@ FD_FN_CONST static inline ulong fd_disco_poh_sig_bank_tile( ulong sig ) { return

FD_FN_CONST static inline ulong
fd_disco_bank_sig( ulong slot,
ulong microblock_idx ) {
return (slot << 32) | microblock_idx;
ulong pack_idx ) {
return (slot << 32) | pack_idx;
}

FD_FN_CONST static inline ulong fd_disco_bank_sig_slot( ulong sig ) { return (sig >> 32); }
FD_FN_CONST static inline ulong fd_disco_bank_sig_microblock_idx( ulong sig ) { return sig & 0xFFFFFFFFUL; }
FD_FN_CONST static inline ulong fd_disco_bank_sig_pack_idx( ulong sig ) { return sig & 0xFFFFFFFFUL; }

/* TODO remove with store_int */

Expand Down
8 changes: 5 additions & 3 deletions src/disco/gui/fd_gui_tile.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ extern uint const fdctl_commit_ref;
#define IN_KIND_PLUGIN (0UL)
#define IN_KIND_POH_PACK (1UL)
#define IN_KIND_PACK_BANK (2UL)
#define IN_KIND_BANK_POH (3UL)
#define IN_KIND_PACK_POH (3UL)
#define IN_KIND_BANK_POH (4UL)

FD_IMPORT_BINARY( firedancer_svg, "book/public/fire.svg" );

Expand Down Expand Up @@ -219,6 +220,8 @@ after_frag( fd_gui_ctx_t * ctx,
FD_TEST( fd_disco_poh_sig_pkt_type( sig )==POH_PKT_TYPE_BECAME_LEADER );
fd_became_leader_t * became_leader = (fd_became_leader_t *)ctx->buf;
fd_gui_became_leader( ctx->gui, fd_frag_meta_ts_decomp( tspub, fd_tickcount() ), fd_disco_poh_sig_slot( sig ), became_leader->slot_start_ns, became_leader->slot_end_ns, became_leader->limits.slot_max_cost, became_leader->max_microblocks_in_slot );
} else if( FD_UNLIKELY( ctx->in_kind[ in_idx ]==IN_KIND_PACK_POH ) ) {
fd_gui_unbecame_leader( ctx->gui, fd_frag_meta_ts_decomp( tspub, fd_tickcount() ), fd_disco_poh_sig_slot( sig ), ((fd_done_packing_t *)ctx->buf)->microblocks_in_slot );
} else if( FD_UNLIKELY( ctx->in_kind[ in_idx ]==IN_KIND_PACK_BANK ) ) {
if( FD_LIKELY( fd_disco_poh_sig_pkt_type( sig )==POH_PKT_TYPE_MICROBLOCK ) ) {
FD_TEST( sz<ULONG_MAX );
Expand All @@ -230,8 +233,6 @@ after_frag( fd_gui_ctx_t * ctx,
(sz-sizeof( fd_microblock_bank_trailer_t ))/sizeof( fd_txn_p_t ),
(uint)trailer->microblock_idx,
trailer->pack_txn_idx );
} else if( FD_LIKELY( fd_disco_poh_sig_pkt_type( sig )==POH_PKT_TYPE_DONE_PACKING ) ) {
fd_gui_unbecame_leader( ctx->gui, fd_frag_meta_ts_decomp( tspub, fd_tickcount() ), fd_disco_poh_sig_slot( sig ), ((fd_done_packing_t *)ctx->buf)->microblocks_in_slot );
} else {
FD_LOG_ERR(( "unexpected poh packet type %lu", fd_disco_poh_sig_pkt_type( sig ) ));
}
Expand Down Expand Up @@ -511,6 +512,7 @@ unprivileged_init( fd_topo_t * topo,
if( FD_LIKELY( !strcmp( link->name, "plugin_out" ) ) ) ctx->in_kind[ i ] = IN_KIND_PLUGIN;
else if( FD_LIKELY( !strcmp( link->name, "poh_pack" ) ) ) ctx->in_kind[ i ] = IN_KIND_POH_PACK;
else if( FD_LIKELY( !strcmp( link->name, "pack_bank" ) ) ) ctx->in_kind[ i ] = IN_KIND_PACK_BANK;
else if( FD_LIKELY( !strcmp( link->name, "pack_poh" ) ) ) ctx->in_kind[ i ] = IN_KIND_PACK_POH;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
else if( FD_LIKELY( !strcmp( link->name, "pack_poh" ) ) ) ctx->in_kind[ i ] = IN_KIND_PACK_POH;
else if( FD_LIKELY( !strcmp( link->name, "pack_poh" ) ) ) ctx->in_kind[ i ] = IN_KIND_PACK_POH;

else if( FD_LIKELY( !strcmp( link->name, "bank_poh" ) ) ) ctx->in_kind[ i ] = IN_KIND_BANK_POH;
else FD_LOG_ERR(( "gui tile has unexpected input link %lu %s", i, link->name ));

Expand Down
Loading
Loading