Linux-CIFS Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] Display max credits used at any one time for in flight requests
@ 2019-09-10  4:03 Steve French
  2019-09-10 16:46 ` Pavel Shilovsky
  0 siblings, 1 reply; 3+ messages in thread
From: Steve French @ 2019-09-10  4:03 UTC (permalink / raw)
  To: CIFS

[-- Attachment #1: Type: text/plain, Size: 19 bytes --]

-- 
Thanks,

Steve

[-- Attachment #2: 0001-smb3-display-max-credits-used-at-any-one-time.patch --]
[-- Type: text/x-patch, Size: 4719 bytes --]

From 0ab83f3152dc67da643844d91b70ef9eb98a723f Mon Sep 17 00:00:00 2001
From: Steve French <stfrench@microsoft.com>
Date: Mon, 9 Sep 2019 22:57:11 -0500
Subject: [PATCH] smb3: display max credits used at any one time

Displayed in /proc/fs/cifs/Stats once for each
socket we are connected to.

This allows us to find out what the maximum load we
put on a server was.  Except for large writes which can use
multiple credits this would normally equal the maximum number
of requests that had been in flight (at any one time). Note that
/proc/fs/cifs/Stats can be reset if you want to look at a
maximum in flight credits over a small period of time.

Sample output (immediately after mount):

Resources in use
CIFS Session: 1
Share (unique mount targets): 2
SMB Request/Response Buffer: 1 Pool size: 5
SMB Small Req/Resp Buffer: 1 Pool size: 30
Operations (MIDs): 0

0 session 0 share reconnects
Total vfs operations: 5 maximum at one time: 2

Max credits in flight: 2
1) \\localhost\scratch
SMBs: 18
Bytes read: 0  Bytes written: 0
...

Signed-off-by: Steve French <stfrench@microsoft.com>
---
 fs/cifs/cifs_debug.c | 2 ++
 fs/cifs/cifsglob.h   | 1 +
 fs/cifs/connect.c    | 1 +
 fs/cifs/smb2ops.c    | 2 ++
 fs/cifs/transport.c  | 4 ++++
 5 files changed, 10 insertions(+)

diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
index a38d796f5ffe..dc543ca801bf 100644
--- a/fs/cifs/cifs_debug.c
+++ b/fs/cifs/cifs_debug.c
@@ -452,6 +452,7 @@ static ssize_t cifs_stats_proc_write(struct file *file,
 		list_for_each(tmp1, &cifs_tcp_ses_list) {
 			server = list_entry(tmp1, struct TCP_Server_Info,
 					    tcp_ses_list);
+			server->max_in_flight = 0;
 #ifdef CONFIG_CIFS_STATS2
 			for (i = 0; i < NUMBER_OF_SMB2_COMMANDS; i++) {
 				atomic_set(&server->num_cmds[i], 0);
@@ -526,6 +527,7 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v)
 	list_for_each(tmp1, &cifs_tcp_ses_list) {
 		server = list_entry(tmp1, struct TCP_Server_Info,
 				    tcp_ses_list);
+		seq_printf(m, "\nMax credits in flight: %d", server->max_in_flight);
 #ifdef CONFIG_CIFS_STATS2
 		seq_puts(m, "\nTotal time spent processing by command. Time ");
 		seq_printf(m, "units are jiffies (%d per second)\n", HZ);
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index 6987fbc5a24a..ef2199913217 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -677,6 +677,7 @@ struct TCP_Server_Info {
 	unsigned int credits;  /* send no more requests at once */
 	unsigned int max_credits; /* can override large 32000 default at mnt */
 	unsigned int in_flight;  /* number of requests on the wire to server */
+	unsigned int max_in_flight; /* max number of requests that were on wire */
 	spinlock_t req_lock;  /* protect the two values above */
 	struct mutex srv_mutex;
 	struct task_struct *tsk;
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index e70112d67b0e..df1ccb581828 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -2728,6 +2728,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
 	tcp_ses->tcp_nodelay = volume_info->sockopt_tcp_nodelay;
 	tcp_ses->rdma = volume_info->rdma;
 	tcp_ses->in_flight = 0;
+	tcp_ses->max_in_flight = 0;
 	tcp_ses->credits = 1;
 	init_waitqueue_head(&tcp_ses->response_q);
 	init_waitqueue_head(&tcp_ses->request_q);
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
index f04cf62ff91d..8546e63bb9b9 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
@@ -203,6 +203,8 @@ smb2_wait_mtu_credits(struct TCP_Server_Info *server, unsigned int size,
 			credits->instance = server->reconnect_instance;
 			server->credits -= credits->value;
 			server->in_flight++;
+			if (server->in_flight > server->max_in_flight)
+				server->max_in_flight = server->in_flight;
 			break;
 		}
 	}
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
index 4fccb90492e9..308ad0f495e1 100644
--- a/fs/cifs/transport.c
+++ b/fs/cifs/transport.c
@@ -532,6 +532,8 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits,
 	if ((flags & CIFS_TIMEOUT_MASK) == CIFS_NON_BLOCKING) {
 		/* oplock breaks must not be held up */
 		server->in_flight++;
+		if (server->in_flight > server->max_in_flight)
+			server->max_in_flight = server->in_flight;
 		*credits -= 1;
 		*instance = server->reconnect_instance;
 		spin_unlock(&server->req_lock);
@@ -608,6 +610,8 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits,
 			if ((flags & CIFS_TIMEOUT_MASK) != CIFS_BLOCKING_OP) {
 				*credits -= num_credits;
 				server->in_flight += num_credits;
+				if (server->in_flight > server->max_in_flight)
+					server->max_in_flight = server->in_flight;
 				*instance = server->reconnect_instance;
 			}
 			spin_unlock(&server->req_lock);
-- 
2.20.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Display max credits used at any one time for in flight requests
  2019-09-10  4:03 [PATCH] Display max credits used at any one time for in flight requests Steve French
@ 2019-09-10 16:46 ` Pavel Shilovsky
  2019-09-11  3:20   ` Steve French
  0 siblings, 1 reply; 3+ messages in thread
From: Pavel Shilovsky @ 2019-09-10 16:46 UTC (permalink / raw)
  To: Steve French; +Cc: CIFS

server->in-flight is the number of requests in flight, not credits.
Even for multi-credit requests (READ or WRITE) we only
increment/decrement this value, so the following change line should be
updated:

+ seq_printf(m, "\nMax credits in flight: %d", server->max_in_flight);

with 's/Max credits/Max requests/'

The description of the patch and the title need similar changes as well.

--
Best regards,
Pavel Shilovsky

вт, 10 сент. 2019 г. в 03:42, Steve French <smfrench@gmail.com>:
>
> --
> Thanks,
>
> Steve

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Display max credits used at any one time for in flight requests
  2019-09-10 16:46 ` Pavel Shilovsky
@ 2019-09-11  3:20   ` Steve French
  0 siblings, 0 replies; 3+ messages in thread
From: Steve French @ 2019-09-11  3:20 UTC (permalink / raw)
  To: Pavel Shilovsky; +Cc: CIFS

Fixed this - and also partially updated the decrypt offload patch

On Tue, Sep 10, 2019 at 11:46 AM Pavel Shilovsky <piastryyy@gmail.com> wrote:
>
> server->in-flight is the number of requests in flight, not credits.
> Even for multi-credit requests (READ or WRITE) we only
> increment/decrement this value, so the following change line should be
> updated:
>
> + seq_printf(m, "\nMax credits in flight: %d", server->max_in_flight);
>
> with 's/Max credits/Max requests/'
>
> The description of the patch and the title need similar changes as well.
>
> --
> Best regards,
> Pavel Shilovsky
>
> вт, 10 сент. 2019 г. в 03:42, Steve French <smfrench@gmail.com>:
> >
> > --
> > Thanks,
> >
> > Steve



-- 
Thanks,

Steve

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, back to index

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-10  4:03 [PATCH] Display max credits used at any one time for in flight requests Steve French
2019-09-10 16:46 ` Pavel Shilovsky
2019-09-11  3:20   ` Steve French

Linux-CIFS Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-cifs/0 linux-cifs/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-cifs linux-cifs/ https://lore.kernel.org/linux-cifs \
		linux-cifs@vger.kernel.org linux-cifs@archiver.kernel.org
	public-inbox-index linux-cifs


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-cifs


AGPL code for this site: git clone https://public-inbox.org/ public-inbox