diff options
author | ValdikSS <iam@valdikss.org.ru> | 2017-04-16 21:19:07 +0300 |
---|---|---|
committer | ValdikSS <iam@valdikss.org.ru> | 2017-04-16 21:19:07 +0300 |
commit | fe1b53fd47ffd5a527d9e072ad179028e0330d2c (patch) | |
tree | 4f8e5cb622338b98a6ff06b451337c96034b31cb | |
parent | c2ce1771b360bdaf449df2e1662647a73bd98efb (diff) |
Improve data transfer speed and latency
Current version can only get 200-300 Kb/s on 1G LAN and the latency is clearly visible in ssh session.
This fix improves latency and speed by reducing sleep times and calling tox_iterate more frequently.
With this fix I get 12 Mb/s on 1G LAN. It's still far from perfect though.
-rw-r--r-- | main.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -287,7 +287,7 @@ int send_frame(protocol_frame *frame, uint8_t *data) | |||
287 | data[6] = BYTE2(frame->data_length); | 287 | data[6] = BYTE2(frame->data_length); |
288 | data[7] = BYTE1(frame->data_length); | 288 | data[7] = BYTE1(frame->data_length); |
289 | 289 | ||
290 | for(i = 0; i < 65;) /* 1.27 seconds per packet max */ | 290 | for(i = 0; i < 33;) /* 2.667 seconds per packet max */ |
291 | { | 291 | { |
292 | int j; | 292 | int j; |
293 | 293 | ||
@@ -329,7 +329,7 @@ int send_frame(protocol_frame *frame, uint8_t *data) | |||
329 | for(j = 0; j < i; j++) | 329 | for(j = 0; j < i; j++) |
330 | { | 330 | { |
331 | tox_iterate(tox, NULL); | 331 | tox_iterate(tox, NULL); |
332 | usleep(j * 10000); | 332 | usleep(j * 1000); |
333 | } | 333 | } |
334 | } | 334 | } |
335 | 335 | ||
@@ -897,6 +897,7 @@ int do_server_loop() | |||
897 | tunnel *tun = NULL; | 897 | tunnel *tun = NULL; |
898 | tunnel *tmp = NULL; | 898 | tunnel *tmp = NULL; |
899 | TOX_CONNECTION connected = 0; | 899 | TOX_CONNECTION connected = 0; |
900 | int sent_data = 0; | ||
900 | 901 | ||
901 | tox_callback_friend_lossless_packet(tox, parse_lossless_packet); | 902 | tox_callback_friend_lossless_packet(tox, parse_lossless_packet); |
902 | 903 | ||
@@ -910,6 +911,7 @@ int do_server_loop() | |||
910 | TOX_CONNECTION tmp_isconnected = 0; | 911 | TOX_CONNECTION tmp_isconnected = 0; |
911 | uint32_t tox_do_interval_ms; | 912 | uint32_t tox_do_interval_ms; |
912 | int select_rv = 0; | 913 | int select_rv = 0; |
914 | sent_data = 0; | ||
913 | 915 | ||
914 | /* Let tox do its stuff */ | 916 | /* Let tox do its stuff */ |
915 | tox_iterate(tox, NULL); | 917 | tox_iterate(tox, NULL); |
@@ -985,6 +987,7 @@ int do_server_loop() | |||
985 | frame->connid = tun->connid; | 987 | frame->connid = tun->connid; |
986 | frame->data_length = 0; | 988 | frame->data_length = 0; |
987 | send_frame(frame, data); | 989 | send_frame(frame, data); |
990 | sent_data = 1; | ||
988 | 991 | ||
989 | tunnel_delete(tun); | 992 | tunnel_delete(tun); |
990 | 993 | ||
@@ -1001,6 +1004,7 @@ int do_server_loop() | |||
1001 | frame->connid = tun->connid; | 1004 | frame->connid = tun->connid; |
1002 | frame->data_length = nbytes; | 1005 | frame->data_length = nbytes; |
1003 | send_frame(frame, tox_packet_buf); | 1006 | send_frame(frame, tox_packet_buf); |
1007 | sent_data = 1; | ||
1004 | } | 1008 | } |
1005 | } | 1009 | } |
1006 | } | 1010 | } |
@@ -1010,7 +1014,7 @@ int do_server_loop() | |||
1010 | ms_start = 1000 * tv_start.tv_sec + tv_start.tv_usec/1000; | 1014 | ms_start = 1000 * tv_start.tv_sec + tv_start.tv_usec/1000; |
1011 | ms_end = 1000 * tv_end.tv_sec + tv_end.tv_usec/1000; | 1015 | ms_end = 1000 * tv_end.tv_sec + tv_end.tv_usec/1000; |
1012 | 1016 | ||
1013 | if(ms_end - ms_start < tox_do_interval_ms) | 1017 | if(!sent_data && (ms_end - ms_start < tox_do_interval_ms)) |
1014 | { | 1018 | { |
1015 | /*log_printf(L_DEBUG, "Sleeping for %d ms extra to prevent high CPU usage\n", (tox_do_interval_ms - (ms_end - ms_start)));*/ | 1019 | /*log_printf(L_DEBUG, "Sleeping for %d ms extra to prevent high CPU usage\n", (tox_do_interval_ms - (ms_end - ms_start)));*/ |
1016 | usleep((tox_do_interval_ms - (ms_end - ms_start)) * 1000); | 1020 | usleep((tox_do_interval_ms - (ms_end - ms_start)) * 1000); |