24
24
#include "../../../util/pod/fd_pod_format.h"
25
25
#include "../../../discof/replay/fd_replay_notif.h"
26
26
#include "../../../discof/reasm/fd_reasm.h"
27
+ #include "../../../discof/restore/utils/fd_ssctrl.h"
27
28
#include "../../../flamenco/runtime/fd_runtime_public.h" /* FD_RUNTIME_PUBLIC_ACCOUNT_UPDATE_MSG_MTU */
28
29
#include "../main.h"
29
30
@@ -36,6 +37,8 @@ static void
36
37
backtest_topo ( config_t * config ) {
37
38
ulong exec_tile_cnt = config -> firedancer .layout .exec_tile_count ;
38
39
ulong writer_tile_cnt = config -> firedancer .layout .writer_tile_count ;
40
+ ulong snaplt_tile_cnt = config -> firedancer .layout .snaplt_tile_count ;
41
+ int snaplt_enabled = !config -> development .snapshots .disable_lthash_verification ;
39
42
40
43
fd_topo_t * topo = { fd_topob_new ( & config -> topo , config -> name ) };
41
44
topo -> max_page_size = fd_cstr_to_shmem_page_sz ( config -> hugetlbfs .max_page_size );
@@ -99,6 +102,14 @@ backtest_topo( config_t * config ) {
99
102
snapdc_tile -> allow_shutdown = 1 ;
100
103
snapin_tile -> allow_shutdown = 1 ;
101
104
105
+ if ( FD_LIKELY ( snaplt_enabled ) ) {
106
+ fd_topob_wksp ( topo , "snaplt" );
107
+ for ( ulong i = 0UL ; i < snaplt_tile_cnt ; i ++ ) {
108
+ fd_topo_tile_t * snaplt_tile = fd_topob_tile ( topo , "snaplt" , "snaplt" , "metric_in" , cpu_idx ++ , 0 , 0 );
109
+ snaplt_tile -> allow_shutdown = 1 ;
110
+ }
111
+ }
112
+
102
113
/**********************************************************************/
103
114
/* Setup backtest->replay link (repair_repla) in topo */
104
115
/**********************************************************************/
@@ -121,16 +132,26 @@ backtest_topo( config_t * config ) {
121
132
fd_topob_wksp ( topo , "snapdc_rd" );
122
133
fd_topob_wksp ( topo , "snapin_rd" );
123
134
fd_topob_wksp ( topo , "snap_out" );
124
- fd_topob_wksp ( topo , "replay_manif" );
135
+
136
+ if ( FD_LIKELY ( snaplt_enabled ) ) {
137
+ fd_topob_wksp ( topo , "snapin_lt" );
138
+ fd_topob_wksp ( topo , "snaplt_out" );
139
+ }
140
+
125
141
/* TODO: Should be depth of 1 or 2, not 4, but it causes backpressure
126
142
from the replay tile parsing the manifest, remove when this is
127
143
fixed. */
128
144
fd_topob_link ( topo , "snap_out" , "snap_out" , 4UL , 5UL * (1UL <<30UL ), 1UL );
129
145
130
146
fd_topob_link ( topo , "snap_zstd" , "snap_zstd" , 8192UL , 16384UL , 1UL );
131
147
fd_topob_link ( topo , "snap_stream" , "snap_stream" , 2048UL , USHORT_MAX , 1UL );
132
- fd_topob_link ( topo , "snapdc_rd" , "snapdc_rd" , 128UL , 0UL , 1UL );
133
- fd_topob_link ( topo , "snapin_rd" , "snapin_rd" , 128UL , 0UL , 1UL );
148
+ fd_topob_link ( topo , "snapdc_rd" , "snapdc_rd" , 128UL , 0UL , 1UL );
149
+ fd_topob_link ( topo , "snapin_rd" , "snapin_rd" , 128UL , 0UL , 1UL );
150
+
151
+ if ( FD_LIKELY ( snaplt_enabled ) ) {
152
+ fd_topob_link ( topo , "snapin_lt" , "snapin_lt" , 128UL , sizeof (fd_snapshot_existing_account_t ), 1UL );
153
+ FOR (snaplt_tile_cnt ) fd_topob_link ( topo , "snaplt_out ", " snaplt_out ", 128UL, 2048UL, 1UL );
154
+ }
134
155
135
156
fd_topob_tile_out ( topo , "snaprd" , 0UL , "snap_zstd" , 0UL );
136
157
fd_topob_tile_in ( topo , "snapdc" , 0UL , "metric_in" , "snap_zstd" , 0UL , FD_TOPOB_RELIABLE , FD_TOPOB_POLLED );
@@ -144,6 +165,13 @@ backtest_topo( config_t * config ) {
144
165
fd_topob_tile_in ( topo , "snaprd" , 0UL , "metric_in" , "snapin_rd" , 0UL , FD_TOPOB_RELIABLE , FD_TOPOB_POLLED );
145
166
fd_topob_tile_out ( topo , "snapin" , 0UL , "snapin_rd" , 0UL );
146
167
168
+ if ( FD_LIKELY ( snaplt_enabled ) ) {
169
+ fd_topob_tile_out ( topo , "snapin" , 0UL , "snapin_lt" , 0UL );
170
+ FOR (snaplt_tile_cnt ) fd_topob_tile_in ( topo , "snapin ", 0UL, " metric_in ", " snaplt_out ", i, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
171
+ FOR (snaplt_tile_cnt ) fd_topob_tile_in ( topo , "snaplt" , i , "metric_in" , "snapin_lt" , 0UL , FD_TOPOB_RELIABLE , FD_TOPOB_POLLED );
172
+ FOR (snaplt_tile_cnt ) fd_topob_tile_out ( topo , "snaplt ", i, " snaplt_out ", i );
173
+ }
174
+
147
175
/**********************************************************************/
148
176
/* More backtest->replay links in topo */
149
177
/**********************************************************************/
@@ -294,15 +322,7 @@ backtest_topo( config_t * config ) {
294
322
FD_TEST ( fd_pod_insertf_ulong ( topo -> props , busy_obj -> id , "bank_busy.%lu" , i ) );
295
323
}
296
324
297
- /* Replay decoded manifest dcache topo obj */
298
- fd_topo_obj_t * replay_manifest_dcache = fd_topob_obj ( topo , "dcache" , "replay_manif" );
299
- fd_pod_insertf_ulong ( topo -> props , 2UL << 30UL , "obj.%lu.data_sz" , replay_manifest_dcache -> id );
300
- fd_pod_insert_ulong ( topo -> props , "manifest_dcache" , replay_manifest_dcache -> id );
301
-
302
325
fd_topob_tile_uses ( topo , snapin_tile , funk_obj , FD_SHMEM_JOIN_MODE_READ_WRITE );
303
- fd_topob_tile_uses ( topo , snapin_tile , replay_manifest_dcache , FD_SHMEM_JOIN_MODE_READ_WRITE );
304
- fd_topob_tile_uses ( topo , replay_tile , replay_manifest_dcache , FD_SHMEM_JOIN_MODE_READ_ONLY );
305
-
306
326
for ( ulong i = 0UL ; i < topo -> tile_cnt ; i ++ ) {
307
327
fd_topo_tile_t * tile = & topo -> tiles [ i ];
308
328
if ( !fd_topo_configure_tile ( tile , config ) ) {
@@ -380,6 +400,16 @@ backtest_cmd_fn( args_t * args FD_PARAM_UNUSED,
380
400
fd_topo_tile_t * snapdc_tile = & topo -> tiles [ fd_topo_find_tile ( topo , "snapdc" , 0UL ) ];
381
401
fd_topo_tile_t * snapin_tile = & topo -> tiles [ fd_topo_find_tile ( topo , "snapin" , 0UL ) ];
382
402
403
+ ulong volatile * snaplt_metrics [ FD_MAX_SNAPLT_TILES ];
404
+ ulong snaplt_tile_cnt = fd_topo_tile_name_cnt ( topo , "snaplt" );
405
+
406
+ for ( ulong i = 0UL ; i < snaplt_tile_cnt ; i ++ ) {
407
+ ulong snaplt_tile_idx = fd_topo_find_tile ( topo , "snaplt" , i );
408
+ FD_TEST ( snaplt_tile_idx != ULONG_MAX );
409
+ fd_topo_tile_t * snaplt_tile = & topo -> tiles [ snaplt_tile_idx ];
410
+ snaplt_metrics [ i ] = fd_metrics_tile ( snaplt_tile -> metrics );
411
+ }
412
+
383
413
ulong volatile * const snaprd_metrics = fd_metrics_tile ( snaprd_tile -> metrics );
384
414
ulong volatile * const snapdc_metrics = fd_metrics_tile ( snapdc_tile -> metrics );
385
415
ulong volatile * const snapin_metrics = fd_metrics_tile ( snapin_tile -> metrics );
@@ -391,16 +421,34 @@ backtest_cmd_fn( args_t * args FD_PARAM_UNUSED,
391
421
ulong snapdc_wait_old = 0UL ;
392
422
ulong snapin_backp_old = 0UL ;
393
423
ulong snapin_wait_old = 0UL ;
424
+ ulong snaplt_backp_old = 0UL ;
425
+ ulong snaplt_wait_old = 0UL ;
394
426
ulong acc_cnt_old = 0UL ;
395
427
sleep ( 1 );
396
- puts ( "-------------backp=(snaprd,snapdc,snapin) busy=(snaprd,snapdc,snapin)---------------" );
428
+ puts ( "" );
429
+ puts ( "Columns:" );
430
+ puts ( "- bw: Uncompressed bandwidth" );
431
+ puts ( "- backp: Backpressured by downstream tile" );
432
+ puts ( "- stall: Waiting on upstream tile" );
433
+ puts ( "- acc: Number of accounts" );
434
+ puts ( "" );
435
+ puts ( "-------------backp=(snaprd,snapdc,snapin,snaplt) busy=(snaprd,snapdc,snapin,snaplt)---------------" );
397
436
long next = start + 1000L * 1000L * 1000L ;
398
437
for (;;) {
399
438
ulong snaprd_status = FD_VOLATILE_CONST ( snaprd_metrics [ MIDX ( GAUGE , TILE , STATUS ) ] );
400
439
ulong snapdc_status = FD_VOLATILE_CONST ( snapdc_metrics [ MIDX ( GAUGE , TILE , STATUS ) ] );
401
440
ulong snapin_status = FD_VOLATILE_CONST ( snapin_metrics [ MIDX ( GAUGE , TILE , STATUS ) ] );
441
+ ulong snaplt_status = ULONG_MAX ;
402
442
403
- if ( FD_UNLIKELY ( snaprd_status == 2UL && snapdc_status == 2UL && snapin_status == 2UL ) ) break ;
443
+ ulong snaplt_status_sum = 0UL ;
444
+ for ( ulong i = 0UL ; i < snaplt_tile_cnt ; i ++ ) {
445
+ ulong snaplt_status = FD_VOLATILE_CONST ( snaplt_metrics [ i ][ MIDX ( GAUGE , TILE , STATUS ) ] );
446
+ snaplt_status_sum += snaplt_status ;
447
+ }
448
+ if ( FD_UNLIKELY ( snaplt_status_sum == 2UL * snaplt_tile_cnt ) ) snaplt_status = 2UL ;
449
+ else snaplt_status = snaplt_tile_cnt > 0UL ? 1UL : 2UL ;
450
+
451
+ if ( FD_UNLIKELY ( snaprd_status == 2UL && snapdc_status == 2UL && snapin_status == 2UL && snaplt_status == 2UL ) ) break ;
404
452
405
453
long cur = fd_log_wallclock ();
406
454
if ( FD_UNLIKELY ( cur < next ) ) {
@@ -420,16 +468,28 @@ backtest_cmd_fn( args_t * args FD_PARAM_UNUSED,
420
468
ulong snapin_backp = snapin_metrics [ MIDX ( COUNTER , TILE , REGIME_DURATION_NANOS_BACKPRESSURE_PREFRAG ) ];
421
469
ulong snapin_wait = snapin_metrics [ MIDX ( COUNTER , TILE , REGIME_DURATION_NANOS_CAUGHT_UP_PREFRAG ) ] +
422
470
snapin_metrics [ MIDX ( COUNTER , TILE , REGIME_DURATION_NANOS_CAUGHT_UP_POSTFRAG ) ] + snapin_backp ;
471
+ ulong snaplt_backp = 0UL ;
472
+ ulong snaplt_wait = 0UL ;
473
+
474
+ for ( ulong i = 0UL ; i < snaplt_tile_cnt ; i ++ ) {
475
+ snaplt_backp += snaplt_metrics [ i ][ MIDX ( COUNTER , TILE , REGIME_DURATION_NANOS_BACKPRESSURE_PREFRAG ) ];
476
+ }
477
+ for ( ulong i = 0UL ; i < snaplt_tile_cnt ; i ++ ) {
478
+ snaplt_wait += snaplt_metrics [ i ][ MIDX ( COUNTER , TILE , REGIME_DURATION_NANOS_CAUGHT_UP_PREFRAG ) ] +
479
+ snaplt_metrics [ i ][ MIDX ( COUNTER , TILE , REGIME_DURATION_NANOS_CAUGHT_UP_POSTFRAG ) ] + snaplt_backp ;
480
+ }
423
481
424
- ulong acc_cnt = snapin_metrics [ MIDX ( GAUGE , SNAPIN , ACCOUNTS_INSERTED ) ];
425
- printf ( "bw=%4.0f MB/s backp=(%3.0f%%,%3.0f%%,%3.0f%%) busy=(%3.0f%%,%3.0f%%,%3.0f%%) acc=%3.1f M/s\n" ,
482
+ ulong acc_cnt = snapin_metrics [ MIDX ( GAUGE , SNAPIN , ACCOUNTS_INSERTED ) ];
483
+ printf ( "bw=%4.0f MB/s backp=(%3.0f%%,%3.0f%%,%3.0f%%,%3.0f%% ) busy=(%3.0f%%, %3.0f%%,%3.0f%%,%3.0f%%) acc=%3.1f M/s\n" ,
426
484
(double )( total_off - total_off_old )/1e6 ,
427
485
( (double )( snaprd_backp - snaprd_backp_old )* ns_per_tick )/1e7 ,
428
486
( (double )( snapdc_backp - snapdc_backp_old )* ns_per_tick )/1e7 ,
429
487
( (double )( snapin_backp - snapin_backp_old )* ns_per_tick )/1e7 ,
488
+ ( (double )( snaplt_backp - snaplt_backp_old )* ns_per_tick )/1e7 /(double )snaplt_tile_cnt ,
430
489
100 - ( ( (double )( snaprd_wait - snaprd_wait_old )* ns_per_tick )/1e7 ),
431
490
100 - ( ( (double )( snapdc_wait - snapdc_wait_old )* ns_per_tick )/1e7 ),
432
491
100 - ( ( (double )( snapin_wait - snapin_wait_old )* ns_per_tick )/1e7 ),
492
+ 100 - ( ( (double )( snaplt_wait - snaplt_wait_old )* ns_per_tick )/1e7 /(double )snaplt_tile_cnt ),
433
493
(double )( acc_cnt - acc_cnt_old )/1e6 );
434
494
fflush ( stdout );
435
495
total_off_old = total_off ;
@@ -439,6 +499,8 @@ backtest_cmd_fn( args_t * args FD_PARAM_UNUSED,
439
499
snapdc_wait_old = snapdc_wait ;
440
500
snapin_backp_old = snapin_backp ;
441
501
snapin_wait_old = snapin_wait ;
502
+ snaplt_backp_old = snaplt_backp ;
503
+ snaplt_wait_old = snaplt_wait ;
442
504
acc_cnt_old = acc_cnt ;
443
505
444
506
next += 1000L * 1000L * 1000L ;
0 commit comments