[vbox-dev] [PATCH] Performance improvement of vboxsf by using page cache
Klaus Espenlaub
klaus.espenlaub at oracle.com
Thu Aug 6 14:51:40 GMT 2015
Hi Tatsuya,
On 06.08.2015 16:20, Tatsuya Karino wrote:
> Here is another patch for the improvement of vboxsf.
>
> The key point is using page cache in the system call read/write.
> I created this patch by reference to the other file system(e.g. ext4,
> nfs, vmhgfs).
Now that gets a lot more interesting... I hope you didn't look too much
at the normal 'block based' filesystems, as vboxsf is logically much
closer to a network filesystem like nfs/cifs/vmhgfs. It has to deal with
others making concurrent changes, in the vboxsf case the host can change
directory and file contents (from what I understood accesses are less
critical but there can be still delays due to writes being handled later
by the page cache)..
I'm not too worried about truly concurrent accesses (as handling them
100% correct is very expensive, and the current cache-less
implementation doesn't meet this very difficult requirement either).
This optimization has a big potential for presenting stale data if any
of the assumptions it makes aren't true.
> In this patch...
> * To use page cache, generic_file_read_iter/generic_file_write_iter will
> be called from read/write.
> * the page cache will be cleared in sf_inode_revalidate if necessary.
> * sf_inode_revalidate will be called in a cache sensitive function like
> read_iter, write_iter.
> * sf_inode_revalidate will not call unnecessary stat.
Can you say a bit more how you approached data consistency? Benchmark
results are one thing, but correct operation is far more important.
Klaus
> I tested this code on a kernel 3.19 Linux guest.
> This patch is provided under the MIT license.
>
>
> # before apply this patch
> vagrant at debian-jessie:/vagrant$ for i in {0..2}; do time cat
> large-file>/dev/null ; done
>
> real 0m0.045s
> user 0m0.000s
> sys 0m0.020s
>
> real 0m0.031s
> user 0m0.000s
> sys 0m0.016s
>
> real 0m0.045s
> user 0m0.000s
> sys 0m0.020s
>
>
> # after apply this patch
> vagrant at debian-jessie:/vagrant$ for i in {0..2}; do time cat
> large-file>/dev/null ; done
>
> real 0m0.140s
> user 0m0.000s
> sys 0m0.072s
>
> real 0m0.004s
> user 0m0.000s
> sys 0m0.000s
>
> real 0m0.004s
> user 0m0.000s
> sys 0m0.000s
>
> Thanks,
>
> --
> Tatsuya Karino
More information about the vbox-dev
mailing list