diff --git a/src/waltz/quic/fd_quic.c b/src/waltz/quic/fd_quic.c index 6cc38bc220..956e0f78b8 100644 --- a/src/waltz/quic/fd_quic.c +++ b/src/waltz/quic/fd_quic.c @@ -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 ); } } @@ -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; } @@ -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; @@ -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 ) { @@ -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; } @@ -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 ); @@ -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; } @@ -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 ); @@ -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 */ @@ -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 ) { @@ -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; } @@ -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++; @@ -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 ); @@ -4879,17 +4875,20 @@ 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 ); } @@ -4897,7 +4896,7 @@ fd_quic_process_lost( fd_quic_conn_t * conn, uint enc_level, ulong cnt ) { /* 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, @@ -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, @@ -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 */ @@ -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, @@ -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 ); -} diff --git a/src/waltz/quic/fd_quic.h b/src/waltz/quic/fd_quic.h index 288365ec64..e72e52d8b2 100644 --- a/src/waltz/quic/fd_quic.h +++ b/src/waltz/quic/fd_quic.h @@ -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 diff --git a/src/waltz/quic/fd_quic_conn.c b/src/waltz/quic/fd_quic_conn.c index 15c585f040..c80dbb1fe1 100644 --- a/src/waltz/quic/fd_quic_conn.c +++ b/src/waltz/quic/fd_quic_conn.c @@ -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 ); diff --git a/src/waltz/quic/fd_quic_conn.h b/src/waltz/quic/fd_quic_conn.h index 5c0fb155c9..a4bf29c04d 100644 --- a/src/waltz/quic/fd_quic_conn.h +++ b/src/waltz/quic/fd_quic_conn.h @@ -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 @@ -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; } diff --git a/src/waltz/quic/fd_quic_pkt_meta.c b/src/waltz/quic/fd_quic_pkt_meta.c index e596e20c82..a948d02a68 100644 --- a/src/waltz/quic/fd_quic_pkt_meta.c +++ b/src/waltz/quic/fd_quic_pkt_meta.c @@ -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; @@ -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 ); } @@ -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 ); } diff --git a/src/waltz/quic/fd_quic_pkt_meta.h b/src/waltz/quic/fd_quic_pkt_meta.h index cac119b6f1..0330c006d7 100644 --- a/src/waltz/quic/fd_quic_pkt_meta.h +++ b/src/waltz/quic/fd_quic_pkt_meta.h @@ -3,9 +3,9 @@ #include "fd_quic_common.h" -typedef struct fd_quic_pkt_meta fd_quic_pkt_meta_t; -typedef struct fd_quic_pkt_meta_list fd_quic_pkt_meta_list_t; -typedef struct fd_quic_pkt_meta_trackers fd_quic_pkt_meta_trackers_t; +typedef struct fd_quic_pkt_meta fd_quic_pkt_meta_t; +typedef struct fd_quic_pkt_meta_list fd_quic_pkt_meta_list_t; +typedef struct fd_quic_pkt_meta_tracker fd_quic_pkt_meta_tracker_t; /* TODO convert to a union with various types of metadata overlaid */ @@ -106,37 +106,37 @@ struct fd_quic_pkt_meta { ulong prev; }; -#define TREAP_NAME fd_quic_pkt_meta_treap -#define TREAP_T fd_quic_pkt_meta_t -#define TREAP_QUERY_T ulong -#define TREAP_CMP(q,e) (int)((long)(q) - (long)(e)->pkt_number) -#define TREAP_LT(e0,e1) ((e0)->pkt_number < (e1)->pkt_number) -#define TREAP_OPTIMIZE_ITERATION 1 -#include "../../util/tmpl/fd_treap.c" - -#define POOL_NAME fd_quic_pkt_meta_pool -#define POOL_T fd_quic_pkt_meta_t +#define POOL_NAME fd_quic_pkt_meta_pool +#define POOL_T fd_quic_pkt_meta_t #include "../../util/tmpl/fd_pool.c" -/* alias for transparent ds */ -typedef fd_quic_pkt_meta_treap_t fd_quic_pkt_meta_ds_t; -typedef fd_quic_pkt_meta_treap_fwd_iter_t fd_quic_pkt_meta_ds_fwd_iter_t; +#define TREAP_NAME fd_quic_pkt_meta_treap +#define TREAP_T fd_quic_pkt_meta_t +#define TREAP_QUERY_T ulong +#define TREAP_CMP(q,e) (int)((long)(q) - (long)(e)->pkt_number) +#define TREAP_LT(e0,e1) ((e0)->pkt_number < (e1)->pkt_number) +#define TREAP_OPTIMIZE_ITERATION 1 +#include "../../util/tmpl/fd_treap.c" + +/* begin aliasing to abstract data structure */ +typedef fd_quic_pkt_meta_treap_t fd_quic_pkt_meta_ds_t; +typedef fd_quic_pkt_meta_treap_fwd_iter_t fd_quic_pkt_meta_ds_fwd_iter_t; static inline fd_quic_pkt_meta_ds_fwd_iter_t -fd_quic_pkt_meta_ds_fwd_iter_init( fd_quic_pkt_meta_ds_t * treap, - fd_quic_pkt_meta_t * pool ) { - return fd_quic_pkt_meta_treap_fwd_iter_init( treap, pool ); +fd_quic_pkt_meta_ds_fwd_iter_init( fd_quic_pkt_meta_ds_t * ds, + fd_quic_pkt_meta_t * pool ) { + return fd_quic_pkt_meta_treap_fwd_iter_init( ds, pool ); } static inline fd_quic_pkt_meta_t * -fd_quic_pkt_meta_ds_fwd_iter_ele( fd_quic_pkt_meta_ds_fwd_iter_t iter, - fd_quic_pkt_meta_t * pool ) { +fd_quic_pkt_meta_ds_fwd_iter_ele( fd_quic_pkt_meta_ds_fwd_iter_t iter, + fd_quic_pkt_meta_t * pool ) { return fd_quic_pkt_meta_treap_fwd_iter_ele( iter, pool ); } static inline fd_quic_pkt_meta_ds_fwd_iter_t -fd_quic_pkt_meta_ds_fwd_iter_next( fd_quic_pkt_meta_ds_fwd_iter_t iter, - fd_quic_pkt_meta_t * pool ) { +fd_quic_pkt_meta_ds_fwd_iter_next( fd_quic_pkt_meta_ds_fwd_iter_t iter, + fd_quic_pkt_meta_t * pool ) { return fd_quic_pkt_meta_treap_fwd_iter_next( iter, pool ); } @@ -145,19 +145,19 @@ fd_quic_pkt_meta_ds_fwd_iter_done( fd_quic_pkt_meta_ds_fwd_iter_t iter ) { return fd_quic_pkt_meta_treap_fwd_iter_done( iter ); } -static inline ulong -fd_quic_pkt_meta_ds_idx_lower_bound( fd_quic_pkt_meta_ds_t * treap, +static inline fd_quic_pkt_meta_ds_fwd_iter_t +fd_quic_pkt_meta_ds_idx_lower_bound( fd_quic_pkt_meta_ds_t * ds, ulong pkt_number, - fd_quic_pkt_meta_t * pool ) { - return fd_quic_pkt_meta_treap_idx_lower_bound( treap, pkt_number, pool ); + fd_quic_pkt_meta_t * pool ) { + return fd_quic_pkt_meta_treap_idx_lower_bound( ds, pkt_number, pool ); } -/* end transparent ds */ +/* end aliasing to abstract data structure */ -struct fd_quic_pkt_meta_trackers { - fd_quic_pkt_meta_ds_t sent_pkt_metas[4]; - fd_quic_pkt_meta_t * pkt_meta_mem; /* owns the memory for fd_pool of pkt_meta */ - fd_quic_pkt_meta_t * pkt_meta_pool_join; +struct fd_quic_pkt_meta_tracker { + fd_quic_pkt_meta_ds_t sent_pkt_metas[4]; + fd_quic_pkt_meta_t * pkt_meta_mem; /* owns the memory for pool */ + fd_quic_pkt_meta_t * pkt_meta_pool_join; }; /* @@ -166,34 +166,43 @@ struct fd_quic_pkt_meta_trackers { prev_cb verbatim executed with previous pkt_meta named 'prev' condition is the condition to stop processing */ -#define FD_QUIC_PKT_META_PROCESS( cb, prev_cb, condition, sent, pool, start ) \ +#define FD_QUIC_PKT_META_PROCESS( cb, \ + prev_cb, \ + condition, \ + sent, \ + pool, \ + start ) \ do { \ - fd_quic_pkt_meta_t * prev = NULL; \ + fd_quic_pkt_meta_t * prev = NULL; \ for( fd_quic_pkt_meta_ds_fwd_iter_t iter = start; \ !fd_quic_pkt_meta_ds_fwd_iter_done( iter ); \ iter = fd_quic_pkt_meta_ds_fwd_iter_next( iter, pool ) ) { \ fd_quic_pkt_meta_t * e = fd_quic_pkt_meta_ds_fwd_iter_ele( iter, pool ); \ - if ( condition ) { \ + if( condition ) { \ break; \ } \ - if ( prev ) { \ + if( FD_LIKELY( prev ) ) { \ prev_cb; \ } \ cb; \ prev = e; \ } \ - if( prev ) { \ + if( FD_LIKELY( prev ) ) { \ prev_cb; \ } \ } while( 0 ); -#define FD_QUIC_PKT_META_PROCESS_FROM_BEGIN( cb, prev_cb, condition, sent, pool) \ - FD_QUIC_PKT_META_PROCESS( cb, prev_cb, condition, sent, pool, fd_quic_pkt_meta_ds_fwd_iter_init( sent, pool ) ) +#define FD_QUIC_PKT_META_PROCESS_FROM_BEGIN( cb, \ + prev_cb, \ + condition, \ + sent, \ + pool ) \ + FD_QUIC_PKT_META_PROCESS( cb, prev_cb, condition, sent, pool, fd_quic_pkt_meta_ds_fwd_iter_init( sent, pool ) ); 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 ); void fd_quic_pkt_meta_insert( fd_quic_pkt_meta_ds_t * ds, @@ -215,8 +224,8 @@ fd_quic_pkt_meta_min( fd_quic_pkt_meta_ds_t * ds, fd_quic_pkt_meta_t * pool ); void -fd_quic_pkt_meta_clear( fd_quic_pkt_meta_trackers_t * trackers, - uint enc_level ); +fd_quic_pkt_meta_ds_clear( fd_quic_pkt_meta_tracker_t * trackers, + uint enc_level ); FD_PROTOTYPES_END diff --git a/src/waltz/quic/tests/test_quic_bw.c b/src/waltz/quic/tests/test_quic_bw.c index 7fc1b0f24b..9d67c235a0 100644 --- a/src/waltz/quic/tests/test_quic_bw.c +++ b/src/waltz/quic/tests/test_quic_bw.c @@ -217,7 +217,10 @@ main( int argc, service_server( server_quic ); client_stream = fd_quic_conn_new_stream( client_conn ); - if( client_conn->state != FD_QUIC_CONN_STATE_ACTIVE ) { FD_LOG_NOTICE(( "Early break, inactive connection")); break;} + if( client_conn->state != FD_QUIC_CONN_STATE_ACTIVE ) { + FD_LOG_NOTICE(( "Early break due to inactive connection")); + break; + } else if( !client_stream ) continue; fd_quic_stream_send( client_stream, buf, sz, 1 ); @@ -226,12 +229,12 @@ main( int argc, FD_TEST( client_quic->metrics.conn_closed_cnt==0 ); FD_TEST( server_quic->metrics.conn_closed_cnt==0 ); - long dt = t - last_ts; + long dt = t - last_ts; float net_rx_gbps = (float)(8UL*server_quic->metrics.net_rx_byte_cnt) / (float)dt; float net_rx_gpps = (float)server_quic->metrics.net_rx_pkt_cnt / (float)dt; float net_tx_gbps = (float)(8UL*server_quic->metrics.net_tx_byte_cnt) / (float)dt; float net_tx_gpps = (float)server_quic->metrics.net_tx_pkt_cnt / (float)dt; - float data_rate = (8 * (float)rx_tot_sz) / (float)dt; + float data_rate = (8 * (float)rx_tot_sz) / (float)dt; FD_LOG_NOTICE(( "data=%6.4g Gbps net_rx=(%6.4g Gbps %6.4g Mpps) net_tx=(%6.4g Gbps %6.4g Mpps) bytes=%g", (double)data_rate, (double)net_rx_gbps, (double)net_rx_gpps * 1e3, diff --git a/src/waltz/quic/tests/test_quic_client_flood.c b/src/waltz/quic/tests/test_quic_client_flood.c index 1c19b1c916..5d8a9611a8 100644 --- a/src/waltz/quic/tests/test_quic_client_flood.c +++ b/src/waltz/quic/tests/test_quic_client_flood.c @@ -190,21 +190,20 @@ run_quic_client( /* Reclaim packet metas */ if ( g_unreliable ) { - /* treat all packets as ACKed (freeing handshake data, etc.) */ - fd_quic_pkt_meta_trackers_t * trackers = &client_conn->pkt_meta_trackers; - static uint enc_level = fd_quic_enc_level_appdata_id; + /* treat all packets as ACKed (freeing handshake data, etc.) */ + static const uint enc_level = fd_quic_enc_level_appdata_id; + fd_quic_pkt_meta_tracker_t * trackers = &client_conn->pkt_meta_tracker; + 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_ds_t * sent = &trackers->sent_pkt_metas[enc_level]; - fd_quic_pkt_meta_t * pool = trackers->pkt_meta_pool_join; FD_QUIC_PKT_META_PROCESS_FROM_BEGIN( fd_quic_reclaim_pkt_meta( client_conn, e, enc_level ), - fd_quic_pkt_meta_pool_ele_release( pool, prev ), - 0, - sent, - pool ); + fd_quic_pkt_meta_pool_ele_release( pool, prev ), + 0, + sent, + pool ); - fd_quic_pkt_meta_clear( trackers, enc_level ); + fd_quic_pkt_meta_ds_clear( trackers, enc_level ); } - } do {