Hi Elias,

As mentioned by Dave, running Valgrind on VPP is challenging because of speed 
and custom allocators.
That being said, I am (slowly) working on integrating Address Sanitizer into 
VPP. I have some cleanup to do but I can share my WIP patches if interested.

Best
ben

> -----Original Message-----
> From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Dave Barach
> via Lists.Fd.Io
> Sent: lundi 9 septembre 2019 14:20
> To: Elias Rudberg <elias.rudb...@bahnhof.net>; vpp-dev@lists.fd.io
> Cc: vpp-dev@lists.fd.io
> Subject: Re: [vpp-dev] How to use valgrind to check for memory errors in
> vpp?
> 
> Dlmalloc [aka "Doug Lea Malloc"] is a lightly modified copy of the
> allocator described here: http://gee.cs.oswego.edu/dl/html/malloc.html. If
> you've managed to find an issue in it, please share the details. Until
> proven otherwise, I suspect the report rather than dlmalloc itself.
> 
> Vpp does indeed manage its own thread stacks. The so-called vpp process
> model [in truth: cooperative multi-tasking threads] uses setjmp/longjmp to
> switch stacks. The scheme is fundamental, and won't be changed to
> accomodate valgrind.
> 
> Dlmalloc does not support valgrind. It's a waste of a huge number of
> cycles to run valgrind unless the memory allocator supports it. My
> experience making vpp's previous memory allocator support valgrind might
> be worth sharing: it never worked very well. After > 15 years working on
> the code base, I've not felt the need to go back and make it work in
> detail.
> 
> Vpp uses multiple, independent heaps - some in shared memory - so
> switching to vanilla malloc() seems like a non-starter.
> 
> Vpp's virtual space is larger than one might like - note the difference
> with none of the plugins loaded - but in terms of real memory consumption
> we often see RSS sizes in the 20-30mb range. A decent fraction of the
> virtual space is used to avoid expensive computations in device drivers:
> to facilitate virtual <--> physical address translation.
> 
> Any issues accidentally introduced into the memory allocator would be a
> severe nuisance. Folks would be well-advised not to tinker with it.
> 
> HTH... Dave
> 
> -----Original Message-----
> From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Elias Rudberg
> Sent: Monday, September 9, 2019 4:43 AM
> To: vpp-dev@lists.fd.io
> Subject: [vpp-dev] How to use valgrind to check for memory errors in vpp?
> 
> Hello,
> 
> I would like to use valgrind to check for memory errors in vpp.
> 
> I understand that running something through valgrind makes it very very
> slow so that it is not an option for real production usage of vpp.
> However, valgrind is still very useful for finding errors even if it's
> only for very limited test runs, so I would very much like to make that
> work.
> 
> I know that vpp has some built-in checking for memory leaks, but the
> reason I want to use valgrind is not primarily to check for memory leaks
> but to check for other kinds of memory-access-related errors, like the
> "invalid read" and "invalid write" errors that valgrind can detect.
> 
> So far, what I have done is to build vpp (debug configuration) according
> to the instructions here: https://fdio-
> vpp.readthedocs.io/en/latest/gettingstarted/developers/building.html
> Then I stopped the vpp service since I want to run vpp from the command-
> line through valgrind, and finally I run it like this:
> 
> sudo valgrind vpp -c /etc/vpp/startup.conf
> 
> That gave warnings about "client switching stacks?" and suggested adding -
> -max-stackframe=137286291952 so I did that:
> 
> sudo valgrind --max-stackframe=137286291936 vpp -c /etc/vpp/startup.conf
> 
> Then valgrind gives a warning "Warning: set address range perms: large
> range" followed by some error reports of the type "Conditional jump or
> move depends on uninitialised value(s)" inside the mspace_malloc routine
> in dlmalloc.c.
> 
> I think these issues are probably related to the fact that vpp uses its
> own malloc implementation (in dlmalloc.c) instead of the default malloc,
> possibly combined with the fact that vpp uses very large (virual) memory.
> 
> Questions:
> 
> - Are there ways to configure vpp to allow it to work together with
> valgrind?
> 
> - Are there ways to make vpp use less memory? (currently "top" shows
> 0.205t VIRT memory usage for the vpp_main process)
> 
> - Is it possible to somehow configure vpp to use standard malloc instead
> of the dlmalloc.c implementation, perhaps sacrificing performance but
> making things work better with valgrind?
> 
> Best regards,
> Elias
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#13929): https://lists.fd.io/g/vpp-dev/message/13929
Mute This Topic: https://lists.fd.io/mt/34077527/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to