Shopify / ruby_memcheck

Use Valgrind memcheck on your native gem without going crazy
MIT License
236 stars 12 forks source link

Add support for enabling valgrind's fair-sched option? #51

Open ivoanjo opened 3 months ago

ivoanjo commented 3 months ago

Hey :wave:

Big thanks for ruby_memcheck. I've been setting it up to run in CI for the datadog gem (the profiling stuff especially has a lot of native code).

I am happy to report that (so far) I don't have any wins to report ;) ;) ;)

I would like to ask for a small feature: Adding support for controlling valgrind's --fair-sched option.

Right now I'm using the escape hatch RubyMemcheck.config(valgrind_options: ['--fair-sched=yes']) to set it.

Why this option? In several cases, our test suite assumes multi-threaded behavior (because, e.g. the profiler runs in parallel with the Ruby app), and in some cases we run stuff in forks; by default valgrind forces everything to run sequentially (there's a joke in here about adding an even more global GVL somewhere...). This makes some of our specs fail (usually with timeouts) or hang (because they busy-loop in a few cases) as they would on a single-core machine.

Using this setting makes these tests pass and saves us from manually needing to maintain a list of excluded tests just for ruby_memtest.

Thanks again! :bow:

ivoanjo commented 3 months ago

Actually... when running with this setting it looks like sometimes valgrind doesn't write the full output? đŸ¤”

Parsing of the result fails with FATAL: Premature end of data in tag valgrindoutput line 3 and indeed the output xml is missing closing that tag.

So, while it would be useful, I guess I won't use this setting for now. (Feel free to close the issue?)