Skip to content

Commit 13d31bd

Browse files
small optimizations for XQUIC (#410)
* [=] schedulers have been updated with some optimizing changes [-] removed unnecessary "memset" calls after "calloc" [~] changed using of "xqc_send_ctl_get_srtt" * [~] added information about other errors [-] removed unnecessary "memset" calls after "calloc"
1 parent 82bfa5c commit 13d31bd

13 files changed

+31
-58
lines changed

src/transport/scheduler/xqc_scheduler_backup.c

+3-11
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ xqc_backup_scheduler_get_path(void *scheduler, xqc_connection_t *conn,
2626
xqc_packet_out_t *packet_out, int check_cwnd, int reinject,
2727
xqc_bool_t *cc_blocked)
2828
{
29-
xqc_path_ctx_t *best_path[XQC_PATH_CLASS_PERF_CLASS_SIZE];
30-
xqc_bool_t has_path[XQC_PATH_CLASS_PERF_CLASS_SIZE];
29+
xqc_path_ctx_t *best_path[XQC_PATH_CLASS_PERF_CLASS_SIZE] = { NULL };
30+
xqc_bool_t has_path[XQC_PATH_CLASS_PERF_CLASS_SIZE] = { XQC_FALSE };
3131
xqc_path_perf_class_t path_class;
3232
xqc_bool_t available_path_exists;
3333

@@ -44,14 +44,6 @@ xqc_backup_scheduler_get_path(void *scheduler, xqc_connection_t *conn,
4444
*cc_blocked = XQC_FALSE;
4545
}
4646

47-
for (path_class = XQC_PATH_CLASS_AVAILABLE_HIGH;
48-
path_class < XQC_PATH_CLASS_PERF_CLASS_SIZE;
49-
path_class++)
50-
{
51-
best_path[path_class] = NULL;
52-
has_path[path_class] = XQC_FALSE;
53-
}
54-
5547
xqc_list_for_each_safe(pos, next, &conn->conn_paths_list) {
5648
path = xqc_list_entry(pos, xqc_path_ctx_t, path_list);
5749

@@ -87,7 +79,7 @@ xqc_backup_scheduler_get_path(void *scheduler, xqc_connection_t *conn,
8779
path_srtt = xqc_send_ctl_get_srtt(path->path_send_ctl);
8880

8981
if (best_path[path_class] == NULL
90-
|| path_srtt < best_path[path_class]->path_send_ctl->ctl_srtt)
82+
|| path_srtt < xqc_send_ctl_get_srtt(best_path[path_class]->path_send_ctl))
9183
{
9284
best_path[path_class] = path;
9385
}

src/transport/scheduler/xqc_scheduler_backup.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010

1111
extern const xqc_scheduler_callback_t xqc_backup_scheduler_cb;
1212

13-
#endif /* _XQC_SCHEDULER_BACKUP_H_INCLUDED_ */
13+
#endif /* _XQC_SCHEDULER_BACKUP_H_INCLUDED_ */

src/transport/scheduler/xqc_scheduler_common.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66

77
xqc_bool_t xqc_scheduler_check_path_can_send(xqc_path_ctx_t *path, xqc_packet_out_t *packet_out, int check_cwnd);
88

9-
#endif
9+
#endif /* _XQC_SCHEDULER_COMMON_H_INCLUDED_ */

src/transport/scheduler/xqc_scheduler_interop.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ xqc_interop_scheduler_get_path(void *scheduler,
8181
if (path->app_path_status == XQC_APP_PATH_STATUS_AVAILABLE) {
8282
best_path = path;
8383
min_rtt = path_srtt;
84-
8584
} else {
8685
best_standby_path = path;
8786
min_rtt_standby = path_srtt;
@@ -112,4 +111,4 @@ const xqc_scheduler_callback_t xqc_interop_scheduler_cb = {
112111
.xqc_scheduler_size = xqc_interop_scheduler_size,
113112
.xqc_scheduler_init = xqc_interop_scheduler_init,
114113
.xqc_scheduler_get_path = xqc_interop_scheduler_get_path,
115-
};
114+
};

src/transport/scheduler/xqc_scheduler_interop.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010

1111
extern const xqc_scheduler_callback_t xqc_interop_scheduler_cb;
1212

13-
#endif
13+
#endif /* _XQC_SCHEDULER_INTEROP_H_INCLUDED_ */

src/transport/scheduler/xqc_scheduler_minrtt.c

+1-10
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include "src/transport/scheduler/xqc_scheduler_common.h"
88
#include "src/transport/xqc_send_ctl.h"
99

10-
1110
static size_t
1211
xqc_minrtt_scheduler_size()
1312
{
@@ -25,8 +24,8 @@ xqc_minrtt_scheduler_get_path(void *scheduler,
2524
xqc_connection_t *conn, xqc_packet_out_t *packet_out, int check_cwnd, int reinject,
2625
xqc_bool_t *cc_blocked)
2726
{
28-
xqc_path_ctx_t *best_path[XQC_PATH_CLASS_PERF_CLASS_SIZE];
2927
xqc_path_perf_class_t path_class;
28+
xqc_path_ctx_t *best_path[XQC_PATH_CLASS_PERF_CLASS_SIZE] = { NULL };
3029

3130
xqc_list_head_t *pos, *next;
3231
xqc_path_ctx_t *path;
@@ -37,13 +36,6 @@ xqc_minrtt_scheduler_get_path(void *scheduler,
3736
xqc_bool_t reached_cwnd_check = XQC_FALSE;
3837
xqc_bool_t path_can_send;
3938

40-
for (path_class = XQC_PATH_CLASS_AVAILABLE_HIGH;
41-
path_class < XQC_PATH_CLASS_PERF_CLASS_SIZE;
42-
path_class++)
43-
{
44-
best_path[path_class] = NULL;
45-
}
46-
4739
if (cc_blocked) {
4840
*cc_blocked = XQC_FALSE;
4941
}
@@ -103,7 +95,6 @@ xqc_minrtt_scheduler_get_path(void *scheduler,
10395
best_path[path_class] ? best_path[path_class]->path_id : -1);
10496
}
10597

106-
10798
for (path_class = XQC_PATH_CLASS_AVAILABLE_HIGH;
10899
path_class < XQC_PATH_CLASS_PERF_CLASS_SIZE;
109100
path_class++)

src/transport/scheduler/xqc_scheduler_minrtt.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010

1111
extern const xqc_scheduler_callback_t xqc_minrtt_scheduler_cb;
1212

13-
#endif /* _XQC_SCHEDULER_MINRTT_H_INCLUDED_ */
13+
#endif /* _XQC_SCHEDULER_MINRTT_H_INCLUDED_ */

src/transport/scheduler/xqc_scheduler_rap.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@
1616

1717
extern const xqc_scheduler_callback_t xqc_rap_scheduler_cb;
1818

19-
#endif
19+
#endif /* _XQC_SCHEDULER_MINRTT_H_INCLUDED_ */

src/transport/xqc_engine.c

+17-8
Original file line numberDiff line numberDiff line change
@@ -437,38 +437,52 @@ xqc_engine_create(xqc_engine_type_t engine_type,
437437
engine->config->cfg_log_event,
438438
engine->config->cfg_log_timestamp,
439439
engine->config->cfg_log_level_name,
440-
&engine->eng_callback.log_callbacks, engine->user_data);
440+
&engine->eng_callback.log_callbacks,
441+
engine->user_data);
442+
441443
if (engine->log == NULL) {
442444
goto fail;
443445
}
444446

445447
engine->rand_generator = xqc_random_generator_create(engine->log);
446448
if (engine->rand_generator == NULL) {
449+
xqc_log(engine->log, XQC_LOG_ERROR,
450+
"|unable to initialize random generator in engine|");
447451
goto fail;
448452
}
449453

450454
engine->conns_hash = xqc_engine_conns_hash_create(engine->config);
451455
if (engine->conns_hash == NULL) {
456+
xqc_log(engine->log, XQC_LOG_ERROR,
457+
"|unable to create connections hash|");
452458
goto fail;
453459
}
454460

455461
engine->conns_hash_dcid = xqc_engine_conns_hash_create(engine->config);
456462
if (engine->conns_hash_dcid == NULL) {
463+
xqc_log(engine->log, XQC_LOG_ERROR,
464+
"|unable to create connections hash for reset packets|");
457465
goto fail;
458466
}
459467

460468
engine->conns_hash_sr_token = xqc_engine_conns_hash_create(engine->config);
461469
if (engine->conns_hash_sr_token == NULL) {
470+
xqc_log(engine->log, XQC_LOG_ERROR,
471+
"|unable to create connections hash for stateless reset|");
462472
goto fail;
463473
}
464474

465475
engine->conns_active_pq = xqc_engine_conns_pq_create(engine->config);
466476
if (engine->conns_active_pq == NULL) {
477+
xqc_log(engine->log, XQC_LOG_ERROR,
478+
"|unable to create priority queue|");
467479
goto fail;
468480
}
469481

470482
engine->conns_wait_wakeup_pq = xqc_engine_wakeup_pq_create(engine->config);
471483
if (engine->conns_wait_wakeup_pq == NULL) {
484+
xqc_log(engine->log, XQC_LOG_ERROR,
485+
"|unable to create wakeup priority queue|");
472486
goto fail;
473487
}
474488

@@ -477,11 +491,12 @@ xqc_engine_create(xqc_engine_type_t engine_type,
477491
engine->tls_ctx = xqc_tls_ctx_create((xqc_tls_type_t)engine->eng_type, ssl_config,
478492
&xqc_conn_tls_cbs, engine->log);
479493
if (NULL == engine->tls_ctx) {
480-
xqc_log(engine->log, XQC_LOG_ERROR, "|create tls context error");
494+
xqc_log(engine->log, XQC_LOG_ERROR, "|create tls context error|");
481495
goto fail;
482496
}
483497

484498
} else {
499+
xqc_log(engine->log, XQC_LOG_ERROR, "|invalid SSL configuration|");
485500
goto fail;
486501
}
487502

@@ -1321,12 +1336,6 @@ xqc_engine_packet_process(xqc_engine_t *engine,
13211336
}
13221337

13231338

1324-
1325-
1326-
1327-
1328-
1329-
13301339
uint8_t
13311340
xqc_engine_config_get_cid_len(xqc_engine_t *engine)
13321341
{

src/transport/xqc_multipath.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ xqc_path_create(xqc_connection_t *conn, xqc_cid_t *scid, xqc_cid_t *dcid)
8686
if (path == NULL) {
8787
return NULL;
8888
}
89-
xqc_memzero(path, sizeof(xqc_path_ctx_t));
9089

9190
path->path_state = XQC_PATH_STATE_INIT;
9291
path->parent_conn = conn;
@@ -466,7 +465,7 @@ xqc_conn_create_path(xqc_engine_t *engine, const xqc_cid_t *scid, uint64_t *new_
466465

467466
path = xqc_conn_create_path_inner(conn, NULL, NULL, ps_inner);
468467
if (path == NULL) {
469-
xqc_log(conn->log, XQC_LOG_ERROR, "|xqc_path_create error|");
468+
xqc_log(conn->log, XQC_LOG_ERROR, "|xqc_conn_create_path_inner error|");
470469
return -XQC_EMP_CREATE_PATH;
471470
}
472471

src/transport/xqc_send_ctl.c

-7
Original file line numberDiff line numberDiff line change
@@ -1703,13 +1703,6 @@ xqc_send_ctl_get_earliest_loss_time(xqc_send_ctl_t *send_ctl, xqc_pkt_num_space_
17031703
return time;
17041704
}
17051705

1706-
1707-
xqc_usec_t
1708-
xqc_send_ctl_get_srtt(xqc_send_ctl_t *send_ctl)
1709-
{
1710-
return send_ctl->ctl_srtt;
1711-
}
1712-
17131706
float
17141707
xqc_send_ctl_get_retrans_rate(xqc_send_ctl_t *send_ctl)
17151708
{

src/transport/xqc_send_ctl.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,9 @@ void xqc_send_ctl_set_loss_detection_timer(xqc_send_ctl_t *send_ctl);
239239

240240
xqc_usec_t xqc_send_ctl_get_earliest_loss_time(xqc_send_ctl_t *send_ctl, xqc_pkt_num_space_t *pns_ret);
241241

242-
xqc_usec_t xqc_send_ctl_get_srtt(xqc_send_ctl_t *send_ctl);
242+
static inline xqc_usec_t xqc_send_ctl_get_srtt(xqc_send_ctl_t *send_ctl) {
243+
return send_ctl->ctl_srtt;
244+
}
243245

244246
float xqc_send_ctl_get_retrans_rate(xqc_send_ctl_t *send_ctl);
245247

tests/test_client.c

-12
Original file line numberDiff line numberDiff line change
@@ -1461,7 +1461,6 @@ xqc_convert_addr_text_to_sockaddr(int type,
14611461
{
14621462
if (type == AF_INET6) {
14631463
*saddr = calloc(1, sizeof(struct sockaddr_in6));
1464-
memset(*saddr, 0, sizeof(struct sockaddr_in6));
14651464
struct sockaddr_in6 *addr_v6 = (struct sockaddr_in6 *)(*saddr);
14661465
inet_pton(type, addr_text, &(addr_v6->sin6_addr.s6_addr));
14671466
addr_v6->sin6_family = type;
@@ -1470,7 +1469,6 @@ xqc_convert_addr_text_to_sockaddr(int type,
14701469

14711470
} else {
14721471
*saddr = calloc(1, sizeof(struct sockaddr_in));
1473-
memset(*saddr, 0, sizeof(struct sockaddr_in));
14741472
struct sockaddr_in *addr_v4 = (struct sockaddr_in *)(*saddr);
14751473
inet_pton(type, addr_text, &(addr_v4->sin_addr.s_addr));
14761474
addr_v4->sin_family = type;
@@ -1491,12 +1489,10 @@ xqc_client_init_addr(user_conn_t *user_conn,
14911489

14921490
if (ip_type == AF_INET6) {
14931491
user_conn->local_addr = (struct sockaddr *)calloc(1, sizeof(struct sockaddr_in6));
1494-
memset(user_conn->local_addr, 0, sizeof(struct sockaddr_in6));
14951492
user_conn->local_addrlen = sizeof(struct sockaddr_in6);
14961493

14971494
} else {
14981495
user_conn->local_addr = (struct sockaddr *)calloc(1, sizeof(struct sockaddr_in));
1499-
memset(user_conn->local_addr, 0, sizeof(struct sockaddr_in));
15001496
user_conn->local_addrlen = sizeof(struct sockaddr_in);
15011497
}
15021498
}
@@ -1512,13 +1508,6 @@ xqc_client_create_path_socket(xqc_user_path_t *path,
15121508
return XQC_ERROR;
15131509
}
15141510
#ifndef XQC_SYS_WINDOWS
1515-
if (path_interface != NULL
1516-
&& xqc_client_bind_to_interface(path->path_fd, path_interface) < 0)
1517-
{
1518-
printf("|xqc_client_bind_to_interface error|");
1519-
return XQC_ERROR;
1520-
}
1521-
15221511
if (g_test_case == 103 || g_test_case == 104) {
15231512
path->rebinding_path_fd = xqc_client_create_socket((g_ipv6 ? AF_INET6 : AF_INET),
15241513
path->peer_addr, path->peer_addrlen, path_interface);
@@ -3418,7 +3407,6 @@ xqc_client_timeout_callback(int fd, short what, void *arg)
34183407
restart_after_a_while--;
34193408
//we don't care the memory leak caused by user_stream. It's just for one-shot testing. :D
34203409
user_stream_t *user_stream = calloc(1, sizeof(user_stream_t));
3421-
memset(user_stream, 0, sizeof(user_stream_t));
34223410
user_stream->user_conn = user_conn;
34233411
printf("gtest 15: restart from idle!\n");
34243412
user_stream->stream = xqc_stream_create(ctx.engine, &(user_conn->cid), NULL, user_stream);

0 commit comments

Comments
 (0)