Skip to content
  • Inaam Rana's avatar
    26cfde77
    Bug#16477781 SINGLE PAGE FLUSHING CAUSES FSYNC() OF ALL DATAFILES · 26cfde77
    Inaam Rana authored
    Approved by: Kevin Lewis rb://2174
    
    In cases where threads are forced to do single page flushing we call
    buf_flush_sync_datafiles() after queueing the IO asynchronously.
    buf_flush_sync_datafiles() wakes up IO helper threads, then waits for
    all the IO requests to be serviced and then trigger an fsync() on all
    data files.  The minimal we need is that the IO request for the given
    page has been serviced and the data file that it belongs to have been
    synced to the disk.
    
    * Explicitly pass 'sync' value to buf_flush_page(). The new scheme is:
      -- All batches happen asynchronously (same as before)
      -- Single page flushes to find a victim are synchronous
      -- Single page flushes for export are asynchronous
    * Flush only the datafile that is touched during the single page flushing
    * Change handling of single page flush dblwr slot to IO completion
    routine i.e., now it will happen in IO helper thread in case of async
    request
    * Remove polling from dblwr buffer. Introduce two separate events,
    one for batch flushing and one for single page flushing
    26cfde77
    Bug#16477781 SINGLE PAGE FLUSHING CAUSES FSYNC() OF ALL DATAFILES
    Inaam Rana authored
    Approved by: Kevin Lewis rb://2174
    
    In cases where threads are forced to do single page flushing we call
    buf_flush_sync_datafiles() after queueing the IO asynchronously.
    buf_flush_sync_datafiles() wakes up IO helper threads, then waits for
    all the IO requests to be serviced and then trigger an fsync() on all
    data files.  The minimal we need is that the IO request for the given
    page has been serviced and the data file that it belongs to have been
    synced to the disk.
    
    * Explicitly pass 'sync' value to buf_flush_page(). The new scheme is:
      -- All batches happen asynchronously (same as before)
      -- Single page flushes to find a victim are synchronous
      -- Single page flushes for export are asynchronous
    * Flush only the datafile that is touched during the single page flushing
    * Change handling of single page flush dblwr slot to IO completion
    routine i.e., now it will happen in IO helper thread in case of async
    request
    * Remove polling from dblwr buffer. Introduce two separate events,
    one for batch flushing and one for single page flushing
Loading