All of lore.kernel.org
 help / color / mirror / Atom feed
From: michi1@michaelblizek.twilightparadox.com (michi1 at michaelblizek.twilightparadox.com)
To: kernelnewbies@lists.kernelnewbies.org
Subject: [RFC] Implementing an additional TCP congestion control algorithm (TCP-PR)
Date: Mon, 17 Aug 2015 21:32:58 +0200	[thread overview]
Message-ID: <20150817193258.GA4381@grml> (raw)
In-Reply-To: <55D0A10A.1050403@Student.Uni-Augsburg.DE>

Hi!

On 16:41 Sun 16 Aug     , Richard Sailer wrote:
> Hi,
> 
> > If reordering causes TCP to believe packets are lost, there will
> > probably be other issues as well, like sending of useless retransmits. I would
> > rather try to detect this kind of reordering and ignore dupacks and rely only
> > on timeouts to detect loss. 
> Well this is exactly how TCP-PR works :).
> But maybe this misunderstanding is my fault for writing a much to long
> and detailed mail. I will try to write shorter mails in future.
> 
> == About: Doing this inside Congestion control (CC) ==
> 
> Well I think sending retransmit is part of CC.
> Strictly CC is "everything done to adapt the amount of data sent to the
> transmission capacity of the network". But I'm not entirely sure if
> saying retransmission is part of this is 100% correct.
> 
> Well in the end practically it doesn't matter how one classifies the
> "not sending of retransmits" it has to be implemented.

This is what confused me: To me congestion control is only about adapting
the send speed.

> And from an implementation point of view I think you are right.
> None of the existing CC modules interferes with reacting on DUPACKs
> or sending retransmits.
> Also looking at the function pointer interface for modules
> /tcp_congestion_ops/ :
> 
> struct tcp_congestion_ops {
> 	struct list_head	list;
> 	u32 key;
> 	u32 flags;
> 
> 	/* initialize private data (optional) */
> 	void (*init)(struct sock *sk);
> 	/* cleanup private data  (optional) */
> 	void (*release)(struct sock *sk);
> 
> 	/* return slow start threshold (required) */
> 	u32 (*ssthresh)(struct sock *sk);
> 	/* do new cwnd calculation (required) */
> 	void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked);
> 	/* call before changing ca_state (optional) */
> 	void (*set_state)(struct sock *sk, u8 new_state);
> 	/* call when cwnd event occurs (optional) */
> 	void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
> 	/* call when ack arrives (optional) */
> 	void (*in_ack_event)(struct sock *sk, u32 flags);
> 	/* new value of cwnd after loss (optional) */
> 	u32  (*undo_cwnd)(struct sock *sk);
> 	/* hook for packet ack accounting (optional) */
> 	void (*pkts_acked)(struct sock *sk, u32 num_acked, s32 rtt_us);
> 	/* get info for inet_diag (optional) */
> 	size_t (*get_info)(struct sock *sk, u32 ext, int *attr,
> 			   union tcp_cc_info *info);
> 
> 	char 		name[TCP_CA_NAME_MAX];
> 	struct module 	*owner;
> };
> 
> doesn't look that promising.
> Well there is (*cwnd_event) which be meaningfull in
> "not reducing cwnd after a retransmission has been sent"
> and perhaps even for "not stopping the timer".
> But I'm not sure if sending retransmit packets can be prevented
> from here.
> Currently it looks like I will have to make some further parts
> of tcp_input.c and tcp_output.c available for CC modules.
> But I have to look deeper into this the next few days to know and do
> this for sure.

This is what I meant when I said congestion control is probably not what you
want to mess with.

	-Michi
-- 
programing a layer 3+4 network protocol for mesh networks
see http://michaelblizek.twilightparadox.com

      reply	other threads:[~2015-08-17 19:32 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-12  1:32 [RFC] Implementing an additional TCP congestion control algorithm (TCP-PR) - communication and organisation Richard Sailer
2015-08-12  2:06 ` Greg KH
2015-08-13 15:48 ` michi1 at michaelblizek.twilightparadox.com
2015-08-16 14:41   ` [RFC] Implementing an additional TCP congestion control algorithm (TCP-PR) Richard Sailer
2015-08-17 19:32     ` michi1 at michaelblizek.twilightparadox.com [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150817193258.GA4381@grml \
    --to=michi1@michaelblizek.twilightparadox.com \
    --cc=kernelnewbies@lists.kernelnewbies.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.