[patch 01/29] knfsd: Add infrastructure for measuring RPC service times.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Two new functions; svc_time_mark() remembers the current time
in a struct svc_time; svc_time_elapsed() calculates and returns
the time since a svc_time was marked.

Signed-off-by: Greg Banks <gnb@xxxxxxx>
---

 include/linux/sunrpc/svc.h |   12 ++++++++++++
 net/sunrpc/svc.c           |   25 +++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

Index: bfields/include/linux/sunrpc/svc.h
===================================================================
--- bfields.orig/include/linux/sunrpc/svc.h
+++ bfields/include/linux/sunrpc/svc.h
@@ -18,6 +18,16 @@
 #include <linux/sunrpc/svcauth.h>
 #include <linux/wait.h>
 #include <linux/mm.h>
+#include <linux/time.h>
+
+/*
+ * Structure used to implement a fast lockless elapsed time measure.
+ */
+struct svc_time
+{
+	struct timespec	st_spec;
+};
+
 
 /*
  * This is the RPC server thread function prototype
@@ -419,6 +429,8 @@ int		   svc_register(const struct svc_se
 void		   svc_wake_up(struct svc_serv *);
 void		   svc_reserve(struct svc_rqst *rqstp, int space);
 struct svc_pool *  svc_pool_for_cpu(struct svc_serv *serv, int cpu);
+void		   svc_time_mark(struct svc_time *);
+int		   svc_time_elapsed(const struct svc_time *, struct timespec *);
 char *		   svc_print_addr(struct svc_rqst *, char *, size_t);
 
 #define	RPC_MAX_ADDRBUFLEN	(63U)
Index: bfields/net/sunrpc/svc.c
===================================================================
--- bfields.orig/net/sunrpc/svc.c
+++ bfields/net/sunrpc/svc.c
@@ -1232,3 +1232,28 @@ u32 svc_max_payload(const struct svc_rqs
 	return max;
 }
 EXPORT_SYMBOL_GPL(svc_max_payload);
+
+
+void
+svc_time_mark(struct svc_time *st)
+{
+	getnstimeofday(&st->st_spec);
+}
+EXPORT_SYMBOL(svc_time_mark);
+
+int
+svc_time_elapsed(const struct svc_time *mark, struct timespec *ts)
+{
+	struct svc_time now;
+
+	svc_time_mark(&now);
+
+	if (now.st_spec.tv_sec < mark->st_spec.tv_sec)
+		return -EINVAL;	/* time going backwards */
+
+	*ts = timespec_sub(now.st_spec, mark->st_spec);
+
+	return 0;
+}
+EXPORT_SYMBOL(svc_time_elapsed);
+

--
Greg
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux