Skip to content

Commit

Permalink
tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
akhinvasara-jumptrading committed Feb 13, 2025
1 parent 7d11f4e commit 902a447
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 98 deletions.
2 changes: 1 addition & 1 deletion src/util/tmpl/test_treap.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ main( int argc,
ulong left_options = ((ulong)(~0UL<<q)) & val_pmap;
if( !left_options ) FD_TEST( treap_idx_is_null( idx ) ); /* nothing >= q in map */
else {
int check_val = __builtin_ctzl(left_options);
int check_val = fd_ulong_find_lsb(left_options);
FD_TEST( (idx<ele_max) && check_val==(int)pool[idx].val );
}
break;
Expand Down
76 changes: 43 additions & 33 deletions src/waltz/quic/fd_quic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1323,11 +1323,21 @@ fd_quic_abandon_enc_level( fd_quic_conn_t * conn,
/* treat all packets as ACKed (freeing handshake data, etc.) */
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_t * prev = NULL;
for( fd_quic_pkt_meta_ds_fwd_iter_t iter = fd_quic_pkt_meta_treap_fwd_iter_init( sent, pool );
!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( FD_LIKELY( prev ) ) {
fd_quic_pkt_meta_pool_ele_release( pool, prev );
}
fd_quic_reclaim_pkt_meta( conn, e, j );
prev = e;
}
if( FD_LIKELY( prev ) ) {
fd_quic_pkt_meta_pool_ele_release( pool, prev );
}

freed += fd_quic_pkt_meta_ds_ele_cnt( sent );
fd_quic_pkt_meta_ds_clear( tracker, j );
Expand Down Expand Up @@ -4881,15 +4891,15 @@ fd_quic_process_lost( fd_quic_conn_t * conn, uint enc_level, ulong cnt ) {
fd_quic_pkt_meta_t * pool = tracker->pkt_meta_pool_join;
ulong j = 0;

/* mark immediate expiry */
FD_QUIC_PKT_META_PROCESS_FROM_BEGIN( do {
e->expiry = 0;
j++;
} while (0),
,
FD_UNLIKELY( j > cnt ),
sent,
pool);
for( fd_quic_pkt_meta_ds_fwd_iter_t iter = fd_quic_pkt_meta_ds_fwd_iter_init( sent, pool );
!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( FD_UNLIKELY( j > cnt ) ) break;
e->expiry = 0;
j++;
}

/* do the retry processing */
fd_quic_pkt_meta_retry( conn->quic, conn, 0 /* don't force */, enc_level );
}
Expand Down Expand Up @@ -4919,20 +4929,18 @@ fd_quic_process_ack_range( fd_quic_conn_t * conn,
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( 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 );
} while( 0 ),
,
FD_UNLIKELY( e->pkt_number > hi ),
sent,
pool,
fd_quic_pkt_meta_ds_idx_ge( sent, lo, pool ) );
/* careful! assumes pool idx <--> iterator */
for( fd_quic_pkt_meta_ds_fwd_iter_t iter = fd_quic_pkt_meta_ds_idx_ge( sent, lo, pool );
!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( FD_UNLIKELY( e->pkt_number > hi ) ) break;
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_pkt_meta_remove_range( sent, pool, lo, hi );
}
Expand Down Expand Up @@ -5049,11 +5057,13 @@ fd_quic_handle_ack_frame( fd_quic_frame_ctx_t * context,

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_UNLIKELY( e->pkt_number >= low_ack_pkt_number ),
sent,
pool);
for( fd_quic_pkt_meta_ds_fwd_iter_t iter = fd_quic_pkt_meta_ds_fwd_iter_init( sent, pool );
!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( FD_UNLIKELY( e->pkt_number >= low_ack_pkt_number ) ) break;
skipped++;
}

if( FD_UNLIKELY( skipped > 3 ) ) {
fd_quic_process_lost( conn, enc_level, skipped - 3 );
Expand Down
27 changes: 17 additions & 10 deletions src/waltz/quic/fd_quic_pkt_meta.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,24 @@ fd_quic_pkt_meta_remove_range( fd_quic_pkt_meta_ds_t * ds,
ulong pkt_number_lo,
ulong pkt_number_hi ) {

fd_quic_pkt_meta_treap_fwd_iter_t l_iter = fd_quic_pkt_meta_treap_idx_ge( ds, pkt_number_lo, pool );
fd_quic_pkt_meta_ds_fwd_iter_t l_iter = fd_quic_pkt_meta_treap_idx_ge( ds, pkt_number_lo, pool );
fd_quic_pkt_meta_t * prev = NULL;

FD_QUIC_PKT_META_PROCESS(
,
{fd_quic_pkt_meta_treap_ele_remove( ds, prev, pool );
fd_quic_pkt_meta_pool_ele_release( pool, prev );},
FD_UNLIKELY( e->pkt_number > pkt_number_hi ),
ds,
pool,
l_iter
);
for( fd_quic_pkt_meta_ds_fwd_iter_t iter = l_iter;
!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( FD_UNLIKELY( e->pkt_number > pkt_number_hi ) ) break;
if( FD_LIKELY( prev ) ) {
fd_quic_pkt_meta_treap_ele_remove( ds, prev, pool );
fd_quic_pkt_meta_pool_ele_release( pool, prev );
}
prev = e;
}
if( FD_LIKELY( prev ) ) {
fd_quic_pkt_meta_treap_ele_remove( ds, prev, pool );
fd_quic_pkt_meta_pool_ele_release( pool, prev );
}
}

fd_quic_pkt_meta_t *
Expand Down
45 changes: 0 additions & 45 deletions src/waltz/quic/fd_quic_pkt_meta.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,51 +197,6 @@ struct fd_quic_pkt_meta_tracker {
fd_quic_pkt_meta_t * pkt_meta_pool_join;
};

/*
FD_QUIC_PKT_META_PROCESS processes the pkt_meta
@arguments:
- cb: executed verbatim, current pkt_meta named 'e'
- prev_cb: executed verbatim, previous pkt_meta named 'prev'
- condition: condition to stop processing. Evaluated at top of loop, with 'e' and 'prev' set
- sent: pointer to the ds
- pool: pointer to the backing pool
- start: iterator to start processing from */
#define FD_QUIC_PKT_META_PROCESS( cb, \
prev_cb, \
condition, \
sent, \
pool, \
start ) \
do { \
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 ) { \
break; \
} \
if( FD_LIKELY( prev ) ) { \
prev_cb; \
} \
cb; \
prev = e; \
} \
if( FD_LIKELY( prev ) ) { \
prev_cb; \
} \
} while( 0 );

/* FD_QUIC_PKT_META_PROCESS_FROM_BEGIN is like FD_QUIC_PKT_META_PROCESS,
with default param 'start' set to the beginning ds iterator */
#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 ) );


/* fd_quic_pkt_meta_tracker_init initializes the metadata tracker
In particular, it turns pkt_meta_mem into a pool of size total_meta_cnt
For each encoding level, it initializes the pkt_meta data structure
Expand Down
4 changes: 0 additions & 4 deletions src/waltz/quic/tests/test_quic_adversarial_ack.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,6 @@ main( int argc, char ** argv ) {
);
highest_known -= fd_ulong_min( range_sz, highest_known );

if( highest_known < max_inflight>>1 ) {
FD_LOG_NOTICE(( "Halfway through" ));
}

/* then middle-ish range_sz values (reduce locality) */
fd_quic_process_ack_range(
&conn,
Expand Down
20 changes: 15 additions & 5 deletions src/waltz/quic/tests/test_quic_client_flood.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,11 +196,21 @@ run_quic_client(
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_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_t* prev = NULL;

for( fd_quic_pkt_meta_ds_fwd_iter_t iter = fd_quic_pkt_meta_ds_fwd_iter_init( sent, pool );
!fd_quic_pkt_meta_ds_fwd_iter_done( iter );
iter = fd_quic_pkt_meta_ds_fwd_iter_next( iter, pool ) ) {
if( FD_LIKELY( prev ) ) {
fd_quic_pkt_meta_pool_ele_release( pool, prev );
}
fd_quic_pkt_meta_t * e = fd_quic_pkt_meta_ds_fwd_iter_ele( iter, pool );
fd_quic_reclaim_pkt_meta( client_conn, e, enc_level );
prev = e;
}
if( FD_LIKELY( prev ) ) {
fd_quic_pkt_meta_pool_ele_release( pool, prev );
}

fd_quic_pkt_meta_ds_clear( tracker, enc_level );
}
Expand Down

0 comments on commit 902a447

Please sign in to comment.