Cris Luengo
Cris Luengo

Reputation: 60761

How to get Valgrind to not instrument a specific shared object?

I'm using a proprietary library to import data, it uses the GPU (OpenGL) to transform the data. Running my program through Valgrind (memcheck) causes the data import to take 8-12 hours (instead of a fraction of a second). I need to do my Valgrind sessions overnight (and leave my screen unlocked all night, since the GPU stuff pauses while the screen is locked). This is causing a lot of frustration.

I'm not sure if this is related, but Valgrind shows thousands of out-of-bound read/write errors in the driver for my graphics card:

==10593== Invalid write of size 4
==10593==    at 0x9789746: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)

(I know how to suppress those warnings).

I have been unable to find any ways of selectively instrumenting code, or excluding certain shared libraries from being instrumented. I remember using a tool on Windows 20 years or so ago that would skip instrumenting selected binaries. It seems this is not possible with memcheck:

...unless things have changed in the last 6 or 7 years.

My question is: Is there anything at all that can be done to speed up the memory check? Or to not check memory accesses in certain parts of the program?

Right now the only solution I see is to modify the program to read data directly from disk, but I'd rather test the actual program I'm planning to deploy. :)

Upvotes: 1

Views: 1704

Answers (1)

Paul Floyd
Paul Floyd

Reputation: 6936

No, this is not possible. When you run an application under Valgrind it is not running natively under the OS but rather in a virtual environment.

Some of the tools like Callgrind have options to control the instrumentation. However, even with the instrumentation off the application under test is still running under the Valgrind virtual environment.

There are a few things you can do to make things less slow

  • Test an optimized build of your application. You will lost line number information as a result, however.
  • Turn of leak detection
  • Avoid costly options like trace-origins

The sanitizers are faster and can also detect stack overflows, but at the cost of requiring instrumentation.

Upvotes: 1

Related Questions