: CCID3/TFRC updates, net timestamps, TX locking, bug fixes,
cover : CCID3/TFRC updates, net timestamps, TX locking, bug fixes,
This is the first lot of patches for CCID3 and TFRC. The second lot will be submitted subsequently, when a dependency with an earlier patch has been resolved.
All patches have been tested for over a month, this particular configuration has additionally been compile-tested and performance-tested, and uploaded to
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog
P a t c h S e t S u m m a r y
---------------------------------
Patch 1: Bug fix for CCID3 - avoids that X hits zero (which is not standard-conform
due to min rate of 1 packet/64 sec; and triggers divide-by-zero exception)
Patch 2: Avoid accumulation of send credits (has been added to rfc3448bis, too).
Patch 3: Yet another `more debug statements' patch.
Patch 4: Cheaper & smaller timestamping; by not computing offsets (see next patches).
I found it important to reduce the cost of timestamping, since CCID 3 makes intensive use of it.
Patch 5: Complete missing documentation for dccp_sock (related to patch #4).
Patch 6: TX timestamping, use net timestamps (i.e. as soon as the packet is received)
to increase accuracy of timestamping.
Patch 7: RX timestamping, analogue of patch #6.
Patch 8: Honour initial (from Request/Response exchange) RTT estimate. Having integrated
using the initial handshake RTT sample, this patch uses the initial seed when available.
Patch 9: Make CCID 3 TX feedback reception ignore irrelevant states (further simplification).
Patch 10: Collapse a statement for computing `p' (also a simplification).
Patch 11: Bug fix which corrects setting the `idle' flag after nofeedback timer expiry.
Patch 12: Use t_RTO instead of ccid3hctx_state to test whether any (initial) feedback has been
received so far. No functional change, but better exploitation of available data.
Patch 13: Match up nofeedback timer handling with rfc3448bis and track state changes
feedback received (fb. packet arrives) <=> nofeedback (nofeedback timer expires). This makes the internal state machine more realistic: it moves between the states NO_FBACK and FBACK, according to which condition holds.
Patch 14: Implements rfc3448bis changes the computation of X when feedback is received.
(NB: At the time of printing, the changes were correct with regard to rfc3448bis-01.
The IETF folks keep changing this draft, may have to update at some point, but can not track weekly the draft changes. Or we decide to completely ignore all drafts and stick rigidly with RFC 3448 / 4342).
Patch 15: Disable softirqs in the transition "send skb in dccp_write_xmit" => "call ccid_hc_tx
packet_sent". This cured one synchronisation problem I observed in CCID3.
Patch 16: Preparation for using rw_locks on the sender TX history lists. Functions write and
read on the TX history asynchronously; this retrofits required locks.
Patch 17: TX history locking with analysis when Softirqs should be disabled.
Patch 18: Reduce time when TX lock is held - an optimisation of patch #17.
Patch 19: Remove unused fields from TX packet history structure - now even smaller.
Patch 20: Socket option to query current MPS - a `should' from RFC 4340, easy and useful to have.
Patch 21: Small optimisation for the dccp_wait_for_ccid loop.
Patch 22: Makes all debug' parameters of type bool' (since we are not using variable debug levels).
Patch 23: Fix for 64-bit architectures - use get_unaligned' to avoid kernel unaligned access' exception.
Patch 24: Macro for moving average - this is so often used in CCID3/TFRC that a macro becomes useful.
Patch 25: Add a test function dccp_data_packet (the analogue of `dccp_non_data_packet').
Quoted 9 lines · Gerrit Renker
This is the first lot of patches for CCID3 and TFRC. The second lot will be submitted subsequently, when a dependency with an earlier patch has been resolved.
All patches have been tested for over a month, this particular configuration has additionally been compile-tested and performance-tested, and uploaded to
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog
I've reviewed all of these patches now.
Where I didn't give a comment/acked-by/signed-off-by on a patch it's because I haven't understood it fully so said nothing instead.
Ian
Signature · 3 lines
Web: http://wand.net.nz/~iam4 Blog: http://iansblog.jandi.co.nz WAND Network Research Group
Quoting Ian McDonald:
| > All patches have been tested for over a month, this particular configuration | > has additionally been compile-tested and performance-tested, and uploaded to | > http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog | > | > | I've reviewed all of these patches now. | | Where I didn't give a comment/acked-by/signed-off-by on a patch it's | because I haven't understood it fully so said nothing instead.
Many thanks for going through these. Some patches become clearer (a few even overridden) by the remaining set of patches. For the record, I list those which have not been acked below, with small annotations what each patch does and how it fits into the bigger picture.
I would like to submit the others soon, this patch set is not a big thing, it mainly prepares the ground. Also, there is some trouble with the API with regard to half-closed states; will send an update soon.
Short summaries (for info)
--------------------------
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/5i_CCID3_No-Bursts-Due-To-Idle-Times.diff
This one goes back to the discussion on accumulating send credits, disallows large bursts.
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/7b_rfc3448bis_Irrelevant-States-Feedback.diff
This is more of a beautification, overridden later.
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/7d_rfc3448bis_Idle-State-After-NoFeedback-Expiry.diff
This is one of the later-overridden ones: Actually the idleness/quiescence detection in CCID3 is broken, the patch does not change the fact that this is broken. I can remove this patch as it is overriden later.
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/7e_rfc3448bis_Use-RTO-As-Feedback-Indicator.diff
This one extends the internal CCID3 state machine by exploiting that t_RTO is not set until the first feedback is set - so it can serve as indicator whether _any_ feedback has been received so far. Used by later patches.
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/7g_rfc3448bis_Updated-Feedback-Receive.diff
This creates conformance of the X computation with regard to draft rfc3448bis version 01 (the one in the IETF archives, not the one on Sally Floyd's website). The main point is that the sending rate X is now halved directly when p = 0 (this was not clear in the earlier version of that draft).
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/7h_rfc3448bis_Updated-Feedback-Receive.diff
This continues the previous patch, basically codifying the computation of X as presented in draft rfc3448bis, version 01. Maybe this is futile since those drafts are a moving target: if we have a clear agreement which draft(s) to use, I'd be happy to align all outstanding patches with that. So far I had assumed that using the latest drafts was ok; in particular since (i) based on some implementation experience (rather than ns-2), (ii) much more clear guidance than just RFC 4342 (which is generic but not specific).
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/8b_TX-Locking_CCID-3-Initial.diff
I think that adding TX locking to the lists is necessary for concurrent operation, especially since the CCID3 functions can run in different contexts (some are in interrupt, some use process context).
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/8c_TX-Locking_CCID-3-Main.diff
Same comment as above.
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/8d_TX-Locking_Faster-Purging.diff
Optimisation of the above.
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/9a_Sockopt_Get-Max-Packet-Size.diff
I think this is useful, it is a ``SHOULD'' from [RFC 4340, 14].
http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/9e_Option-Parsing_Using-Unaligned-Macro-Instead.diff
This is a real bug fix - one gets these errors eg. on sparc64.