> > >>>  fs/f2fs/node.c |    9 ++++-----
> > >>>  1 file changed, 4 insertions(+), 5 deletions(-)
> > >>>
> > >>> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 511c0e7..6d8f107
> > >>> 100644
> > >>> --- a/fs/f2fs/node.c
> > >>> +++ b/fs/f2fs/node.c
> > >>> @@ -1080,12 +1080,11 @@ void ra_node_page(struct f2fs_sb_info *sbi, 
> > >>> nid_t nid)
> > >>>                 return;
> > >>>         f2fs_bug_on(sbi, check_nid_range(sbi, nid));
> > >>>
> > >>> -       apage = find_get_page(NODE_MAPPING(sbi), nid);
> > >>> -       if (apage && PageUptodate(apage)) {
> > >>> -               f2fs_put_page(apage, 0);
> > >>> +       rcu_read_lock();
> > >>> +       apage = radix_tree_lookup(&NODE_MAPPING(sbi)->page_tree, nid);
> > >>> +       rcu_read_unlock();
> > >>> +       if (apage)
> > >>>                 return;
> > >>> -       }
> > >>> -       f2fs_put_page(apage, 0);
> > >>
> > >> How about use trylock_page to avoid contention here?
> > >
> > > I thought about that, but after I saw the __do_page_cache_readahead(),
> > > I think that's better.
> > > they works almost the same, but it reduces the performance by altering
> > > reference count and trying to lock the page.
> > >
> > > The only difference between this two methods is how to deal a page
> > 
> > Concurrent threads can both pass the rcu lookuping at the same time, and 
> > then they will be serialized by grab_cache_page invoking,
> > which altering second thread to read node page synchronously instead of 
> > reading asynchronously. IMO, we can afford to reference
> > and trylock which takes litte overhead of CPU in order to avoid potential 
> > synchronously readahead for node page.
> 
> My point is that this patch can avoid potential synchronously readahead for 
> node page without taking such overhead.
> The difference is very small and the method has already been used in vfs 
> codes.

Let me go with Fan's patch at this moment.
Then, it'd good to investigate how contention occurs here later.

Thanks,

> 
> > 
> > Thanks,
> > 
> > > which is left unlock and not uptodate in mapping. I think only cause
> > > of such page seems to be IO error, and it's too rare to call for 
> > > optimization.
> > >
> > >>
> > >> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 26eb441..9cdb6f2
> > >> 100644
> > >> --- a/fs/f2fs/node.c
> > >> +++ b/fs/f2fs/node.c
> > >> @@ -1085,15 +1085,14 @@ void ra_node_page(struct f2fs_sb_info *sbi, 
> > >> nid_t nid)
> > >>         f2fs_bug_on(sbi, check_nid_range(sbi, nid));
> > >>
> > >>         apage = find_get_page(NODE_MAPPING(sbi), nid);
> > >> -       if (apage && PageUptodate(apage)) {
> > >> +       if (!apage) {
> > >> +               apage = grab_cache_page(NODE_MAPPING(sbi), nid);
> > >> +               if (!apage)
> > >> +                       return;
> > >> +       } else if (PageUptodate(apage) || !trylock_page(apage)) {
> > >>                 f2fs_put_page(apage, 0);
> > >>                 return;
> > >>         }
> > >> -       f2fs_put_page(apage, 0);
> > >> -
> > >> -       apage = grab_cache_page(NODE_MAPPING(sbi), nid);
> > >> -       if (!apage)
> > >> -               return;
> > >>
> > >>         err = read_node_page(apage, READA);
> > >>         f2fs_put_page(apage, err ? 1 : 0);
> > >>
> > >> Thanks,
> > >>
> > >>>
> > >>>         apage = grab_cache_page(NODE_MAPPING(sbi), nid);
> > >>>         if (!apage)
> > >>> --
> > >>> 1.7.9.5
> > >>>
> > >>>
> > >>> --------------------------------------------------------------------
> > >>> --
> > >>> --------
> > >>> Site24x7 APM Insight: Get Deep Visibility into Application
> > >>> Performance APM + Mobile APM + RUM: Monitor 3 App instances at just
> > >>> $35/Month Monitor end-to-end web transactions and take corrective
> > >>> actions now Troubleshoot faster and improve end-user experience. Signup 
> > >>> Now!
> > >>> http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
> > >>> _______________________________________________
> > >>> Linux-f2fs-devel mailing list
> > >>> Linux-f2fs-devel@lists.sourceforge.net
> > >>> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
> > >
> > >
> > > ----------------------------------------------------------------------
> > > --------
> > > Site24x7 APM Insight: Get Deep Visibility into Application Performance
> > > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> > > Monitor end-to-end web transactions and take corrective actions now
> > > Troubleshoot faster and improve end-user experience. Signup Now!
> > > http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
> > > _______________________________________________
> > > Linux-f2fs-devel mailing list
> > > Linux-f2fs-devel@lists.sourceforge.net
> > > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
> > >

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://makebettercode.com/inteldaal-eval
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to