LCOV - code coverage report
Current view: top level - app/shared_dev/commands - load.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 113 0.0 %
Date: 2025-11-23 04:57:59 Functions: 0 3 0.0 %

          Line data    Source code
       1             : #define _GNU_SOURCE
       2             : #include "bench/bench.h"
       3             : #include "../../shared/commands/configure/configure.h"
       4             : #include "../../shared/commands/run/run.h"
       5             : #include "../../../disco/topo/fd_topob.h"
       6             : #include "../../../util/net/fd_ip4.h"
       7             : 
       8             : #include <unistd.h>
       9             : 
      10             : fd_topo_run_tile_t
      11             : fdctl_tile_run( fd_topo_tile_t const * tile );
      12             : 
      13             : void
      14             : load_cmd_perm( args_t *         args FD_PARAM_UNUSED,
      15             :                fd_cap_chk_t *   chk,
      16           0 :                config_t const * config ) {
      17           0 :   args_t configure_args = {
      18           0 :     .configure.command = CONFIGURE_CMD_INIT,
      19           0 :   };
      20             : 
      21           0 :   for( ulong i=0UL; STAGES[ i ]; i++ ) {
      22           0 :     if( FD_UNLIKELY( !strcmp( STAGES[ i ]->name, "hugetlbfs" ) ) )
      23           0 :       configure_args.configure.stages[ 0 ] = STAGES[ i ];
      24           0 :   }
      25           0 :   configure_args.configure.stages[ 2 ] = NULL;
      26           0 :   configure_cmd_perm( &configure_args, chk, config );
      27           0 : }
      28             : 
      29             : void
      30             : load_cmd_args( int *    pargc,
      31             :                   char *** pargv,
      32           0 :                   args_t * args ) {
      33           0 :   const char * tpu_ip      = fd_env_strip_cmdline_cstr  ( pargc, pargv, "--tpu-ip",   NULL, NULL );
      34           0 :   const char * rpc_ip      = fd_env_strip_cmdline_cstr  ( pargc, pargv, "--rpc-ip",   NULL, NULL );
      35           0 :   const char * affinity    = fd_env_strip_cmdline_cstr  ( pargc, pargv, "--affinity", NULL, NULL );
      36             : 
      37           0 :   args->load.tpu_port    = fd_env_strip_cmdline_ushort( pargc, pargv, "--tpu-port",     NULL, 0 );
      38           0 :   args->load.rpc_port    = fd_env_strip_cmdline_ushort( pargc, pargv, "--rpc-port",     NULL, 0 );
      39           0 :   args->load.benchg      = fd_env_strip_cmdline_ulong ( pargc, pargv, "--num-benchg",   NULL, 0 );
      40           0 :   args->load.benchs      = fd_env_strip_cmdline_ulong ( pargc, pargv, "--num-benchs",   NULL, 0 );
      41           0 :   args->load.accounts    = fd_env_strip_cmdline_ulong ( pargc, pargv, "--num-accounts", NULL, 0 );
      42           0 :   args->load.connections = fd_env_strip_cmdline_ulong ( pargc, pargv, "--connections",  NULL, 0 );
      43           0 :   args->load.transaction_mode    = fd_env_strip_cmdline_int  ( pargc, pargv, "--transaction-mode",    NULL, 0    );
      44           0 :   args->load.contending_fraction = fd_env_strip_cmdline_float( pargc, pargv, "--contending-fraction", NULL, 0.0f );
      45           0 :   args->load.cu_price_spread     = fd_env_strip_cmdline_float( pargc, pargv, "--cu-price-spread",     NULL, 0.0f );
      46             : 
      47           0 :   fd_cstr_fini( fd_cstr_append_cstr_safe( fd_cstr_init( args->load.affinity ), affinity, sizeof( args->load.affinity )-1UL ) );
      48             : 
      49           0 :   args->load.tpu_ip = 0;
      50           0 :   args->load.rpc_ip = 0;
      51           0 :   if( FD_LIKELY( tpu_ip ) ) {
      52           0 :     if( FD_UNLIKELY( !fd_cstr_to_ip4_addr( tpu_ip, &args->load.tpu_ip ) ) )
      53           0 :       FD_LOG_ERR(( "invalid --tpu-ip" ));
      54           0 :   }
      55           0 :   if( FD_LIKELY( rpc_ip ) ) {
      56           0 :     if( FD_UNLIKELY( !fd_cstr_to_ip4_addr( rpc_ip, &args->load.rpc_ip ) ) )
      57           0 :       FD_LOG_ERR(( "invalid --rpc-ip" ));
      58           0 :   }
      59             : 
      60           0 :   args->load.no_quic = fd_env_strip_cmdline_contains( pargc, pargv, "--no-quic" );
      61             : 
      62           0 : }
      63             : 
      64             : void
      65             : load_cmd_fn( args_t *   args,
      66           0 :              config_t * config ) {
      67             : 
      68             :   /* set defaults */
      69           0 :   if( FD_UNLIKELY( !args->load.tpu_ip ) )
      70           0 :     args->load.tpu_ip      = config->net.ip_addr;
      71             : 
      72           0 :   if( FD_UNLIKELY( !args->load.rpc_ip ) )
      73           0 :     args->load.rpc_ip      = config->net.ip_addr;
      74             : 
      75           0 :   if( FD_UNLIKELY( !args->load.tpu_port ) ) {
      76           0 :     args->load.tpu_port    = fd_ushort_if( args->load.no_quic,
      77           0 :                  config->tiles.quic.regular_transaction_listen_port,
      78           0 :                  config->tiles.quic.quic_transaction_listen_port );
      79           0 :   }
      80             : 
      81           0 :   if( FD_UNLIKELY( !args->load.rpc_port ) ) {
      82           0 :     if( FD_UNLIKELY( config->is_firedancer ) ) {
      83           0 :       args->load.rpc_port = config->tiles.rpc.rpc_listen_port;
      84           0 :     } else {
      85           0 :       args->load.rpc_port = config->frankendancer.rpc.port;
      86           0 :     }
      87           0 :   }
      88           0 :   if( FD_UNLIKELY( !args->load.rpc_port ) )
      89           0 :     FD_LOG_ERR(( "Missing --rpc-port" ));
      90             : 
      91           0 :   if( FD_UNLIKELY( !strcmp( args->load.affinity, "" ) ) )
      92           0 :     fd_cstr_append_cstr_safe( args->load.affinity, config->development.bench.affinity, sizeof( args->load.affinity )-1UL );
      93             : 
      94           0 :   if( FD_UNLIKELY( !args->load.benchg ) )
      95           0 :     args->load.benchg      = config->development.bench.benchg_tile_count;
      96             : 
      97           0 :   if( FD_UNLIKELY( !args->load.benchs ) )
      98           0 :     args->load.benchs      = config->development.bench.benchs_tile_count;
      99             : 
     100           0 :   if( FD_UNLIKELY( !args->load.accounts ) )
     101           0 :     args->load.accounts    = config->development.genesis.fund_initial_accounts;
     102             : 
     103           0 :   if( FD_UNLIKELY( !args->load.connections ) )
     104           0 :     args->load.connections = config->layout.quic_tile_count;
     105             : 
     106           0 :   fd_topo_t * topo = { fd_topob_new( &config->topo, config->name ) };
     107           0 :   topo->max_page_size = fd_cstr_to_shmem_page_sz( config->hugetlbfs.max_page_size );
     108           0 :   add_bench_topo( topo,
     109           0 :                   args->load.affinity,
     110           0 :                   args->load.benchg,
     111           0 :                   args->load.benchs,
     112           0 :                   args->load.accounts,
     113           0 :                   args->load.transaction_mode,
     114           0 :                   args->load.contending_fraction,
     115           0 :                   args->load.cu_price_spread,
     116           0 :                   args->load.connections,
     117           0 :                   args->load.tpu_port,
     118           0 :                   args->load.tpu_ip,
     119           0 :                   args->load.rpc_port,
     120           0 :                   args->load.rpc_ip,
     121           0 :                   args->load.no_quic,
     122           0 :                   0 );
     123           0 :   config->topo = *topo;
     124             : 
     125           0 :   args_t configure_args = {
     126           0 :     .configure.command = CONFIGURE_CMD_INIT,
     127           0 :   };
     128           0 :   for( ulong i=0UL; STAGES[ i ]; i++ ) {
     129           0 :     if( FD_LIKELY( STAGES[ i ] ) ) {
     130           0 :       if( FD_UNLIKELY( !strcmp( STAGES[ i ]->name, "hugetlbfs" ) ) )
     131           0 :         configure_args.configure.stages[ 0 ] = STAGES[ i ];
     132           0 :     }
     133           0 :   }
     134           0 :   configure_args.configure.stages[ 1 ] = NULL;
     135           0 :   configure_cmd_fn( &configure_args, config );
     136             : 
     137           0 :   initialize_workspaces( config );
     138           0 :   initialize_stacks( config );
     139             : 
     140           0 :   FD_LOG_NOTICE(( "Running" ));
     141           0 :   FD_LOG_NOTICE(( "  --tpu-ip " FD_IP4_ADDR_FMT, FD_IP4_ADDR_FMT_ARGS( args->load.tpu_ip ) ));
     142           0 :   FD_LOG_NOTICE(( "  --tpu-port %d",             args->load.tpu_port                       ));
     143           0 :   FD_LOG_NOTICE(( "  --rpc-ip " FD_IP4_ADDR_FMT, FD_IP4_ADDR_FMT_ARGS( args->load.rpc_ip ) ));
     144           0 :   FD_LOG_NOTICE(( "  --rpc-port %d",             args->load.rpc_port                       ));
     145           0 :   FD_LOG_NOTICE(( "  --affinity %s",             args->load.affinity                       ));
     146           0 :   FD_LOG_NOTICE(( "  --num-benchg %lu",          args->load.benchg                         ));
     147           0 :   FD_LOG_NOTICE(( "  --num-benchs %lu",          args->load.benchs                         ));
     148           0 :   FD_LOG_NOTICE(( "  --num-accounts %lu",        args->load.accounts                       ));
     149           0 :   FD_LOG_NOTICE(( "  --connections %lu",         args->load.connections                    ));
     150           0 :   FD_LOG_NOTICE(( "  --transaction-mode %d",     args->load.transaction_mode               ));
     151           0 :   FD_LOG_NOTICE(( "  --contending-fraction %g",  (double)args->load.contending_fraction    ));
     152           0 :   FD_LOG_NOTICE(( "  --cu-price-spread %g",      (double)args->load.cu_price_spread        ));
     153             : 
     154             :   /* FIXME allow running sandboxed/multiprocess */
     155           0 :   fd_topo_run_single_process( &config->topo, 0, config->uid, config->gid, fdctl_tile_run );
     156             : 
     157             :   /* Sleep parent thread forever, Ctrl+C will terminate. */
     158           0 :   for(;;) pause();
     159           0 : }
     160             : 
     161             : action_t fd_action_load = {
     162             :   .name        = "load",
     163             :   .args        = load_cmd_args,
     164             :   .perm        = load_cmd_perm,
     165             :   .fn          = load_cmd_fn,
     166             :   .description = "Load test an external validator"
     167             : };

Generated by: LCOV version 1.14