This is the initial patch to improve the timing system for
the iscsi initiator.
Preliminary plan to reduce ping/timeout scheduling overhead, while
also improving the functionality to more closely align with the
expected behavior:
- move to calloutng - with same 1-sec callouts (and a 10 ms
window, to allow some kernel scheduling improvements)
- change internal representation of (per session) timeouts
from seconds to milliseconds
- allow per-session timeouts to be freely configurable, with
bounded minimum of 100ms
- perform iscsid/login timeout callout only once (if configured)
instead of once every second.
- perform iscsi ping timeout three times in the
defined interval to transmit SCSI_NOP packets - rather than sending
one ping every second even when very long timeouts are configured.
- improve loss-of-connectivity detection by tracking socket buffer
levels between pings - if the socket buffer does not drain between
pings, better not wait for TCP RTO firing (which could be up to 512
seconds in between), but rather re-connect session quickly.
sysctls retain 1-sec granularity, only allow per-session settings
to be parsed as floats (e.g. 0.100 for 100 milliseconds)
Retain log output unless fractional-second timeouts are in use.