Branch: refs/heads/mtu2
Home:
https://github.com/kronosnet/kronosnet
Commit: 86c9d3a9188732b3a2c097f8a44ad4e7d3aa2a86
https://github.com/kronosnet/kronosnet/commit/86c9d3a9188732b3a2c097f8a44ad…
Author: Fabio M. Di Nitto <fdinitto(a)redhat.com>
Date: 2017-12-14 (Thu, 14 Dec 2017)
Changed paths:
M libknet/handle.c
M libknet/internals.h
M libknet/threads_heartbeat.c
M libknet/threads_pmtud.c
M libknet/threads_rx.c
Log Message:
-----------
[PMTUd] fix multiple issues and stability problems
- resolve locking issue with thread_heartbeat that was causing
spurious up/down link event.
In the event of a PMTUd run taking too long, the heartbeat
thread could hang for much longer than ping_timeout.
Use backoff_mutex to sync between threads instead of the global lock.
- pause the DATA tx thread when sending any PMTUd related packets.
Similar method as knet_send_sync, using the tx_mutex, allows a much
more stable communication between nodes without any visible performance
hit.
- calculate higher timeouts when using crypto to improve stability
- fix an odd race condition with the kernel where, during a single PMTUd run,
the same packet size was marked both BAD and GOOD (via EMSGSIZE) by the
kernel. That situation would cause our PMTUd to run away and calculate
bad values.
- add a minor usleep between sending PMTUd packets to give time to the
kernel to make its own mind about the link PMTU. This is based on average
latency.
- since PMTUd can take several seconds before completion, use the "end time"
to record the last run vs the start time.
- fix a major issue in sending PMTUd reply where an errno was not being
passed down the link layer and would cause the RX thread to block forever.
Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com>