summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValdikSS <iam@valdikss.org.ru>2017-04-16 21:19:07 +0300
committerValdikSS <iam@valdikss.org.ru>2017-04-16 21:19:07 +0300
commitfe1b53fd47ffd5a527d9e072ad179028e0330d2c (patch)
tree4f8e5cb622338b98a6ff06b451337c96034b31cb
parentc2ce1771b360bdaf449df2e1662647a73bd98efb (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.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/main.c b/main.c
index a13fc46..350963b 100644
--- a/main.c
+++ b/main.c
@@ -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);