diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2021-09-19 02:29:05 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2021-09-27 01:28:02 +0200 |
commit | 904b86ade7dba15f74cebde7d351920a76a82d2a (patch) | |
tree | 17245d136baf0de0288febdf372be616ecc7b6d8 /doc | |
parent | 3c839bfc4687c8b36550f22a6f7ee34e08102e27 (diff) | |
download | passt-904b86ade7dba15f74cebde7d351920a76a82d2a.tar passt-904b86ade7dba15f74cebde7d351920a76a82d2a.tar.gz passt-904b86ade7dba15f74cebde7d351920a76a82d2a.tar.bz2 passt-904b86ade7dba15f74cebde7d351920a76a82d2a.tar.lz passt-904b86ade7dba15f74cebde7d351920a76a82d2a.tar.xz passt-904b86ade7dba15f74cebde7d351920a76a82d2a.tar.zst passt-904b86ade7dba15f74cebde7d351920a76a82d2a.zip |
tcp: Rework window handling, timers, add SO_RCVLOWAT and pools for sockets/pipes
This introduces a number of fundamental changes that would be quite
messy to split. Summary:
- advertised window scaling can be as big as we want, we just need
to clamp window sizes to avoid exceeding the size of our "discard"
buffer for unacknowledged data from socket
- add macros to compare sequence numbers
- force sending ACK to guest/tap on PSH segments, always in pasta
mode, whenever we see an overlapping segment, or when we reach a
given threshold compared to our window
- we don't actually use recvmmsg() here, fix comments and label
- introduce pools for pre-opened sockets and pipes, to decrease
latency on new connections
- set receiving and sending buffer sizes to the maximum allowed,
kernel will clamp and round appropriately
- defer clean-up of spliced and non-spliced connection to timer
- in tcp_send_to_tap(), there's no need anymore to keep a large
buffer, shrink it down to what we actually need
- introduce SO_RCVLOWAT setting and activity tracking for spliced
connections, to coalesce data moved by splice() calls as much as
possible
- as we now have a compacted connection table, there's no need to
keep sparse bitmaps tracking connection activity -- simply go
through active connections with a loop in the timer handler
- always clamp the advertised window to half our sending buffer,
too, to minimise retransmissions from the guest/tap
- set TCP_QUICKACK for originating socket in spliced connections,
there's no need to delay them
- fix up timeout for unacknowledged data from socket
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'doc')
0 files changed, 0 insertions, 0 deletions