On Wed, Oct 13, 2021 at 9:52 PM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > On Mon, 11 Oct 2021 at 16:45, Yongji Xie <xieyongji@xxxxxxxxxxxxx> wrote: > > > > On Mon, Oct 11, 2021 at 9:21 PM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > > > > > On Mon, 11 Oct 2021 at 11:07, Xie Yongji <xieyongji@xxxxxxxxxxxxx> wrote: > > > > > > > > Recently we found the performance of small direct writes is bad > > > > when writeback_cache enabled. This is because we need to get > > > > attrs from userspace in fuse_update_get_attr() on each write. > > > > The timeout for the attributes doesn't work since every direct write > > > > will invalidate the attrs in fuse_direct_IO(). > > > > > > > > To fix it, this patch tries to avoid invalidating attrs if writeback_cache > > > > is enabled since we should trust local size/ctime/mtime in this case. > > > > > > Hi, > > > > > > Thanks for the patch. > > > > > > Just pushed an update to > > > git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.gitt#for-next > > > (9ca3f8697158 ("fuse: selective attribute invalidation")) that should > > > fix this behavior. > > > > > > > Looks like fuse_update_get_attr() will still get attrs from userspace > > each time with this commit applied. > > > > > Could you please test? > > > > > > > I applied the commit 9ca3f8697158 ("fuse: selective attribute > > invalidation") and tested it. But the issue still exists. > > Yeah, my bad. Pushed a more complete set of fixes to #for-next ending with > > e15a9a5fca6c ("fuse: take cache_mask into account in getattr") > > You should pull or cherry pick the complete branch. > I tested this branch, but it still doesn't fix this issue. The inval_mask = 0x6C0 and cache_mask = 0x2C0, so we still need to get attrs from userspace. Should we add STATX_BLOCKS to cache_mask? Thanks, Yongji