* [PATCH] knfsd: Stop NFSD writes from being broken into lots of little writes to filesystem.
[not found] <20070213170049.3488.patches@notabene>
@ 2007-02-13 6:01 ` NeilBrown
0 siblings, 0 replies; 6+ messages in thread
From: NeilBrown @ 2007-02-13 6:01 UTC (permalink / raw)
To: Andrew Morton
Cc: nfs, linux-kernel, Nick Piggin, Norman Weathers, Vladimir V . Saveliev
Another nfsd patch for 2.6.21...
### Comments for Changeset
When NFSD receives a write request, the data is typically in a number
of 1448 byte segments and writev is used to collect them together.
Unfortunately, generic_file_buffered_write passes these to the filesystem
one at a time, so an e.g. 32K over-write becomes a series of partial-page
writes to each page, causing the filesystem to have to pre-read those
pages - wasted effort.
generic_file_buffered_write handles one segment of the vector at a
time as it has to pre-fault in each segment to avoid deadlocks. When
writing from kernel-space (and nfsd does) this is not an issue, so
generic_file_buffered_write does not need to break and iovec from nfsd
into little pieces.
This patch avoids the splitting when get_fs is KERNEL_DS as it is
from NFSd.
This issue was introduced by commit 6527c2bdf1f833cc18e8f42bd97973d583e4aa83
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Norman Weathers <norman.r.weathers@conocophillips.com>
Cc: Vladimir V. Saveliev <vs@namesys.com>
Signed-off-by: Neil Brown <neilb@suse.de>
### Diffstat output
./mm/filemap.c | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff .prev/mm/filemap.c ./mm/filemap.c
--- .prev/mm/filemap.c 2007-02-13 16:53:19.000000000 +1100
+++ ./mm/filemap.c 2007-02-13 16:52:51.000000000 +1100
@@ -2160,21 +2160,27 @@ generic_file_buffered_write(struct kiocb
/* Limit the size of the copy to the caller's write size */
bytes = min(bytes, count);
- /*
- * Limit the size of the copy to that of the current segment,
- * because fault_in_pages_readable() doesn't know how to walk
- * segments.
+ /* We only need to worry about prefaulting when writes are from
+ * user-space. NFSd uses vfs_writev with several non-aligned
+ * segments in the vector, and limiting to one segment a time is
+ * a noticeable performance for re-write
*/
- bytes = min(bytes, cur_iov->iov_len - iov_base);
-
- /*
- * Bring in the user page that we will copy from _first_.
- * Otherwise there's a nasty deadlock on copying from the
- * same page as we're writing to, without it being marked
- * up-to-date.
- */
- fault_in_pages_readable(buf, bytes);
+ if (!segment_eq(get_fs(), KERNEL_DS)) {
+ /*
+ * Limit the size of the copy to that of the current
+ * segment, because fault_in_pages_readable() doesn't
+ * know how to walk segments.
+ */
+ bytes = min(bytes, cur_iov->iov_len - iov_base);
+ /*
+ * Bring in the user page that we will copy from
+ * _first_. Otherwise there's a nasty deadlock on
+ * copying from the same page as we're writing to,
+ * without it being marked up-to-date.
+ */
+ fault_in_pages_readable(buf, bytes);
+ }
page = __grab_cache_page(mapping,index,&cached_page,&lru_pvec);
if (!page) {
status = -ENOMEM;
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] knfsd: Stop NFSD writes from being broken into lots of little writes to filesystem.
@ 2007-02-13 6:01 ` NeilBrown
0 siblings, 0 replies; 6+ messages in thread
From: NeilBrown @ 2007-02-13 6:01 UTC (permalink / raw)
To: Andrew Morton
Cc: Nick Piggin, nfs, linux-kernel, Vladimir V . Saveliev, Norman Weathers
Another nfsd patch for 2.6.21...
### Comments for Changeset
When NFSD receives a write request, the data is typically in a number
of 1448 byte segments and writev is used to collect them together.
Unfortunately, generic_file_buffered_write passes these to the filesystem
one at a time, so an e.g. 32K over-write becomes a series of partial-page
writes to each page, causing the filesystem to have to pre-read those
pages - wasted effort.
generic_file_buffered_write handles one segment of the vector at a
time as it has to pre-fault in each segment to avoid deadlocks. When
writing from kernel-space (and nfsd does) this is not an issue, so
generic_file_buffered_write does not need to break and iovec from nfsd
into little pieces.
This patch avoids the splitting when get_fs is KERNEL_DS as it is
from NFSd.
This issue was introduced by commit 6527c2bdf1f833cc18e8f42bd97973d583e4aa83
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Norman Weathers <norman.r.weathers@conocophillips.com>
Cc: Vladimir V. Saveliev <vs@namesys.com>
Signed-off-by: Neil Brown <neilb@suse.de>
### Diffstat output
./mm/filemap.c | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff .prev/mm/filemap.c ./mm/filemap.c
--- .prev/mm/filemap.c 2007-02-13 16:53:19.000000000 +1100
+++ ./mm/filemap.c 2007-02-13 16:52:51.000000000 +1100
@@ -2160,21 +2160,27 @@ generic_file_buffered_write(struct kiocb
/* Limit the size of the copy to the caller's write size */
bytes = min(bytes, count);
- /*
- * Limit the size of the copy to that of the current segment,
- * because fault_in_pages_readable() doesn't know how to walk
- * segments.
+ /* We only need to worry about prefaulting when writes are from
+ * user-space. NFSd uses vfs_writev with several non-aligned
+ * segments in the vector, and limiting to one segment a time is
+ * a noticeable performance for re-write
*/
- bytes = min(bytes, cur_iov->iov_len - iov_base);
-
- /*
- * Bring in the user page that we will copy from _first_.
- * Otherwise there's a nasty deadlock on copying from the
- * same page as we're writing to, without it being marked
- * up-to-date.
- */
- fault_in_pages_readable(buf, bytes);
+ if (!segment_eq(get_fs(), KERNEL_DS)) {
+ /*
+ * Limit the size of the copy to that of the current
+ * segment, because fault_in_pages_readable() doesn't
+ * know how to walk segments.
+ */
+ bytes = min(bytes, cur_iov->iov_len - iov_base);
+ /*
+ * Bring in the user page that we will copy from
+ * _first_. Otherwise there's a nasty deadlock on
+ * copying from the same page as we're writing to,
+ * without it being marked up-to-date.
+ */
+ fault_in_pages_readable(buf, bytes);
+ }
page = __grab_cache_page(mapping,index,&cached_page,&lru_pvec);
if (!page) {
status = -ENOMEM;
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] knfsd: Stop NFSD writes from being broken into lots of little writes to filesystem.
2007-02-13 6:01 ` NeilBrown
@ 2007-02-13 6:11 ` Nick Piggin
-1 siblings, 0 replies; 6+ messages in thread
From: Nick Piggin @ 2007-02-13 6:11 UTC (permalink / raw)
To: NeilBrown
Cc: Andrew Morton, nfs, linux-kernel, Norman Weathers,
Vladimir V "." Saveliev
NeilBrown wrote:
> Another nfsd patch for 2.6.21...
>
> ### Comments for Changeset
>
> When NFSD receives a write request, the data is typically in a number
> of 1448 byte segments and writev is used to collect them together.
>
> Unfortunately, generic_file_buffered_write passes these to the filesystem
> one at a time, so an e.g. 32K over-write becomes a series of partial-page
> writes to each page, causing the filesystem to have to pre-read those
> pages - wasted effort.
>
> generic_file_buffered_write handles one segment of the vector at a
> time as it has to pre-fault in each segment to avoid deadlocks. When
> writing from kernel-space (and nfsd does) this is not an issue, so
> generic_file_buffered_write does not need to break and iovec from nfsd
> into little pieces.
>
> This patch avoids the splitting when get_fs is KERNEL_DS as it is
> from NFSd.
>
> This issue was introduced by commit 6527c2bdf1f833cc18e8f42bd97973d583e4aa83
>
> Cc: Nick Piggin <nickpiggin@yahoo.com.au>
FWIW, you can put Acked-by: me there if you'd like.
Thanks,
Nick
--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] knfsd: Stop NFSD writes from being broken into lots of little writes to filesystem.
@ 2007-02-13 6:11 ` Nick Piggin
0 siblings, 0 replies; 6+ messages in thread
From: Nick Piggin @ 2007-02-13 6:11 UTC (permalink / raw)
To: NeilBrown
Cc: Andrew Morton, nfs, linux-kernel,
Vladimir V "." Saveliev, Norman Weathers
NeilBrown wrote:
> Another nfsd patch for 2.6.21...
>
> ### Comments for Changeset
>
> When NFSD receives a write request, the data is typically in a number
> of 1448 byte segments and writev is used to collect them together.
>
> Unfortunately, generic_file_buffered_write passes these to the filesystem
> one at a time, so an e.g. 32K over-write becomes a series of partial-page
> writes to each page, causing the filesystem to have to pre-read those
> pages - wasted effort.
>
> generic_file_buffered_write handles one segment of the vector at a
> time as it has to pre-fault in each segment to avoid deadlocks. When
> writing from kernel-space (and nfsd does) this is not an issue, so
> generic_file_buffered_write does not need to break and iovec from nfsd
> into little pieces.
>
> This patch avoids the splitting when get_fs is KERNEL_DS as it is
> from NFSd.
>
> This issue was introduced by commit 6527c2bdf1f833cc18e8f42bd97973d583e4aa83
>
> Cc: Nick Piggin <nickpiggin@yahoo.com.au>
FWIW, you can put Acked-by: me there if you'd like.
Thanks,
Nick
--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] knfsd: Stop NFSD writes from being broken into lots of little writes to filesystem.
2007-02-13 6:11 ` Nick Piggin
@ 2007-02-14 21:44 ` Andrew Morton
-1 siblings, 0 replies; 6+ messages in thread
From: Andrew Morton @ 2007-02-14 21:44 UTC (permalink / raw)
To: Nick Piggin
Cc: NeilBrown, nfs, linux-kernel, Norman Weathers,
Vladimir V "." Saveliev
On Tue, 13 Feb 2007 17:11:19 +1100
Nick Piggin <nickpiggin@yahoo.com.au> wrote:
> NeilBrown wrote:
> > Another nfsd patch for 2.6.21...
> >
> > ### Comments for Changeset
> >
> > When NFSD receives a write request, the data is typically in a number
> > of 1448 byte segments and writev is used to collect them together.
> >
> > Unfortunately, generic_file_buffered_write passes these to the filesystem
> > one at a time, so an e.g. 32K over-write becomes a series of partial-page
> > writes to each page, causing the filesystem to have to pre-read those
> > pages - wasted effort.
> >
> > generic_file_buffered_write handles one segment of the vector at a
> > time as it has to pre-fault in each segment to avoid deadlocks. When
> > writing from kernel-space (and nfsd does) this is not an issue, so
> > generic_file_buffered_write does not need to break and iovec from nfsd
> > into little pieces.
> >
> > This patch avoids the splitting when get_fs is KERNEL_DS as it is
> > from NFSd.
> >
> > This issue was introduced by commit 6527c2bdf1f833cc18e8f42bd97973d583e4aa83
> >
> > Cc: Nick Piggin <nickpiggin@yahoo.com.au>
>
> FWIW, you can put Acked-by: me there if you'd like.
>
It's yet another patch we need to revert if/when we get the write()-deadlock
stuff sorted out. So please add negative-this to that patch series.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] knfsd: Stop NFSD writes from being broken into lots of little writes to filesystem.
@ 2007-02-14 21:44 ` Andrew Morton
0 siblings, 0 replies; 6+ messages in thread
From: Andrew Morton @ 2007-02-14 21:44 UTC (permalink / raw)
To: Nick Piggin
Cc: NeilBrown, nfs, linux-kernel, Vladimir V "." Saveliev,
Norman Weathers
On Tue, 13 Feb 2007 17:11:19 +1100
Nick Piggin <nickpiggin@yahoo.com.au> wrote:
> NeilBrown wrote:
> > Another nfsd patch for 2.6.21...
> >
> > ### Comments for Changeset
> >
> > When NFSD receives a write request, the data is typically in a number
> > of 1448 byte segments and writev is used to collect them together.
> >
> > Unfortunately, generic_file_buffered_write passes these to the filesystem
> > one at a time, so an e.g. 32K over-write becomes a series of partial-page
> > writes to each page, causing the filesystem to have to pre-read those
> > pages - wasted effort.
> >
> > generic_file_buffered_write handles one segment of the vector at a
> > time as it has to pre-fault in each segment to avoid deadlocks. When
> > writing from kernel-space (and nfsd does) this is not an issue, so
> > generic_file_buffered_write does not need to break and iovec from nfsd
> > into little pieces.
> >
> > This patch avoids the splitting when get_fs is KERNEL_DS as it is
> > from NFSd.
> >
> > This issue was introduced by commit 6527c2bdf1f833cc18e8f42bd97973d583e4aa83
> >
> > Cc: Nick Piggin <nickpiggin@yahoo.com.au>
>
> FWIW, you can put Acked-by: me there if you'd like.
>
It's yet another patch we need to revert if/when we get the write()-deadlock
stuff sorted out. So please add negative-this to that patch series.
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-02-14 21:44 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20070213170049.3488.patches@notabene>
2007-02-13 6:01 ` [PATCH] knfsd: Stop NFSD writes from being broken into lots of little writes to filesystem NeilBrown
2007-02-13 6:01 ` NeilBrown
2007-02-13 6:11 ` Nick Piggin
2007-02-13 6:11 ` Nick Piggin
2007-02-14 21:44 ` Andrew Morton
2007-02-14 21:44 ` Andrew Morton
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.