@@ -247,6 +247,7 @@ fd_topo_initialize( config_t * config ) {
247
247
248
248
fd_topob_wksp ( topo , "replay_exec" );
249
249
fd_topob_wksp ( topo , "replay_wtr" );
250
+ fd_topob_wksp ( topo , "replay_grv" );
250
251
fd_topob_wksp ( topo , "exec_writer" );
251
252
252
253
fd_topob_wksp ( topo , "voter_sign" );
@@ -297,6 +298,7 @@ fd_topo_initialize( config_t * config ) {
297
298
fd_topob_wksp ( topo , "runtime_pub" );
298
299
fd_topob_wksp ( topo , "exec" );
299
300
fd_topob_wksp ( topo , "writer" );
301
+ fd_topob_wksp ( topo , "groove" );
300
302
fd_topob_wksp ( topo , "bstore" );
301
303
fd_topob_wksp ( topo , "tcache" );
302
304
fd_topob_wksp ( topo , "poh" );
@@ -310,6 +312,7 @@ fd_topo_initialize( config_t * config ) {
310
312
fd_topob_wksp ( topo , "exec_spad" );
311
313
fd_topob_wksp ( topo , "exec_fseq" );
312
314
fd_topob_wksp ( topo , "writer_fseq" );
315
+ fd_topob_wksp ( topo , "groove_fseq" );
313
316
314
317
if ( enable_rpc ) fd_topob_wksp ( topo , "rpcsrv" );
315
318
@@ -341,6 +344,7 @@ fd_topo_initialize( config_t * config ) {
341
344
message that is outbound from the replay to exec. */
342
345
FOR (exec_tile_cnt ) fd_topob_link ( topo , "replay_exec ", " replay_exec ", 128UL, 10240UL, exec_tile_cnt );
343
346
FOR (writer_tile_cnt ) fd_topob_link ( topo , "replay_wtr" , "replay_wtr" , 128UL , FD_REPLAY_WRITER_MTU , 1UL );
347
+ /**/ fd_topob_link ( topo , "replay_grv" , "replay_grv" , 128UL , FD_REPLAY_GROOVE_MTU , 1UL );
344
348
/* Assuming the number of writer tiles is sufficient to keep up with
345
349
the number of exec tiles, under equilibrium, we should have at least
346
350
enough link space to buffer worst case input shuffling done by the
@@ -448,6 +452,7 @@ fd_topo_initialize( config_t * config ) {
448
452
FOR (exec_tile_cnt ) fd_topob_tile ( topo , "exec ", " exec ", " metric_in ", tile_to_cpu[ topo->tile_cnt ], 0, 0 );
449
453
FOR (writer_tile_cnt ) fd_topob_tile ( topo , "writer" , "writer" , "metric_in" , tile_to_cpu [ topo -> tile_cnt ], 0 , 0 );
450
454
fd_topo_tile_t * batch_tile = fd_topob_tile ( topo , "batch" , "batch" , "metric_in" , tile_to_cpu [ topo -> tile_cnt ], 0 , 0 );
455
+ fd_topo_tile_t * groove_tile = fd_topob_tile ( topo , "groove" , "groove" , "metric_in" , tile_to_cpu [ topo -> tile_cnt ], 0 , 0 );
451
456
452
457
if ( enable_rstart ) /* */ fd_topob_tile ( topo , "rstart" , "restart" , "metric_in" , tile_to_cpu [ topo -> tile_cnt ], 0 , 0 );
453
458
@@ -562,6 +567,12 @@ fd_topo_initialize( config_t * config ) {
562
567
fd_topob_tile_uses ( topo , batch_tile , constipated_obj , FD_SHMEM_JOIN_MODE_READ_WRITE );
563
568
FD_TEST ( fd_pod_insertf_ulong ( topo -> props , constipated_obj -> id , "constipate" ) );
564
569
570
+ /* This fseq communicates the progress Groove is making to the Replay tile */
571
+ fd_topo_obj_t * groove_fseq_obj = fd_topob_obj ( topo , "fseq" , "groove_fseq" );
572
+ fd_topob_tile_uses ( topo , groove_tile , groove_fseq_obj , FD_SHMEM_JOIN_MODE_READ_WRITE );
573
+ fd_topob_tile_uses ( topo , replay_tile , groove_fseq_obj , FD_SHMEM_JOIN_MODE_READ_ONLY );
574
+ FD_TEST ( fd_pod_insertf_ulong ( topo -> props , groove_fseq_obj -> id , "groove_fseq" ) );
575
+
565
576
if ( FD_LIKELY ( !is_auto_affinity ) ) {
566
577
if ( FD_UNLIKELY ( affinity_tile_cnt < topo -> tile_cnt ) )
567
578
FD_LOG_ERR (( "The topology you are using has %lu tiles, but the CPU affinity specified in the config tile as [layout.affinity] only provides for %lu cores. "
@@ -664,6 +675,7 @@ fd_topo_initialize( config_t * config ) {
664
675
FOR (bank_tile_cnt ) fd_topob_tile_out ( topo , "replay ", 0UL, " replay_poh ", i );
665
676
FOR (exec_tile_cnt ) fd_topob_tile_out ( topo , "replay" , 0UL , "replay_exec" , i ); /* TODO check order in fd_replay.c macros*/
666
677
FOR (writer_tile_cnt ) fd_topob_tile_out ( topo , "replay ", 0UL, " replay_wtr ", i );
678
+ /**/ fd_topob_tile_out( topo, " replay ", 0UL, " replay_grv ", 0UL );
667
679
668
680
FOR (exec_tile_cnt ) fd_topob_tile_in ( topo , "exec" , i , "metric_in" , "replay_exec" , i , FD_TOPOB_RELIABLE , FD_TOPOB_POLLED );
669
681
FOR (exec_tile_cnt ) fd_topob_tile_out ( topo , "exec ", i, " exec_writer ", i );
@@ -672,6 +684,7 @@ fd_topo_initialize( config_t * config ) {
672
684
FOR (writer_tile_cnt ) for ( ulong j = 0UL ; j < exec_tile_cnt ; j ++ )
673
685
fd_topob_tile_in ( topo , "writer" , i , "metric_in" , "exec_writer" , j , FD_TOPOB_RELIABLE , FD_TOPOB_POLLED );
674
686
FOR (writer_tile_cnt ) fd_topob_tile_in ( topo , "writer ", i, " metric_in ", " replay_wtr ", i, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
687
+ /**/ fd_topob_tile_in( topo, " groove ", 0UL, " metric_in ", " replay_grv ", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
675
688
676
689
/**/ fd_topob_tile_in( topo, " sender ", 0UL, " metric_in ", " stake_out ", 0UL, FD_TOPOB_UNRELIABLE, FD_TOPOB_POLLED ); /* No reliable consumers of networking fragments, may be dropped or overrun */
677
690
/**/ fd_topob_tile_in( topo, " sender ", 0UL, " metric_in ", " gossip_voter ", 0UL, FD_TOPOB_UNRELIABLE, FD_TOPOB_POLLED ); /* No reliable consumers of networking fragments, may be dropped or overrun */
@@ -954,6 +967,9 @@ fd_topo_initialize( config_t * config ) {
954
967
strncpy ( tile -> exec .funk_file , config -> tiles .replay .funk_file , sizeof (tile -> exec .funk_file ) );
955
968
} else if ( FD_UNLIKELY ( !strcmp ( tile -> name , "writer" ) ) ) {
956
969
strncpy ( tile -> writer .funk_file , config -> tiles .replay .funk_file , sizeof (tile -> writer .funk_file ) );
970
+ } else if ( FD_UNLIKELY ( !strcmp ( tile -> name , "groove" ) ) ) {
971
+ strncpy ( tile -> groove .funk_file , config -> tiles .replay .funk_file , sizeof (tile -> groove .funk_file ) );
972
+ strncpy ( tile -> groove .cold_store_dir , config -> tiles .groove .cold_store_dir , sizeof (tile -> groove .cold_store_dir ) );
957
973
} else if ( FD_UNLIKELY ( !strcmp ( tile -> name , "rstart" ) ) ) {
958
974
strncpy ( tile -> restart .funk_file , config -> tiles .replay .funk_file , sizeof (tile -> replay .funk_file ) );
959
975
strncpy ( tile -> restart .tower_checkpt , config -> tiles .replay .tower_checkpt , sizeof (tile -> replay .tower_checkpt ) );
0 commit comments