Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
akhinvasara-jumptrading committed Feb 6, 2025
1 parent 42fb284 commit 7257e53
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 144 deletions.
118 changes: 55 additions & 63 deletions src/waltz/quic/fd_quic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1315,21 +1315,20 @@ fd_quic_abandon_enc_level( fd_quic_conn_t * conn,

fd_quic_ack_gen_abandon_enc_level( conn->ack_gen, enc_level );

fd_quic_pkt_meta_trackers_t * trackers = &conn->pkt_meta_trackers;

fd_quic_pkt_meta_tracker_t * tracker = &conn->pkt_meta_tracker;
for( uint j = 0; j <= enc_level; ++j ) {
conn->keys_avail = fd_uint_clear_bit( conn->keys_avail, (int)j );

/* treat all packets as ACKed (freeing handshake data, etc.) */
fd_quic_pkt_meta_ds_t * sent = &trackers->sent_pkt_metas[j];
fd_quic_pkt_meta_t * pool = trackers->pkt_meta_pool_join;
fd_quic_pkt_meta_ds_t * sent = &tracker->sent_pkt_metas[j];
fd_quic_pkt_meta_t * pool = tracker->pkt_meta_pool_join;
FD_QUIC_PKT_META_PROCESS_FROM_BEGIN( fd_quic_reclaim_pkt_meta( conn, e, j ),
fd_quic_pkt_meta_pool_ele_release( pool, prev ),
0,
sent,
pool );

fd_quic_pkt_meta_clear( trackers, j );
fd_quic_pkt_meta_ds_clear( tracker, j );
}
}

Expand Down Expand Up @@ -2158,7 +2157,6 @@ fd_quic_handle_v1_one_rtt( fd_quic_t * quic,
/* update expected packet number */
conn->exp_pkt_number[2] = fd_ulong_max( conn->exp_pkt_number[2], pkt_number+1UL );


return tot_sz;
}

Expand Down Expand Up @@ -3514,13 +3512,14 @@ fd_quic_gen_frames( fd_quic_conn_t * conn,
ping
stream data */
static void
fd_quic_conn_tx( fd_quic_t * quic,
fd_quic_conn_tx( fd_quic_t * quic,
fd_quic_conn_t * conn ) {

if( FD_UNLIKELY( conn->state == FD_QUIC_CONN_STATE_DEAD ) ) return;

fd_quic_state_t * state = fd_quic_get_state( quic );
fd_quic_pkt_meta_trackers_t * trackers = &conn->pkt_meta_trackers;
fd_quic_state_t * state = fd_quic_get_state( quic );
fd_quic_pkt_meta_tracker_t * tracker = &conn->pkt_meta_tracker;
fd_quic_pkt_meta_t * pool = tracker->pkt_meta_pool_join;

/* used for encoding frames into before encrypting */
uchar * crypt_scratch = state->crypt_scratch;
Expand Down Expand Up @@ -3569,7 +3568,6 @@ fd_quic_conn_tx( fd_quic_t * quic,

while( enc_level != ~0u ) {
uint initial_pkt = 0; /* is this the first initial packet? */
fd_quic_pkt_meta_t * pool = trackers->pkt_meta_pool_join;

/* do we have space for pkt_meta? */
if( !pkt_meta ) {
Expand All @@ -3590,7 +3588,7 @@ fd_quic_conn_tx( fd_quic_t * quic,

/* initialize expiry */
pkt_meta->expiry = now + conn->idle_timeout;
ulong margin = (ulong)(conn->rtt->smoothed_rtt) - (ulong)(3 * conn->rtt->var_rtt);
ulong margin = (ulong)(conn->rtt->smoothed_rtt) - (ulong)(3 * conn->rtt->var_rtt);
if( margin < pkt_meta->expiry ) {
pkt_meta->expiry -= margin;
}
Expand Down Expand Up @@ -3835,7 +3833,7 @@ fd_quic_conn_tx( fd_quic_t * quic,

/* add to sent list */
if( pkt_meta->flags ) {
fd_quic_pkt_meta_insert( &trackers->sent_pkt_metas[enc_level], pkt_meta, trackers->pkt_meta_pool_join );
fd_quic_pkt_meta_insert( &tracker->sent_pkt_metas[enc_level], pkt_meta, pool );

/* update rescheduling variable */
fd_quic_svc_schedule( state, conn, FD_QUIC_SVC_WAIT );
Expand Down Expand Up @@ -3876,7 +3874,7 @@ fd_quic_conn_tx( fd_quic_t * quic,
/* unused pkt_meta? deallocate */
if( FD_UNLIKELY( pkt_meta ) ) {
conn->pkt_number[pkt_meta->pn_space] = pkt_meta->pkt_number;
fd_quic_pkt_meta_pool_ele_release( trackers->pkt_meta_pool_join, pkt_meta );
fd_quic_pkt_meta_pool_ele_release( pool, pkt_meta );
pkt_meta = NULL;
}

Expand Down Expand Up @@ -3950,7 +3948,7 @@ fd_quic_conn_service( fd_quic_t * quic, fd_quic_conn_t * conn, ulong now ) {
fd_quic_conn_tx( quic, conn );

/* schedule another fd_quic_conn_service to free the conn */
fd_quic_set_conn_state( conn, FD_QUIC_CONN_STATE_DEAD );
fd_quic_set_conn_state( conn, FD_QUIC_CONN_STATE_DEAD ); /* TODO need draining state wait for 3 * TPO */
quic->metrics.conn_closed_cnt++;
fd_quic_svc_schedule1( conn, FD_QUIC_SVC_INSTANT );

Expand Down Expand Up @@ -4446,8 +4444,8 @@ fd_quic_pkt_meta_retry( fd_quic_t * quic,
/* count of freed pkt_meta */
ulong cnt_freed = 0u;

fd_quic_pkt_meta_trackers_t * trackers = &conn->pkt_meta_trackers;
fd_quic_pkt_meta_t * pool = trackers->pkt_meta_pool_join;
fd_quic_pkt_meta_tracker_t * tracker = &conn->pkt_meta_tracker;
fd_quic_pkt_meta_t * pool = tracker->pkt_meta_pool_join;

while(1) {
/* find earliest sent pkt_meta over all of the enc_levels */
Expand All @@ -4460,7 +4458,7 @@ fd_quic_pkt_meta_retry( fd_quic_t * quic,
assuming that pkt_meta is in time order. It IS
is time order, but not expiry time. */
#if 1
fd_quic_pkt_meta_t * pkt_meta = fd_quic_pkt_meta_min( &trackers->sent_pkt_metas[j], pool );
fd_quic_pkt_meta_t * pkt_meta = fd_quic_pkt_meta_min( &tracker->sent_pkt_metas[j], pool );
if( !pkt_meta ) continue;

if( enc_level == ~0u || pkt_meta->expiry < expiry ) {
Expand All @@ -4481,7 +4479,7 @@ fd_quic_pkt_meta_retry( fd_quic_t * quic,
#endif
}
} else {
fd_quic_pkt_meta_t * pkt_meta = fd_quic_pkt_meta_min( &trackers->sent_pkt_metas[enc_level], pool );
fd_quic_pkt_meta_t * pkt_meta = fd_quic_pkt_meta_min( &tracker->sent_pkt_metas[enc_level], pool );
if( !pkt_meta ) {
return;
}
Expand All @@ -4501,24 +4499,22 @@ fd_quic_pkt_meta_retry( fd_quic_t * quic,
}
}

fd_quic_pkt_meta_trackers_t * trackers = &conn->pkt_meta_trackers;
fd_quic_pkt_meta_t * pkt_meta = fd_quic_pkt_meta_min( &trackers->sent_pkt_metas[enc_level], pool );
fd_quic_pkt_meta_t * pkt_meta = fd_quic_pkt_meta_min( &tracker->sent_pkt_metas[enc_level], pool );

/* already moved to another enc_level */
/* AMAN - instead use abandon_enc_level here? */
if( enc_level < peer_enc_level ) {

ulong pkt_number_lo = pkt_meta->pkt_number;

/* treat the original packet as-if it were ack'ed */
fd_quic_reclaim_pkt_meta( conn,
pkt_meta,
enc_level );

/* remove from list */
fd_quic_pkt_meta_remove_range( &trackers->sent_pkt_metas[enc_level],
fd_quic_pkt_meta_remove_range( &tracker->sent_pkt_metas[enc_level],
pool,
pkt_number_lo,
pkt_number_lo );
pkt_meta->pkt_number,
pkt_meta->pkt_number );

cnt_freed++;

Expand Down Expand Up @@ -4619,7 +4615,7 @@ fd_quic_pkt_meta_retry( fd_quic_t * quic,
fd_quic_svc_schedule1( conn, FD_QUIC_SVC_INSTANT );

/* free pkt_meta */
fd_quic_pkt_meta_remove_range( &trackers->sent_pkt_metas[enc_level],
fd_quic_pkt_meta_remove_range( &tracker->sent_pkt_metas[enc_level],
pool,
pkt_meta->pkt_number,
pkt_meta->pkt_number );
Expand Down Expand Up @@ -4879,25 +4875,28 @@ fd_quic_reclaim_pkt_meta( fd_quic_conn_t * conn,
void
fd_quic_process_lost( fd_quic_conn_t * conn, uint enc_level, ulong cnt ) {
/* start at oldest sent */
fd_quic_pkt_meta_trackers_t * trackers = &conn->pkt_meta_trackers;
fd_quic_pkt_meta_ds_t * sent = &trackers->sent_pkt_metas[enc_level];
fd_quic_pkt_meta_t * pool = trackers->pkt_meta_pool_join;
ulong j = 0;
fd_quic_pkt_meta_tracker_t * tracker = &conn->pkt_meta_tracker;
fd_quic_pkt_meta_ds_t * sent = &tracker->sent_pkt_metas[enc_level];
fd_quic_pkt_meta_t * pool = tracker->pkt_meta_pool_join;
ulong j = 0;

/* mark immediate expiry */
FD_QUIC_PKT_META_PROCESS_FROM_BEGIN( e->expiry = 0; j++,
,
FD_UNLIKELY( j > cnt ),
sent,
pool);
FD_QUIC_PKT_META_PROCESS_FROM_BEGIN( do {
e->expiry = 0;
j++;
} while (0),
,
FD_UNLIKELY( j > cnt ),
sent,
pool);
/* do the retry processing */
fd_quic_pkt_meta_retry( conn->quic, conn, 0 /* don't force */, enc_level );
}

/* process ack range
applies to pkt_number in [largest_ack - ack_range, largest_ack] */
void
fd_quic_process_ack_range( fd_quic_conn_t * conn,
fd_quic_process_ack_range( fd_quic_conn_t * conn,
fd_quic_frame_ctx_t * context,
uint enc_level,
ulong largest_ack,
Expand All @@ -4915,16 +4914,18 @@ fd_quic_process_ack_range( fd_quic_conn_t * conn,
FD_DTRACE_PROBE_4( quic_process_ack_range, conn->our_conn_id, enc_level, lo, hi );

/* start at oldest sent */
fd_quic_pkt_meta_trackers_t * trackers = &conn->pkt_meta_trackers;
fd_quic_pkt_meta_ds_t * sent = &trackers->sent_pkt_metas[enc_level];
fd_quic_pkt_meta_t * pool = trackers->pkt_meta_pool_join;
fd_quic_pkt_meta_tracker_t * tracker = &conn->pkt_meta_tracker;
fd_quic_pkt_meta_ds_t * sent = &tracker->sent_pkt_metas[enc_level];
fd_quic_pkt_meta_t * pool = tracker->pkt_meta_pool_join;

FD_QUIC_PKT_META_PROCESS( if( is_largest && e->pkt_number == hi && hi >= pkt->rtt_pkt_number ) {
FD_QUIC_PKT_META_PROCESS( do {
if( is_largest && e->pkt_number == hi && hi >= pkt->rtt_pkt_number ) {
pkt->rtt_pkt_number = hi;
pkt->rtt_ack_time = now - e->tx_time; /* in ticks */
pkt->rtt_ack_delay = ack_delay; /* in peer units */
}
fd_quic_reclaim_pkt_meta( conn, e, enc_level ),
}
fd_quic_reclaim_pkt_meta( conn, e, enc_level );
} while( 0 ),
,
FD_UNLIKELY( e->pkt_number > hi ),
sent,
Expand All @@ -4936,13 +4937,12 @@ fd_quic_process_ack_range( fd_quic_conn_t * conn,
}

static ulong
fd_quic_handle_ack_frame(
fd_quic_frame_ctx_t * context,
fd_quic_ack_frame_t * data,
uchar const * p,
ulong p_sz ) {
fd_quic_conn_t * conn = context->conn;
uint enc_level = context->pkt->enc_level;
fd_quic_handle_ack_frame( fd_quic_frame_ctx_t * context,
fd_quic_ack_frame_t * data,
uchar const * p,
ulong p_sz ) {
fd_quic_conn_t * conn = context->conn;
uint enc_level = context->pkt->enc_level;

if( FD_UNLIKELY( data->first_ack_range > data->largest_ack ) ) {
/* this is a protocol violation, so inform the peer */
Expand Down Expand Up @@ -5041,16 +5041,14 @@ fd_quic_handle_ack_frame(

/* process lost packets */
{
fd_quic_pkt_meta_trackers_t * trackers = &conn->pkt_meta_trackers;
fd_quic_pkt_meta_ds_t * sent = &trackers->sent_pkt_metas[enc_level];
fd_quic_pkt_meta_t * pool = trackers->pkt_meta_pool_join;

ulong iter = fd_quic_pkt_meta_ds_fwd_iter_init( sent, pool );
fd_quic_pkt_meta_t * starting_meta = fd_quic_pkt_meta_ds_fwd_iter_ele( iter, pool );
fd_quic_pkt_meta_tracker_t * tracker = &conn->pkt_meta_tracker;
fd_quic_pkt_meta_ds_t * sent = &tracker->sent_pkt_metas[enc_level];
fd_quic_pkt_meta_t * pool = tracker->pkt_meta_pool_join;
fd_quic_pkt_meta_t * min_meta = fd_quic_pkt_meta_min( sent, pool );

if ( FD_UNLIKELY( starting_meta && starting_meta->pkt_number < low_ack_pkt_number ) ) {
if( FD_UNLIKELY( min_meta && min_meta->pkt_number < low_ack_pkt_number ) ) {
ulong skipped = 0;
FD_QUIC_PKT_META_PROCESS_FROM_BEGIN(skipped++;,
FD_QUIC_PKT_META_PROCESS_FROM_BEGIN(skipped++,
,
FD_UNLIKELY( e->pkt_number >= low_ack_pkt_number ),
sent,
Expand Down Expand Up @@ -5564,9 +5562,3 @@ fd_quic_conn_close( fd_quic_conn_t * conn,
/* set connection to be serviced ASAP */
fd_quic_svc_schedule1( conn, FD_QUIC_SVC_INSTANT );
}

ulong
fd_quic_conn_get_pkt_meta_free_count( fd_quic_conn_t * conn ) {
fd_quic_pkt_meta_t* pool = conn->pkt_meta_trackers.pkt_meta_pool_join;
return fd_quic_pkt_meta_pool_free( pool );
}
6 changes: 0 additions & 6 deletions src/waltz/quic/fd_quic.h
Original file line number Diff line number Diff line change
Expand Up @@ -368,12 +368,6 @@ struct fd_quic {

FD_PROTOTYPES_BEGIN

/* debugging */

ulong
fd_quic_conn_get_pkt_meta_free_count( fd_quic_conn_t * conn );


/* Object lifecycle ***************************************************/

/* fd_quic_{align,footprint} return the required alignment and footprint
Expand Down
2 changes: 1 addition & 1 deletion src/waltz/quic/fd_quic_conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ fd_quic_conn_new( void * mem,
}

/* Initialize packet meta pool */
fd_quic_pkt_meta_trackers_init( &conn->pkt_meta_trackers,
fd_quic_pkt_meta_tracker_init( &conn->pkt_meta_tracker,
(fd_quic_pkt_meta_t *)((ulong)mem + layout.pkt_meta_off),
limits->inflight_pkt_cnt );

Expand Down
5 changes: 3 additions & 2 deletions src/waltz/quic/fd_quic_conn.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ struct fd_quic_conn {
ulong unacked_sz; /* Number of received stream frame payload bytes pending ACK */
/* Resets to zero when conn is rescheduled or ACKs are sent */

fd_quic_pkt_meta_trackers_t pkt_meta_trackers;
fd_quic_pkt_meta_tracker_t pkt_meta_tracker;

/* flow control */
ulong tx_max_data; /* the limit on the number of bytes we are allowed
Expand Down Expand Up @@ -251,7 +251,8 @@ struct fd_quic_conn {
};

inline void
fd_quic_set_conn_state( fd_quic_conn_t * conn, uint state ) {
fd_quic_set_conn_state( fd_quic_conn_t * conn,
uint state ) {
conn->state = state;
}

Expand Down
27 changes: 13 additions & 14 deletions src/waltz/quic/fd_quic_pkt_meta.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,27 @@
#define FD_QUIC_MAX_INFLIGHT_LOW_ENC 20
static void *
fd_quic_pkt_meta_ds_init( fd_quic_pkt_meta_ds_t * sent_pkt_metas,
ulong appdata_max_ele ) {
ulong appdata_max_ele ) {

for( ulong enc_level=0; enc_level<4; enc_level++ ) {
void* mem = fd_quic_pkt_meta_treap_new( sent_pkt_metas+enc_level,
enc_level == 3 ? appdata_max_ele : FD_QUIC_MAX_INFLIGHT_LOW_ENC );
void* mem = fd_quic_pkt_meta_treap_new( &sent_pkt_metas[enc_level],
enc_level == 3 ? appdata_max_ele : FD_QUIC_MAX_INFLIGHT_LOW_ENC );
mem = fd_quic_pkt_meta_treap_join( mem );
if( FD_UNLIKELY( !mem ) ) return NULL;
}

return sent_pkt_metas;

}


void *
fd_quic_pkt_meta_trackers_init( fd_quic_pkt_meta_trackers_t * trackers,
fd_quic_pkt_meta_t * pkt_meta_mem,
ulong total_meta_cnt ) {
fd_quic_pkt_meta_tracker_init( fd_quic_pkt_meta_tracker_t * trackers,
fd_quic_pkt_meta_t * pkt_meta_mem,
ulong total_meta_cnt ) {
fd_memset( pkt_meta_mem, 0, total_meta_cnt*sizeof(fd_quic_pkt_meta_t) );
trackers->pkt_meta_mem = (void *)fd_ulong_align_up( (ulong)pkt_meta_mem, fd_quic_pkt_meta_pool_align() );

fd_quic_pkt_meta_t * shpool = fd_quic_pkt_meta_pool_new( trackers->pkt_meta_mem, total_meta_cnt );
fd_quic_pkt_meta_t * shpool = fd_quic_pkt_meta_pool_new( trackers->pkt_meta_mem, total_meta_cnt );
trackers->pkt_meta_pool_join = fd_quic_pkt_meta_pool_join( shpool );
fd_quic_pkt_meta_treap_seed( trackers->pkt_meta_pool_join, total_meta_cnt, (ulong)fd_log_wallclock() );
if( FD_UNLIKELY( !trackers->pkt_meta_pool_join ) ) return NULL;
Expand All @@ -38,8 +37,8 @@ fd_quic_pkt_meta_trackers_init( fd_quic_pkt_meta_trackers_t * trackers,

void
fd_quic_pkt_meta_insert( fd_quic_pkt_meta_ds_t * ds,
fd_quic_pkt_meta_t * pkt_meta,
fd_quic_pkt_meta_t * pool ) {
fd_quic_pkt_meta_t * pkt_meta,
fd_quic_pkt_meta_t * pool ) {
fd_quic_pkt_meta_treap_ele_insert( ds, pkt_meta, pool );
}

Expand Down Expand Up @@ -73,8 +72,8 @@ fd_quic_pkt_meta_min( fd_quic_pkt_meta_ds_t * ds,
}

void
fd_quic_pkt_meta_clear( fd_quic_pkt_meta_trackers_t * trackers,
uint enc_level ) {
ulong ele_max = fd_quic_pkt_meta_treap_ele_max( trackers->sent_pkt_metas+enc_level );
fd_quic_pkt_meta_treap_new( trackers->sent_pkt_metas+enc_level, ele_max );
fd_quic_pkt_meta_ds_clear( fd_quic_pkt_meta_tracker_t * trackers,
uint enc_level ) {
ulong ele_max = fd_quic_pkt_meta_treap_ele_max( &trackers->sent_pkt_metas[enc_level] );
fd_quic_pkt_meta_treap_new( &trackers->sent_pkt_metas[enc_level], ele_max );
}
Loading

0 comments on commit 7257e53

Please sign in to comment.