Re: [PATCH] app/testpmd: adds mlockall() to fix pages
From: Eelco Chaudron <echaudro@redhat.com>
Date: 2017-09-21 12:24:17
On 19/09/17 09:28, Olivier MATZ wrote:
Hi, On Thu, Sep 14, 2017 at 09:22:38AM +0200, Eelco Chaudron wrote:quoted
On 13/09/17 11:39, Thomas Monjalon wrote:quoted
12/09/2017 15:08, Eelco Chaudron:quoted
Call the mlockall() function, to attempt to lock all of its process memory into physical RAM, and preventing the kernel from paging any of its memory to disk. When using testpmd for performance testing, depending on the code path taken, we see a couple of page faults in a row. These faults effect the overall drop-rate of testpmd. On Linux the mlockall() call will prefault all the pages of testpmd (and the DPDK libraries if linked dynamically), even without LD_BIND_NOW.Does it work on FreeBSD?I do not have a FreeBSD setup, but from the documentation I've read the call is supported by FreeBSD. If some one has a working setup, please give this patch a quick try.quoted
Is there any drawback? Do we need to add an option for it?The only drawback I can think of is that with this change memory phyiscal memory is consumed as pages are pre-loaded. For testpmd (just loaded not doing anything) this is 2MB vs 35MB of memory used. I do not think this yields an extra option.One small comment: the call to mlockall() will fail if we don't have the permissions. I guess it's not an issue, but I wonder if we should log it?
I did not at add a log, as the rte log subsystem is not yet initialized.
However we could add a printf("WARNING: mlockall() failed with error %s")
like message. What do you think?
Olivier