On Thu, May 19, 2016 at 05:51:19PM -0500, Ryan Moats wrote:
> 
> As I mentioned at today's IRC meeting - we have a need to include measuring
> the performance of the OVN control channel under scale as part of our CI/CD
> test suite, which is driving us to examine the feasibility of some sort of
> lightweight instrumentation of ovsdb-server, ovn-controller, and
> ovn-northd.
> While I'm familiar with the counters that are dumped during an excessive
> poll
> cycle, those don't entirely meet our needs, as I am looking for something
> that allows for the amount of clock time spent in each method as our
> starting point.
> 
> The reason for the "lightweight" adjective above is that we are looking to
> run the same code base in both CI/CD and production, and that means
> attaching
> a profiler to the code base is contra-indicated.  My initial thought is to
> create a new general arg (--profile) that sets a boolean (for example
> is_profiling), then define a macro like the following:
> 
> #define INSTRUMENT(x)  (if (is_profiling) { VLOG_DEBUG(x); })
> 
> and then decorating methods with INSTRUMENT at its start and exit.

Something like this might work (GCC only):

    struct instrumentation {
        const char *function;
        long long int start;
    };

    #define INSTRUMENTATION \
        struct instrumentation inst __attribute__((cleanup(log_inst))) = \
            { __func__,  time_msec(); }

    void
    log_inst(const struct instrumentation *inst)
    {
        VLOG_DBG("%s: %d ms", inst->function, time_msec() - inst->start);
    }

and then you'd only need one line for a whole function.  I haven't tried
it though.

There's a PERF macro with a different design in lib/perf-counter.h.
_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to