From: Radosław Korzeniewski <rados...@korzeniewski.net>
> niedz., 10 lut 2019 o 20:54 <jes...@krogh.cc> napisał(a):

>> 1) When reading a catalog, loop over all files and issue a
>> posix_fasvise WILLNEED on the first 1MB of the file.

>> I have prototyped this outside bacula and it seem to work very
>> nicely and should be a small non-intrusive patch. It will allow the IO
>> stack to issue concurrently around the smaller files caching them in
>> memory. I have inspected the sourcecode and cannot find traces that this
>> should be in place allready.

> The code in question should be available in src/findlib/bfile.c:

> 1055 #if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_WILLNEED)
> 1056    /* If not RDWR or WRONLY must be Read Only */
> 1057    if (bfd->fid != -1 && !(flags & (O_RDWR|O_WRONLY))) {
> 1058       int stat = posix_fadvise(bfd->fid, 0, 0, POSIX_FADV_WILLNEED);
> 1059       Dmsg3(400, "Did posix_fadvise WILLNEED on %s fid=%d stat=%d\n", 
> fname, bfd->fid, stat);
> 1060    }
> 1061 #endif 
 
> It calls posix_fasvise with POSIX_FADV_WILLNEED flag but touch beginning of 
> the file and not a first 1MB as you requested.

This is part of bopen, which is called when the file is opened for reading, as
far as I understand. The idea suggested by Jesper is to call fadvise on a larger
set of files well in advance, so the system can spend time bringing those files
into the page cache before the file daemon tries to read them. One method is
to call fadvise on all files in a directory before the fd loops over the dir to 
read
them. It's simpler than parallelizing the file daemon itself, and yields a very 
nice
speedup in our tests.

So instead of one loop that does

for file in dir:
    fadvise_willneed
    open
    read
    close
    fadvise_dontneed

You have two loops:

for file in dir:
    fadvise_willneed

for file in dir:
    open
    read
    close
    fadvise_dontneed

The first loop completes very quickly and will let the system utilize the
parallelization of the underlying storage to load in data very quickly.

-- 
Anders Ossowicki

_______________________________________________
Bacula-devel mailing list
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to