All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dilip Daya <dilip.daya@hp.com>
To: linux-sctp@vger.kernel.org
Subject: Re: [PATCH] sctp: Add buffer utilization fields to /proc/net/sctp/assocs
Date: Thu, 11 Apr 2013 17:04:59 +0000	[thread overview]
Message-ID: <1365699899.2781.8.camel@pro6455b.example.com> (raw)
In-Reply-To: <4BC2A2E3B1AB5441B4415258B8908D4D10DBD103@G2W2530.americas.hpqcorp.net>

Hi Neil,

On Thu, 2013-04-11 at 09:28 -0400, Neil Horman wrote:
> On Wed, Apr 10, 2013 at 09:02:19PM +0000, Daya, Dilip (Telco Linux) wrote:
> > From: Dilip Daya <dilip.daya@hp.com>
> > 
> > This patch adds the following fields to /proc/net/sctp/assocs output:
> > 
> > 	- sk->sk_wmem_alloc      (transmit queue bytes committed)
> > 	- sk->sk_wmem_queued  (persistent queue size)
> > 	- sk->sk_sndbuf              (size of send buffer in bytes)
> > 	- sk->sk_rcvbuf               (size of receive buffer in bytes)
> > 
> > When small DATA chunks containing 136 bytes data are sent the TX_QUEUE 
> > (assoc->sndbuf_used) reaches a maximum of 40.9% of sk_sndbuf value when
> > peer.rwnd = 0. This was diagnosed from sk_wmem_alloc value reaching maximum
> > value of sk_sndbuf.
> > 
> > TX_QUEUE (assoc->sndbuf_used), sk_wmem_alloc and sk_wmem_queued values are
> > incremented in sctp_set_owner_w() for outgoing data chunks. Having access to
> > the above values in /proc/net/sctp/assocs will provide a better understanding
> > of SCTP buffer management.
> > 
> > With patch applied, example output when peer.rwnd = 0
> > 
> > where:
> >     ASSOC ffff880132298000 is sender
> >                  ffff880125343000 is receiver
> > 
> > # cat /proc/net/sctp/assocs
> >  ASSOC           SOCK            STY SST ST  HBKT ASSOC-ID TX_QUEUE RX_QUEUE \
> > ffff880132298000 ffff880124a0a0c0 2   1   3  29325    1      214656        0 \
> > ffff880125343000 ffff8801237d7700 2   1   3  36210    2           0   524520 \
> > 
> > UID   INODE LPORT  RPORT LADDRS <-> RADDRS       HBINT   INS  OUTS \
> >   0   25108 3455   3456  *10.4.8.3 <-> *10.5.8.3  7500     2     2 \
> >   0   27819 3456   3455  *10.5.8.3 <-> *10.4.8.3  7500     2     2 \
> > 
> > MAXRT T1X  T2X     RTXC sk_wmem_alloc sk_wmem_queued sk_sndbuf sk_rcvbuf
> >     4   0   0        72      525633         440320      524288    524288
> >     4   0   0         0           1              0      524288    524288
> > 
> > 
> > 
> > Signed-off-by: Dilip Daya <dilip.daya@hp.com>
> > ---
> >  net/sctp/proc.c |   20 +++++++++++++-------
> >  1 files changed, 13 insertions(+), 7 deletions(-)
> > 
> > diff --git a/net/sctp/proc.c b/net/sctp/proc.c
> > index 7923164..56636db 100644
> > --- a/net/sctp/proc.c
> > +++ b/net/sctp/proc.c
> > @@ -293,10 +293,11 @@ static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
> >     *pos = 0;
> >  
> >   if (*pos = 0)
> > -   seq_printf(seq, " ASSOC     SOCK   STY SST ST HBKT "
> > -       "ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
> > -       "RPORT LADDRS <-> RADDRS "
> > -       "HBINT INS OUTS MAXRT T1X T2X RTXC\n");
> > +   seq_printf(seq, " ASSOC           SOCK            STY SST ST  HBKT "
> > +       "ASSOC-ID TX_QUEUE RX_QUEUE     UID   INODE LPORT  RPORT "
> > +       "LADDRS <-> RADDRS                    HBINT   INS  OUTS MAXRT T1X"
> > +       "  T2X     RTXC sk_wmem_alloc sk_wmem_queued sk_sndbuf"
> > +       " sk_rcvbuf\n");
> >  
> I'm a bit leery of changing the spacing between the fields in the file like
> you've done above.  I know it would look better, but changing things like that
> can change the behavior of user space parsers, which we need to be careful of.
> 
> Also, can't you get this information via ss -m?

For TCP connections, 'yes', not for SCTP associations.

Thank you for reviewing this.


So, here is v2 of the patch with the fields spacing taken care of:

---

From: Dilip Daya <dilip.daya@hp.com>

This patch adds the following fields to /proc/net/sctp/assocs output:

	- sk->sk_wmem_alloc    (transmit queue bytes committed)
	- sk->sk_wmem_queued   (persistent queue size)
	- sk->sk_sndbuf        (size of send buffer in bytes)
	- sk->sk_rcvbuf        (size of receive buffer in bytes)

When small DATA chunks containing 136 bytes data are sent the TX_QUEUE
(assoc->sndbuf_used) reaches a maximum of 40.9% of sk_sndbuf value when
peer.rwnd = 0. This was diagnosed from sk_wmem_alloc value reaching
maximum value of sk_sndbuf.

TX_QUEUE (assoc->sndbuf_used), sk_wmem_alloc and sk_wmem_queued values
are incremented in sctp_set_owner_w() for outgoing data chunks. Having
access to the above values in /proc/net/sctp/assocs will provide a
better understanding of SCTP buffer management.

With patch applied, example output when peer.rwnd = 0

where:
    ASSOC ffff880132298000 is sender
          ffff880125343000 is receiver

 ASSOC           SOCK            STY SST ST  HBKT ASSOC-ID TX_QUEUE
RX_QUEUE \
ffff880132298000 ffff880124a0a0c0 2   1   3  29325    1      214656
0 \
ffff880125343000 ffff8801237d7700 2   1   3  36210    2           0
524520 \

UID   INODE LPORT  RPORT LADDRS <-> RADDRS       HBINT   INS  OUTS \
  0   25108 3455   3456  *10.4.8.3 <-> *10.5.8.3  7500     2     2 \
  0   27819 3456   3455  *10.5.8.3 <-> *10.4.8.3  7500     2     2 \

MAXRT T1X  T2X     RTXC sk_wmem_alloc sk_wmem_queued sk_sndbuf sk_rcvbuf
    4   0   0        72      525633         440320      524288    524288
    4   0   0         0           1              0      524288    524288

Signed-off-by: Dilip Daya <dilip.daya@hp.com>
---
 net/sctp/proc.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/net/sctp/proc.c b/net/sctp/proc.c
index 8c19e97..763abb3 100644
--- a/net/sctp/proc.c
+++ b/net/sctp/proc.c
@@ -296,7 +296,8 @@ static void * sctp_assocs_seq_start(struct seq_file
*seq, loff_t *pos)
 		seq_printf(seq, " ASSOC     SOCK   STY SST ST HBKT "
 				"ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
 				"RPORT LADDRS <-> RADDRS "
-				"HBINT INS OUTS MAXRT T1X T2X RTXC\n");
+				"HBINT INS OUTS MAXRT T1X T2X RTXC "
+				"sk_wmem_alloc sk_wmem_queued sk_sndbuf sk_rcvbuf\n");
 
 	return (void *)pos;
 }
@@ -351,11 +352,16 @@ static int sctp_assocs_seq_show(struct seq_file
*seq, void *v)
 		sctp_seq_dump_local_addrs(seq, epb);
 		seq_printf(seq, "<-> ");
 		sctp_seq_dump_remote_addrs(seq, assoc);
-		seq_printf(seq, "\t%8lu %5d %5d %4d %4d %4d %8d ",
+		seq_printf(seq, "\t%8lu %5d %5d %4d %4d %4d %8d "
+						"%8d %8d %8d %8d",
 			assoc->hbinterval, assoc->c.sinit_max_instreams,
 			assoc->c.sinit_num_ostreams, assoc->max_retrans,
 			assoc->init_retries, assoc->shutdown_retries,
-			assoc->rtx_data_chunks);
+			assoc->rtx_data_chunks,
+			atomic_read(&sk->sk_wmem_alloc),
+			sk->sk_wmem_queued,
+			sk->sk_sndbuf,
+			sk->sk_rcvbuf);
 		seq_printf(seq, "\n");
 	}
 	read_unlock(&head->lock);
-- 
1.5.6.5



  parent reply	other threads:[~2013-04-11 17:04 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-10 21:02 [PATCH] sctp: Add buffer utilization fields to /proc/net/sctp/assocs Daya, Dilip (Telco Linux)
2013-04-11 13:28 ` Neil Horman
2013-04-11 17:04 ` Dilip Daya [this message]
2013-04-11 17:30 ` Neil Horman
2013-04-11 18:44 ` Daniel Borkmann

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=1365699899.2781.8.camel@pro6455b.example.com \
    --to=dilip.daya@hp.com \
    --cc=linux-sctp@vger.kernel.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.