]> git.droids-corp.org - dpdk.git/commitdiff
app/testpmd: avoid pages being swapped out
authorEelco Chaudron <echaudro@redhat.com>
Fri, 29 Sep 2017 08:11:10 +0000 (10:11 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 9 Oct 2017 23:30:16 +0000 (00:30 +0100)
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.

Signed-off-by: Eelco Chaudron <echaudro@redhat.com>
Acked-by: Aaron Conole <aconole@redhat.com>
Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com>
app/test-pmd/testpmd.c

index ecd94b63bd5dfa868dcf9a3caada377758bc7215..69d64026cc535e553e8fada82ab0ccf4b745ed92 100644 (file)
@@ -38,6 +38,7 @@
 #include <string.h>
 #include <time.h>
 #include <fcntl.h>
+#include <sys/mman.h>
 #include <sys/types.h>
 #include <errno.h>
 
@@ -2322,6 +2323,11 @@ main(int argc, char** argv)
        if (diag < 0)
                rte_panic("Cannot init EAL\n");
 
+       if (mlockall(MCL_CURRENT | MCL_FUTURE)) {
+               RTE_LOG(NOTICE, USER1, "mlockall() failed with error \"%s\"\n",
+                       strerror(errno));
+       }
+
 #ifdef RTE_LIBRTE_PDUMP
        /* initialize packet capture framework */
        rte_pdump_init(NULL);