Hi This patchset takes the low-hanging fruit. It inlines all small functions, that are called too often (more than twice per request) and so have relatively high function call overhead.
- Lauri
>From 2e8a27946c2af4660f2d99e1abce3d963ce280fb Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <[email protected]> Date: Wed, 8 Aug 2012 17:03:44 +0300 Subject: [PATCH 1/5] iov: Make iov_add_entry inline Signed-off-by: Lauri Kasanen <[email protected]> --- src/include/mk_iov.h | 44 +++++++++++++++++++++++++++++++++++++++++--- src/mk_iov.c | 39 --------------------------------------- 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/src/include/mk_iov.h b/src/include/mk_iov.h index 1139723..1c4cdab 100644 --- a/src/include/mk_iov.h +++ b/src/include/mk_iov.h @@ -23,6 +23,7 @@ #define MK_IOV_H #include <sys/uio.h> +#include "mk_utils.h" #define MK_IOV_FREE_BUF 1 #define MK_IOV_NOT_FREE_BUF 0 @@ -60,9 +61,6 @@ struct mk_iov struct mk_iov *mk_iov_create(int n, int offset); int mk_iov_realloc(struct mk_iov *mk_io, int new_size); -extern inline int mk_iov_add_entry(struct mk_iov *mk_io, char *buf, - int len, mk_pointer sep, int free); - int mk_iov_add_separator(struct mk_iov *mk_io, mk_pointer sep); ssize_t mk_iov_send(int fd, struct mk_iov *mk_io); @@ -79,4 +77,44 @@ void mk_iov_separators_init(void); void mk_iov_free_marked(struct mk_iov *mk_io); void mk_iov_print(struct mk_iov *mk_io); +static inline void _mk_iov_set_free(struct mk_iov *mk_io, char *buf) +{ + mk_io->buf_to_free[mk_io->buf_idx] = (char *) buf; + mk_io->buf_idx++; +} + +static inline int mk_iov_add_entry(struct mk_iov *mk_io, char *buf, int len, + mk_pointer sep, int free) +{ + mk_io->io[mk_io->iov_idx].iov_base = (unsigned char *) buf; + mk_io->io[mk_io->iov_idx].iov_len = len; + mk_io->iov_idx++; + mk_io->total_len += len; + +#ifdef DEBUG_IOV + if (mk_io->iov_idx > mk_io->size) { + printf("\nDEBUG IOV :: ERROR, Broken array size in:"); + printf("\n '''%s'''", buf); + fflush(stdout); + } +#endif + + /* Add separator */ + if (sep.len > 0) { + mk_io->io[mk_io->iov_idx].iov_base = sep.data; + mk_io->io[mk_io->iov_idx].iov_len = sep.len; + mk_io->iov_idx++; + mk_io->total_len += sep.len; + } + + if (free == MK_IOV_FREE_BUF) { + _mk_iov_set_free(mk_io, buf); + } + + mk_bug(mk_io->iov_idx > mk_io->size); + + return mk_io->iov_idx; +} + + #endif diff --git a/src/mk_iov.c b/src/mk_iov.c index ccec079..8b8f5cc 100644 --- a/src/mk_iov.c +++ b/src/mk_iov.c @@ -42,45 +42,6 @@ const mk_pointer mk_iov_slash = mk_pointer_init(MK_IOV_SLASH); const mk_pointer mk_iov_none = mk_pointer_init(MK_IOV_NONE); const mk_pointer mk_iov_equal = mk_pointer_init(MK_IOV_EQUAL); -static void _mk_iov_set_free(struct mk_iov *mk_io, char *buf) -{ - mk_io->buf_to_free[mk_io->buf_idx] = (char *) buf; - mk_io->buf_idx++; -} - -int mk_iov_add_entry(struct mk_iov *mk_io, char *buf, int len, - mk_pointer sep, int free) -{ - mk_io->io[mk_io->iov_idx].iov_base = (unsigned char *) buf; - mk_io->io[mk_io->iov_idx].iov_len = len; - mk_io->iov_idx++; - mk_io->total_len += len; - -#ifdef DEBUG_IOV - if (mk_io->iov_idx > mk_io->size) { - printf("\nDEBUG IOV :: ERROR, Broken array size in:"); - printf("\n '''%s'''", buf); - fflush(stdout); - } -#endif - - /* Add separator */ - if (sep.len > 0) { - mk_io->io[mk_io->iov_idx].iov_base = sep.data; - mk_io->io[mk_io->iov_idx].iov_len = sep.len; - mk_io->iov_idx++; - mk_io->total_len += sep.len; - } - - if (free == MK_IOV_FREE_BUF) { - _mk_iov_set_free(mk_io, buf); - } - - mk_bug(mk_io->iov_idx > mk_io->size); - - return mk_io->iov_idx; -} - struct mk_iov *mk_iov_create(int n, int offset) { int i; -- 1.7.2.1
_______________________________________________ Monkey mailing list [email protected] http://lists.monkey-project.com/listinfo/monkey
