• Pádraig Brady's avatar
    rate limit calls to posix_fadvise() · dacd2967
    Pádraig Brady authored
    There can be a large kernel overhead involved in POSIX_FADV_DONTNEED.
    There is no point in calling this per item logged, so rate limit
    to at most once per 2MiB written.
    
    With a simple test program that logs 100K items at WARNING level:
    
    Before:
    
      $ time strace -c -e fadvise64 log.test \
        -log_dir=/dev/shm -logtofiles=true -logtostderr=false
      % time     seconds  usecs/call     calls    errors syscall
      ------ ----------- ----------- --------- --------- ----------------
      100.00   12.522509         125     99957           fadvise64
      ------ ----------- ----------- --------- --------- ----------------
      real    0m52.671s
      user    0m2.194s
      sys     0m44.022s
    
    After:
    
      $ time strace -c -e fadvise64 log.test \
        -log_dir=/dev/shm -logtofiles=true -logtostderr=false
    
      % time     seconds  usecs/call     calls    errors syscall
      ------ ----------- ----------- --------- --------- ----------------
      100.00    0.000759         152         5           fadvise64
      ------ ----------- ----------- --------- --------- ----------------
      real    0m4.206s
      user    0m1.436s
      sys     0m3.153s
    
    Fixes issue #84
    dacd2967
logging.cc 69.3 KB