Update CHANGELOG, a few changes

This commit is contained in:
Dmitri Tikhonov 2018-04-02 15:16:01 -04:00
parent 34b068c133
commit da710addee
5 changed files with 30 additions and 23 deletions

View file

@ -1,3 +1,9 @@
2018-04-02
- [FEATURE] Windows support
- Reduce stack use -- outgoing packet batch is now allocated on the heap.
2018-03-09 2018-03-09
- [OPTIMIZATION] Merge series of ACKs if possible - [OPTIMIZATION] Merge series of ACKs if possible

View file

@ -135,6 +135,8 @@ The client library has been tested on the following platforms:
- ARM (Raspberry Pi 3) - ARM (Raspberry Pi 3)
- FreeBSD - FreeBSD
- i386 - i386
- Windows
- x86_64
- MacOS - MacOS
- x86_64 - x86_64

View file

@ -63,6 +63,13 @@
#define MIN_OUT_BATCH_SIZE 256 #define MIN_OUT_BATCH_SIZE 256
#define INITIAL_OUT_BATCH_SIZE 512 #define INITIAL_OUT_BATCH_SIZE 512
struct out_batch
{
lsquic_conn_t *conns [MAX_OUT_BATCH_SIZE];
lsquic_packet_out_t *packets[MAX_OUT_BATCH_SIZE];
struct lsquic_out_spec outs [MAX_OUT_BATCH_SIZE];
};
typedef struct lsquic_conn * (*conn_iter_f)(struct lsquic_engine *); typedef struct lsquic_conn * (*conn_iter_f)(struct lsquic_engine *);
static void static void
@ -196,6 +203,7 @@ struct lsquic_engine
*/ */
lsquic_time_t last_sent; lsquic_time_t last_sent;
lsquic_time_t deadline; lsquic_time_t deadline;
struct out_batch out_batch;
}; };
@ -1156,14 +1164,6 @@ encrypt_packet (lsquic_engine_t *engine, const lsquic_conn_t *conn,
} }
struct out_batch
{
lsquic_conn_t *conns [MAX_OUT_BATCH_SIZE];
lsquic_packet_out_t *packets[MAX_OUT_BATCH_SIZE];
struct lsquic_out_spec outs [MAX_OUT_BATCH_SIZE];
};
STAILQ_HEAD(closed_conns, lsquic_conn); STAILQ_HEAD(closed_conns, lsquic_conn);
@ -1363,7 +1363,7 @@ send_packets_out (struct lsquic_engine *engine,
unsigned n, w, n_sent, n_batches_sent; unsigned n, w, n_sent, n_batches_sent;
lsquic_packet_out_t *packet_out; lsquic_packet_out_t *packet_out;
lsquic_conn_t *conn; lsquic_conn_t *conn;
struct out_batch batch; struct out_batch *const batch = &engine->out_batch;
struct conns_out_iter conns_iter; struct conns_out_iter conns_iter;
int shrink, deadline_exceeded; int shrink, deadline_exceeded;
@ -1415,24 +1415,24 @@ send_packets_out (struct lsquic_engine *engine,
assert(conn->cn_flags & LSCONN_HAS_PEER_SA); assert(conn->cn_flags & LSCONN_HAS_PEER_SA);
if (packet_out->po_flags & PO_ENCRYPTED) if (packet_out->po_flags & PO_ENCRYPTED)
{ {
batch.outs[n].buf = packet_out->po_enc_data; batch->outs[n].buf = packet_out->po_enc_data;
batch.outs[n].sz = packet_out->po_enc_data_sz; batch->outs[n].sz = packet_out->po_enc_data_sz;
} }
else else
{ {
batch.outs[n].buf = packet_out->po_data; batch->outs[n].buf = packet_out->po_data;
batch.outs[n].sz = packet_out->po_data_sz; batch->outs[n].sz = packet_out->po_data_sz;
} }
batch.outs [n].peer_ctx = conn->cn_peer_ctx; batch->outs [n].peer_ctx = conn->cn_peer_ctx;
batch.outs [n].local_sa = (struct sockaddr *) conn->cn_local_addr; batch->outs [n].local_sa = (struct sockaddr *) conn->cn_local_addr;
batch.outs [n].dest_sa = (struct sockaddr *) conn->cn_peer_addr; batch->outs [n].dest_sa = (struct sockaddr *) conn->cn_peer_addr;
batch.conns [n] = conn; batch->conns [n] = conn;
batch.packets[n] = packet_out; batch->packets[n] = packet_out;
++n; ++n;
if (n == engine->batch_size) if (n == engine->batch_size)
{ {
n = 0; n = 0;
w = send_batch(engine, &conns_iter, &batch, engine->batch_size); w = send_batch(engine, &conns_iter, batch, engine->batch_size);
++n_batches_sent; ++n_batches_sent;
n_sent += w; n_sent += w;
if (w < engine->batch_size) if (w < engine->batch_size)
@ -1449,7 +1449,7 @@ send_packets_out (struct lsquic_engine *engine,
end_for: end_for:
if (n > 0) { if (n > 0) {
w = send_batch(engine, &conns_iter, &batch, n); w = send_batch(engine, &conns_iter, batch, n);
n_sent += w; n_sent += w;
shrink = w < n; shrink = w < n;
++n_batches_sent; ++n_batches_sent;

View file

@ -1362,9 +1362,8 @@ lsquic_send_ctl_elide_stream_frames (lsquic_send_ctl_t *ctl, uint32_t stream_id)
for (packet_out = TAILQ_FIRST(&ctl->sc_buffered_packets[n].bpq_packets); for (packet_out = TAILQ_FIRST(&ctl->sc_buffered_packets[n].bpq_packets);
packet_out; packet_out = next) packet_out; packet_out = next)
{ {
if (!(packet_out->po_frame_types & (1 << QUIC_FRAME_STREAM)))
continue;
next = TAILQ_NEXT(packet_out, po_next); next = TAILQ_NEXT(packet_out, po_next);
assert(packet_out->po_frame_types & (1 << QUIC_FRAME_STREAM));
lsquic_packet_out_elide_reset_stream_frames(packet_out, stream_id); lsquic_packet_out_elide_reset_stream_frames(packet_out, stream_id);
if (0 == packet_out->po_frame_types) if (0 == packet_out->po_frame_types)
{ {

View file

@ -83,7 +83,7 @@ lsquic_stream_acked (lsquic_stream_t *stream)
static void static void
elide_single_stream_frame (void) elide_single_stream_frame (void)
{ {
struct packet_out_srec_iter posi = { 0 }; struct packet_out_srec_iter posi;
struct lsquic_engine_public enpub; struct lsquic_engine_public enpub;
lsquic_stream_t streams[1]; lsquic_stream_t streams[1];
lsquic_packet_out_t *packet_out; lsquic_packet_out_t *packet_out;