On Fri, Mar 25, 2016 at 08:55:07AM +0800, Huang Lei wrote:
> From: Huang Lei <lhua...@ebay.com>
> 
> During our scalability test '2k HVs + 20k lports' we found that lexer is a
> major user of heap memory:
> -   5.22%  ovn-controller  libjemalloc.so.1    [.] free
>    - free
>       + 27.46% lexer_get
>       + 18.00% ofctrl_put
>       ...
> -   1.85%  ovn-controller  libjemalloc.so.1    [.] malloc
>    - malloc
>    - xmalloc
>       - 55.03% xmemdup0
>          - 90.58% lex_parse_id.isra.0
>             - lexer_get
>       ...
> 
> So lex_token is modified to usage a 'buffer' defined in it for tokens smaller
> than 128 bytes, and for tokens bigger than 128 bytes it turn to use heap
> memory. This change makes our test case run at least 10% faster.
> 
> Signed-off-by: Huang Lei <lhua...@ebay.com>

This seems like a win, thank you for working on it.  I have a few
suggestions.

First, I don't think that 'source' is necessary.  It's sufficient to
test whether 's' points to the internal buffer.  If it does, it's local
memory; otherwise, it's memory obtained from malloc().

Second, I don't think it's necessary to make lex_token larger.  It's
already huge because it has two 128-byte mf_subvalue structures.  We can
recycle that memory for the buffer.

Thus, I'd suggest something like this:

/* A token.
 *
 * 's' may point to 'buffer'; otherwise, it points to malloc()ed memory owned
 * by the token. */
struct lex_token {
    enum lex_type type;         /* One of LEX_*. */
    char *s;                    /* LEX_T_ID, LEX_T_STRING, LEX_T_ERROR only. */
    enum lex_format format;     /* LEX_T_INTEGER, LEX_T_MASKED_INTEGER only. */
    union {
        struct  {
            union mf_subvalue value; /* LEX_T_INTEGER, LEX_T_MASKED_INTEGER. */
            union mf_subvalue mask;  /* LEX_T_MASKED_INTEGER only. */
        };
        char buffer[256];       /* Buffer for LEX_T_ID/LEX_T_STRING. */
    };
};

Thanks,

Ben.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to