9be14bbf98fbe84c898cf038fa80c3f9124a2ee6
markd
  Sat Jan 11 13:29:12 2020 -0800
added madvise call after mmap to improve performance

diff --git src/gfServer/gfServer.c src/gfServer/gfServer.c
index 53a6f75..b12a7fd 100644
--- src/gfServer/gfServer.c
+++ src/gfServer/gfServer.c
@@ -734,34 +734,36 @@
 }
 
 void loadGenoFindIndex(char *fileName, struct genoFind **gfRet, struct genoFind *transGf[2][3])
 /* load indexes from file.  Only one of gfRet or transGf is set. */
 {
 FILE *f = mustOpen(fileName, "r");
 char fileMagic[sizeof(indexMagic) + 1];
 mustRead(f, fileMagic, sizeof(indexMagic));
 fileMagic[sizeof(indexMagic)] = '\0';
 if (strcmp(fileMagic, indexMagic))
     errAbort("wrong magic string for index file");
 boolean isTrans;
 mustRead(f, &isTrans, sizeof(isTrans));
 if (doTrans != isTrans)
     errAbort("index file isTrans==%d and -trans==%d", isTrans, doTrans);
-void *memMapped = mmap(NULL, fileSize(fileName), PROT_READ, MAP_SHARED, fileno(f), 0);
+off_t fsize = fileSize(fileName);
+void *memMapped = mmap(NULL, fsize, PROT_READ, MAP_SHARED, fileno(f), 0);
 if (memMapped == MAP_FAILED)
-    errnoAbort("mmap of index file failed");
-
+    errnoAbort("mmap of index file failed: %s", fileName);
+if (madvise(memMapped, fsize, MADV_RANDOM | MADV_WILLNEED) < 0)
+    errnoAbort("madvise of index file failed: %s", fileName);
 
 if (doTrans)
     {
     int i, j;
     for (i = 0; i < 2; i++)
         for (j = 0; j < 3; j++)
             transGf[i][j] = loadGenoFind(f, memMapped);
     }
 else
     {
     *gfRet = loadGenoFind(f, memMapped);
     }
 carefulClose(&f);
 }