[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3] gcov: add new interface and 3.4 and 4.7 format support



On 12/10/16 14:34, Andrew Cooper wrote:
> On 12/10/16 14:26, George Dunlap wrote:
>> On 12/10/16 14:24, George Dunlap wrote:
>>> On 12/10/16 14:06, Wei Liu wrote:
>>>> On Wed, Oct 12, 2016 at 06:42:53AM -0600, Jan Beulich wrote:
>>>>>>>> On 11.10.16 at 12:31, <wei.liu2@xxxxxxxxxx> wrote:
>>>>>> --- /dev/null
>>>>>> +++ b/xen/common/gcov/gcc_4_7.c
>>>>>> @@ -0,0 +1,205 @@
>>>>>> +/*
>>>>>> + *  This code provides functions to handle gcc's profiling data format
>>>>>> + *  introduced with gcc 4.7.
>>>>>> + *
>>>>>> + *  This file is based heavily on gcc_3_4.c file.
>>>>>> + *
>>>>>> + *  For a better understanding, refer to gcc source:
>>>>>> + *  gcc/gcov-io.h
>>>>>> + *  libgcc/libgcov.c
>>>>>> + *
>>>>>> + *  Uses gcc-internal data definitions.
>>>>>> + *
>>>>>> + *  Imported from Linux and modified for Xen by
>>>>>> + *    Wei Liu <wei.liu2@xxxxxxxxxx>
>>>>>> + */
>>>>>> +
>>>>>> +#include <xen/string.h>
>>>>>> +
>>>>>> +#include "gcov.h"
>>>>>> +
>>>>>> +#if GCC_VERSION < 40700
>>>>>> +#error "Wrong version of GCC used to compile gcov"
>>>>>> +#endif
>>>>>> +
>>>>>> +#if (__GNUC__ > 5) || (__GNUC__ == 5 && __GNUC_MINOR__ >= 1)
>>>>>> +#define GCOV_COUNTERS                   10
>>>>>> +#elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9
>>>>>> +#define GCOV_COUNTERS                   9
>>>>>> +#else
>>>>>> +#define GCOV_COUNTERS                   8
>>>>>> +#endif
>>>>> I'm sorry for not having pointed this out on v2 (I had noticed it,
>>>>> but then didn't finish analyzing the situation), but I'm afraid this
>>>>> together with ...
>>>>>
>>>>>> +struct gcov_info {
>>>>>> +    unsigned int version;
>>>>>> +    struct gcov_info *next;
>>>>>> +    unsigned int stamp;
>>>>>> +    const char *filename;
>>>>>> +    void (*merge[GCOV_COUNTERS])(gcov_type *, unsigned int);
>>>>>> +    unsigned int n_functions;
>>>>>> +    struct gcov_fn_info **functions;
>>>>>> +};
>>>>> ... this structure's trailing fields actually getting used by the code
>>>>> won't work well when changing compiler versions without cleaning
>>>>> the tree.  I think instead you need thin gcc_5.c and gcc_4_9.c
>>>>> #define-ing their GCOV_COUNTERS and then #include-ing this
>>>>> shared source file. Plus btw, I don't think gcc 5.0.x (the
>>>>> development variant of 5.x) would use anything different from
>>>>> 5.1.x or 5.2.x; in fact use of __GNUC_MINOR__ should not
>>>>> normally be necessary anymore with gcc 5+.
>>>>>
>>>> Right. I will do something about this. Thanks for catching this.
>>>>
>>>>> And then - how is all of this supposed to be working in conjucntion
>>>>> with live patching, where the patch may have been created by yet
>>>>> another compiler version?
>>>>>
>>>> There is a version field in gcov_info, so we can compare that and reject
>>>> incompatible version.
>>>>
>>>> We need to use hooks in livepatching to call the constructor /
>>>> destructor when applying / reverting a live-patch.  We might need to be
>>>> cautious about locks or whatever, but I'm sure it can be figured out.
>>>>
>>>> But I have no idea how useful it would be to use gcov and livepatching
>>>> together.  For now the easiest thing to do is to
>>>>
>>>>    depends on !LIVEPATCH
>>>>
>>>> in Kconfig.
>>> Wouldn't it be just as easy, and more useful, to set a "has been
>>> livepatched" flag, and return errors for all gcov hypercalls if its' set?
>>>
>>> I would expect most users to want to build a single hypervisor that can
>>> be used for both gcov testing and live patching (under different
>>> circumstances).
>> I mean software provider, not user, of course.  That's what I would want
>> for CentOS, and I'm sure that's what the XenServer (and probably Oracle)
>> guys want as well.
> 
> GCOV is majority invasive, both in terms of performance (every basic
> block needs to do a locked increment of a counter) and data size
> (metadata for all basic blocks).
> 
> No software vendor is ever going to have it enabled in a production
> scenario.

You're right, I wasn't thinking.

But also presumably you'd like to be able to minimize the difference
between the thing you're testing and the thing you ship; having to
disable LivePatch increases the delta slightly.

Anyway, I still think having them both Kconfig-ured is a good idea, but
not so much that I'd spend any more time arguing for it.

 -George

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.