Hi Jan, The only place fsync is called after AIO that I could find is in function buf_LRU_remove_pages (buf0lru.cc) But after other AIO operations, I didn't see fsync is called. Do you know how this difference will affect the recovery process? Thanks.
Xiaofei On Wed, May 6, 2015 at 8:24 PM, Jan Lindström <jan.lindst...@mariadb.com> wrote: > Hi, > > There is sync for AIO pages also. There is no dirty page table but > naturally dirty pages are marked and they are on LRU list see > buf/buf0lru.cc. > > R: Jan > > On Thu, May 7, 2015 at 12:23 AM, Xiaofei Du <xiaofei.du...@gmail.com> > wrote: > >> Hi Jan, >> >> Thanks for clarification. I should have used synchronous write, instead >> of synchronous flush. My point is that I noticed for sync writes, fsync is >> called to force pages to be on persistent storage. while for AIO pages, >> fsync is not called to force pages to be on persistent storage. My question >> here is why fsync is required for sync IOs. Does InnoDB maintain a dirty >> page table? Is fsync called to guarantee the page to be on persistent >> storage so that the dirty page table can be updated? If this is the case, >> when is the dirty page table updated for asynchronous IOs? >> >> P.S. I couldn't find code for dirty page table. So I am not sure if >> InnoDB maintains a dirty page table for recovery. Could you please give me >> a pointer to related code and related resources? Thanks. >> >> Xiaofei >> >> On Wed, May 6, 2015 at 10:12 AM, Jan Lindström <jan.lindst...@mariadb.com >> > wrote: >> >>> Hi, >>> >>> Terminology is little bit confusing here. Page flushing means that we >>> have done synchronous write to disk but that does not mean that write is >>> physically on device yet, therefore there is flush to force it to >>> persistent storage. >>> >>> R: Jan >>> >>> On Wed, May 6, 2015 at 12:57 AM, Xiaofei Du <xiaofei.du...@gmail.com> >>> wrote: >>> >>>> Hello, >>>> >>>> When a dirty page is flushed synchronously in buf_flush_write_block_low >>>> , >>>> fsync is called in the following snippet. I am wondering why >>>> we need this fsync for synchronous flush? The record should be in >>>> the log already, so recovery should be able to successfully redo it >>>> and apply to the disk during recovery. Maybe I am missing something >>>> here, >>>> please let me know if I am wrong. Thanks much! >>>> >>>> Xiaofei >>>> >>>> >>>> /* When doing single page flushing the IO is done synchronously and we >>>> flush the changes to disk only for the tablespace we are working on. */ if >>>> (sync) { ut_ad(flush_type == BUF_FLUSH_SINGLE_PAGE); >>>> fil_flush(buf_page_get_space(bpage)); >>>> /* true means we want to evict this page from the LRU list as well. */ >>>> buf_page_io_complete(bpage, true); } >>>> >>>> _______________________________________________ >>>> Mailing list: https://launchpad.net/~maria-discuss >>>> Post to : maria-discuss@lists.launchpad.net >>>> Unsubscribe : https://launchpad.net/~maria-discuss >>>> More help : https://help.launchpad.net/ListHelp >>>> >>>> >>> >> >
_______________________________________________ Mailing list: https://launchpad.net/~maria-discuss Post to : maria-discuss@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-discuss More help : https://help.launchpad.net/ListHelp