[PATCH 2/3] Print the hit rate of socket address cache with -C option
Masatake YAMATO
yamato at redhat.com
Thu Mar 19 16:17:29 UTC 2015
This patch extends -C option to print the hit rate of socket address cache.
It is printed only if both -C and -yy options are given.
Example output:
$ time ./strace -yy -C -o /tmp/LOG ./a.out; tail -5 /tmp/LOG
0.07 0.000004 4 1 brk
0.05 0.000003 3 1 arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00 0.006060 5231 1 total
socket info cache hit: 10100/10153
Changes:
* socketutils.c (scache_hit_count, scache_mishit_count): New variables.
(sockaddr_cache_summary): New function.
(print_sockaddr_in_cache): Count the hits and mishit.
* strace.c (cleanup): Print the hit rate of socket address cache if
-C option is given.
* defs.h (sockaddr_cache_summary): New declaration.
Signed-off-by: Masatake YAMATO <yamato at redhat.com>
---
defs.h | 1 +
socketutils.c | 15 ++++++++++++++-
strace.c | 5 ++++-
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/defs.h b/defs.h
index 5915da1..91ac41a 100644
--- a/defs.h
+++ b/defs.h
@@ -492,6 +492,7 @@ extern void printsiginfo(const siginfo_t *, int);
extern void printsiginfo_at(struct tcb *tcp, long addr);
extern void printfd(struct tcb *, int);
extern bool print_sockaddr_in_cache(const unsigned long);
+extern void sockaddr_cache_summary(FILE *);
extern bool print_sockaddr_by_inode(const unsigned long, const char *);
extern void print_dirfd(struct tcb *, int);
extern void printsock(struct tcb *, long, int);
diff --git a/socketutils.c b/socketutils.c
index 1c7c69d..7d8df75 100644
--- a/socketutils.c
+++ b/socketutils.c
@@ -481,14 +481,27 @@ unix_print(int fd, const unsigned long inode)
&& receive_responses(fd, inode, "UNIX", unix_parse_response);
}
+static unsigned long scache_hit_count;
+static unsigned long scache_mishit_count;
+
+void
+sockaddr_cache_summary(FILE * outf)
+{
+ fprintf(outf, "socket info cache hit: %lu/%lu\n",
+ scache_hit_count, scache_hit_count + scache_mishit_count);
+}
+
bool
print_sockaddr_in_cache(const unsigned long inode)
{
struct scache_entry *r;
r = scache_entries_find(inode);
- if (r)
+ if (r) {
scache_entry_print(r);
+ scache_hit_count++;
+ } else
+ scache_mishit_count++;
return r? true: false;
}
diff --git a/strace.c b/strace.c
index b714255..3304cdb 100644
--- a/strace.c
+++ b/strace.c
@@ -1807,8 +1807,11 @@ cleanup(void)
}
detach(tcp);
}
- if (cflag)
+ if (cflag) {
call_summary(shared_log);
+ if (show_fd_path)
+ sockaddr_cache_summary(shared_log);
+ }
}
static void
--
2.1.0
More information about the Strace-devel
mailing list