From f18df7c9523b59d4d3fa9b1d0ec1cd70428695fe Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Tue, 16 Jun 2015 08:25:05 +0200 Subject: [PATCH] net: add generic transfer statistics --- kernel/mars_net.c | 2 ++ kernel/mars_net.h | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/kernel/mars_net.c b/kernel/mars_net.c index 7443cd39..8833df7a 100644 --- a/kernel/mars_net.c +++ b/kernel/mars_net.c @@ -457,6 +457,7 @@ int _mars_send_raw(struct mars_socket *msock, const void *buf, int len, int flag sleeptime = 1000 / HZ; } + msock->s_send_bytes += sent; if (status >= 0) status = sent; @@ -642,6 +643,7 @@ int _mars_recv_raw(struct mars_socket *msock, void *buf, int minlen, int maxlen, sleeptime = 1000 / HZ; } status = done; + msock->s_recv_bytes += done; MARS_IO("#%d got %d bytes\n", msock->s_debug_nr, done); diff --git a/kernel/mars_net.h b/kernel/mars_net.h index a8844f41..f845ac90 100644 --- a/kernel/mars_net.h +++ b/kernel/mars_net.h @@ -43,9 +43,21 @@ extern bool mars_net_is_alive; * Later, some buffering was added in order to take advantage of * kernel_sendpage(). * Caching of meta description has also been added. + * + * Notice: we have a slightly restricted parallelism model. + * One sender and one receiver thread may work in parallel + * on the same socket instance. At low level, there must not exist + * multiple readers in parallel to each other, or multiple + * writers in parallel to each other. Otherwise, higher level + * protocol sequences would be disturbed anyway. + * When needed, you may achieve higher parallelism by doing your own + * semaphore locking around mars_{send,recv}_struct() or even longer + * sequences of subsets of your high-level protocol. */ struct mars_socket { struct socket *s_socket; + u64 s_send_bytes; + u64 s_recv_bytes; void *s_buffer; atomic_t s_count; int s_pos;