diff --git a/src/app/fdctl/config.c b/src/app/fdctl/config.c index b4bf1074ca..14b0db8025 100644 --- a/src/app/fdctl/config.c +++ b/src/app/fdctl/config.c @@ -200,6 +200,7 @@ static int parse_key_value( config_t * config, ENTRY_STR ( ., snapshots, path ); ENTRY_STR ( ., layout, affinity ); + ENTRY_UINT ( ., layout, poh_core ); ENTRY_UINT ( ., layout, net_tile_count ); ENTRY_UINT ( ., layout, verify_tile_count ); ENTRY_UINT ( ., layout, bank_tile_count ); diff --git a/src/app/fdctl/config.h b/src/app/fdctl/config.h index cf9f2e1901..42a3ced858 100644 --- a/src/app/fdctl/config.h +++ b/src/app/fdctl/config.h @@ -117,6 +117,7 @@ typedef struct { struct { char affinity[ AFFINITY_SZ ]; + uint poh_core; uint net_tile_count; uint verify_tile_count; uint bank_tile_count; diff --git a/src/app/fdctl/config/default.toml b/src/app/fdctl/config/default.toml index f925d29997..5ce62fd566 100644 --- a/src/app/fdctl/config/default.toml +++ b/src/app/fdctl/config/default.toml @@ -498,6 +498,11 @@ dynamic_port_range = "8900-9000" # that the Solana network can run as fast as possible. affinity = "0-16" + # Which CPU core to use for the POH service. This is a special core + # because it's the only one pinned by the Solana Labs. This should + # not overlap with the affinity specified above. + poh_core = 17 + # How many net tiles to run. Each networking tile will service # exactly one queue from a network device being listened to. If # there are less net tiles than queues, some queues will not get diff --git a/src/app/fdctl/run/run_solana.c b/src/app/fdctl/run/run_solana.c index f507aa6e91..739a14f95a 100644 --- a/src/app/fdctl/run/run_solana.c +++ b/src/app/fdctl/run/run_solana.c @@ -55,6 +55,8 @@ solana_labs_main( void * args ) { ADDU( "--firedancer-tpu-port", config->tiles.quic.regular_transaction_listen_port ); ADDU( "--firedancer-tvu-port", config->tiles.shred.shred_listen_port ); + ADDU( "--experimental-poh-pinned-cpu-core", config->layout.poh_core ); + /* consensus */ ADD( "--identity", config->consensus.identity_path ); if( strcmp( config->consensus.vote_account_path, "" ) )