On 11/5/26 12:05 PM, Rosemarie O'Riorden wrote:
> On 11/5/26 2:05 AM, Ales Musil wrote:
>>
>>
>> On Sat, Oct 31, 2026 at 2:14 AM Rosemarie O'Riorden via dev <ovs-
>> [email protected] <mailto:[email protected]>> wrote:
>>
>> Compiling with ASan will completely distort the VmPeak memory usage
>> statistics the benchmark provides, and it is incompatible with Valgrind.
>> In addition, the timing statistics with either sanitizer will be
>> distorted too. So exit immediately if compiled with either.
>>
>> Reported-at: https://patchwork.ozlabs.org/project/ovn/
>> patch/[email protected]/ <https://
>> patchwork.ozlabs.org/project/ovn/patch/20261023051521.325497-1-
>> [email protected]/>
>> Fixes: f4a66b7871d6 ("tutorial: Add developer performance benchmark.")
>> Signed-off-by: Rosemarie O'Riorden <[email protected]
>> <mailto:[email protected]>>
>> ---
>>
>>
>> Hi Rosemarie,
>>
>> I'm not a huge fan of this approach, it seems a bit fragile.
>> We could utilize some macro "magic" instead to make it
>> more reliable. We could use __has_feature(address_sanitizer)
>> and __has_feature(undefined_behavior_sanitizer) to append string
>> to OVN_PACKAGE_VERSION, with that any binary compiled with
>> sanitizers could have "ASAN" and/or "UBSAN" in the --version string.
>> It doesn't affect normal operation and it might be quite useful in general
>> so you can very easily tell that the binary was compiled with any
>> sanitizer type WDYT?
>
> Hi Ales, thanks for the review.
>
> Hm, that is an interesting idea that does sound useful in general. I'll
> try this approach.
I should note that I just saw that __has_feature() is only supported in
gcc 14 and on, because it was originally just in clang, so we'll have
accommodate for older gcc versions.
I found a stack overflow thread [0] with a good workaround:
#if defined(__has_feature)
# if __has_feature(address_sanitizer) &&
!defined(__SANITIZE_ADDRESS__) // for clang
# define __SANITIZE_ADDRESS__ // GCC already sets this
# endif
#endif
#if defined(__SANITIZE_ADDRESS__)
// ASAN is enabled . . .
#endif
However there's no __SANITIZE_ADDRESS__ equivalent for the undefined
behavior sanitizer in gcc so that complicates things a bit... There was
actually a rejected gcc patch to add __SANITIZE_UNDEFINED__ :D and the
maintainer's recommendation was:
"Those that want such macros to say provide libubsan definitions on
their own can do that in their build system, next to
-fsanitize=undefined provide their own -Dwhatever that will make that
happen."
So I guess I can try this route. It feels kinda hacky and definitely
asymmetric but I don't see another way.
[0]
https://stackoverflow.com/questions/19627332/how-to-specify-gcc-version-at-runtime
[1] https://gcc.gnu.org/legacy-ml/gcc-patches/2019-09/msg01291.html
>
>>
>>
>> tutorial/ovn-benchmark.sh | 5 +++++
>> 1 file changed, 5 insertions(+)
>>
>> diff --git a/tutorial/ovn-benchmark.sh b/tutorial/ovn-benchmark.sh
>> index 01c090e84..9de23be1d 100755
>> --- a/tutorial/ovn-benchmark.sh
>> +++ b/tutorial/ovn-benchmark.sh
>> @@ -161,6 +161,11 @@ if [ ! -d "$PWD/sandbox" ]; then
>> exit 1
>> fi
>>
>> +if [ "$(nm -an $PWD/../controller/ovn-controller | grep "asan\|
>> ubsan")" ]; then
>> + echo "Compiled with address sanitizer, which is incompatible.
>> Exiting."
>> + exit 1
>> +fi
>> +
>> # Apply defaults if not set by user.
>> NODES=${NODES:-$DEFAULT_NODES}
>>
>> --
>> 2.56.0
>>
>> _______________________________________________
>> dev mailing list
>> [email protected] <mailto:[email protected]>
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev <https://
>> mail.openvswitch.org/mailman/listinfo/ovs-dev>
>>
>>
>> Regards,
>> Ales
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev