On Thu, Sep 21, 2017 at 02:24:28PM +0200, Eelco Chaudron wrote: > On 19/09/17 09:28, Olivier MATZ wrote: > > Hi, > > > > On Thu, Sep 14, 2017 at 09:22:38AM +0200, Eelco Chaudron wrote: > > > On 13/09/17 11:39, Thomas Monjalon wrote: > > > > 12/09/2017 15:08, Eelco Chaudron: > > > > > 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. > > > > 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?
Since it's not critical, maybe NOTICE is better than WARNING. One more question: what would be the drawback of calling mlockall() after eal_init()? (rte_log would be initialized) Thanks, Olivier