linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCHES]
@ 1999-05-23  3:36 Eric W. Biederman
  1999-05-23  6:03 ` [PATCHES] Linus Torvalds
  0 siblings, 1 reply; 13+ messages in thread
From: Eric W. Biederman @ 1999-05-23  3:36 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel, linux-mm

Linus,
	I've been busy working to improve the basic mechanisms of the
page cache, and finally what appears to be a stable set of patches, with
no hacks against 2.3.3

Despite these being seperate patches I nearly always applied them in
sequence, and tested them as a unit.  The seperate patches each do one
thing, to keep make them readable/maintainable.

If you could include the code below (baring the eb8 patch) in 2.3.4 I would
appreciate it.

The patches included are:
eb1 --- Allow reuse of page->buffers if you aren't the buffer cache
eb2 --- Allow old old a.out binaries to run even if we can't mmap them
	properly because their data isn't page aligned.
eb3 --- Muck with page offset.
eb4 --- Allow registration and unregistration for functions needed by
	swap off.  This allows a modular filesystem to reside in swap...
eb5 --- Large file support, basically this removes unused bits from all
	of the relevant interfaces.   I also begin to handle PAGE_CACHE_SIZE
	!= PAGE_SIZE
eb6 --- Introduction of struct vm_store, and associated cleanups.
	In particular get_inode_page.
	vm_store is a variation on the inode struct which is
	lighter weight.  
	vm_stores's seperates out the vm layer from the vfs layer more,
	making things like the swap_cache easier to build, and cleaner.
	This is potentially very useful and the cost is low.
eb7 --- Actuall patch for dirty buffers in the page cache.
	I'm fairly well satisfied except for generic_file_write.
	Which I haven't touched.
	It looks like I need 2 variations on generic_file_write at the
	moment. 
	1) for network filesystems that can get away without filling
	   the page on a partial write.
	2) for block based filesystems that must fill the page on a
	   partial write because they can't write arbitrary chunks of
	   data.
eb8 -- Misc things I use, Included simply for reference.

TODO:
1) document the new interfaces
4) Experimenting with heuristics so that programs that are writing
   data faster than the disk can handle are put to sleep (think
   floppies).
5) Playing with mapped memory, and removing the need for kpiod.
   This will either require either reverse page tables, or 
   something equally effecting at finding page mappings from a struct page.
6) Removing the need for struct vm_operations in the vm_area_struct.
   A struct vm_store can probably handle everything.
7) Removing the swap lock map, by modify ipc/shm to use the page cache
   and vm_stores.
8) Putting the buffer cache on a vm_store.


Eric

begin 644 patches9.tar.gz
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
1_O?][W_PW_\/(;HG^P#X`@#W
`
end
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-23  3:36 [PATCHES] Eric W. Biederman
@ 1999-05-23  6:03 ` Linus Torvalds
  1999-05-23 14:54   ` [PATCHES] Eric W. Biederman
  0 siblings, 1 reply; 13+ messages in thread
From: Linus Torvalds @ 1999-05-23  6:03 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: linux-kernel, linux-mm, MOLNAR Ingo


On 22 May 1999, Eric W. Biederman wrote:
>
> 	I've been busy working to improve the basic mechanisms of the
> page cache, and finally what appears to be a stable set of patches, with
> no hacks against 2.3.3

I have three worries:
 - this is large, with no input from anybody else that I have seen.
 - I absolutely detest getting encoded patches. It makes it much harder
   for me to just quickly look them over for an immediate feel for what
   they look like.
 - Ingo just did the page cache / buffer cache dirty stuff, this is going
   to clash quite badly with his changes I suspect.

So would you mind just sending the patches in plaintext, one by one, to
avoid at least one of my worries (and as a reference to other people: this
is basicall yhow I always prefer patches). 

The other worries I'll see about later. The short descriptions sound fine,
although I still want to look at the vm_store part closer..

		Linus

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-23  6:03 ` [PATCHES] Linus Torvalds
@ 1999-05-23 14:54   ` Eric W. Biederman
  1999-05-23 15:49     ` [PATCHES] Ingo Molnar
  0 siblings, 1 reply; 13+ messages in thread
From: Eric W. Biederman @ 1999-05-23 14:54 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel, linux-mm, MOLNAR Ingo

>>>>> "LT" == Linus Torvalds <torvalds@transmeta.com> writes:

LT> On 22 May 1999, Eric W. Biederman wrote:
>> 
>> I've been busy working to improve the basic mechanisms of the
>> page cache, and finally what appears to be a stable set of patches, with
>> no hacks against 2.3.3

LT> I have three worries:
LT>  - this is large, with no input from anybody else that I have seen.

Not much.  I had aggreements in principal but no one else has looked at it
real hard.

LT>  - I absolutely detest getting encoded patches. It makes it much harder
LT>    for me to just quickly look them over for an immediate feel for what
LT>    they look like.
O.k.  I do that for large patches because I'm paranoid about the mailers
in between. . .

LT>  - Ingo just did the page cache / buffer cache dirty stuff, this is going
LT>    to clash quite badly with his changes I suspect.

Interesting.  I have been telling folks I've been working on this for quite
a while.    I wish I'd heard about him or vis versa.

Ingo can I get a pointer to your work?


Linus, I'll be resending the patches later today (church is in about 5 minutes).

LT> The other worries I'll see about later. The short descriptions sound fine,

Cool.  If you agree with my work in principal, that makes life easier.
Now I just need to worry about the details of my patches.

Eric

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-23 14:54   ` [PATCHES] Eric W. Biederman
@ 1999-05-23 15:49     ` Ingo Molnar
  1999-05-23 18:34       ` [PATCHES] Eric W. Biederman
  1999-05-24 17:20       ` [PATCHES] Manfred Spraul
  0 siblings, 2 replies; 13+ messages in thread
From: Ingo Molnar @ 1999-05-23 15:49 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: Linus Torvalds, linux-kernel, linux-mm

On 23 May 1999, Eric W. Biederman wrote:

> LT>  - Ingo just did the page cache / buffer cache dirty stuff, this is going
> LT>    to clash quite badly with his changes I suspect.
> 
> Interesting. I have been telling folks I've been working on this for
> quite a while. I wish I'd heard about him or vis versa. 

i'm mainly working on these two areas:

 - merging ext2fs (well, this means basically any block-based filesystem,
   but ext2fs is the starting point) data buffers into the page cache.

 - redesigning the page cache for SMP (mainly because i was touching
   things and introducing bugs anyway) [on my box the page cache is
   already completely parallel on SMP, we drop the kernel lock on entry
   into page-cache routines and re-lock it only if we call
   filesystem-specific code or buffer-cache code. (in this patch the
   ll_rw_block IO layer is being executed outside the kernel lock as well,
   and appears to work quite nicely.]

the design/implementation is this: we put dirty and clean block-device
pages into the buffer-cache as well. bdflush automatically takes care of
undirtying buffers (pages). I've modified ext2fs to to have block
allocation/freeing separated from read/write/truncate activities, and now
ext2fs uses (a modified version of) generic_file_write(). This brought
some fuits already: whenever we write big enough to modify a full,
uncached page, we can now overwrite the page-cache page without first
having to read it. (security issues taken care of as well) [the old
mechanizm was that we first allocated the data block which was memset to
zero deep inside ext2fs's block allocation path, then we read the block if
this was a partial write, then we overwrote it with data from user-space. 
yuck.]

the current state of the patch is that it's working and brings a nice
performance jump on SMP boxes on disk-benchmarks and is stable even under
heavy stress-testing. Also (naturally) dirty buffers show up only once, in
the page cache. I've broken some things though (swapping and NFS
side-effects are yet untested), i'm currently working on cleaning the
impact on these things up, once it's cleaned up (today or tomorrow) i'll
Cc: you as well.

i didnt know about you working on this until Stephen Tweedie told me, then
i quickly looked at archives and (maybe wrongly?) thought that while our
work does collide patch-wise but is quite orthogonal conceptually. I've
tried to sync activities with others working in this area (Andrea for
example). I completely overlooked that you are working on the block-cache
side as well, would you mind outlining the basic design? 

one thing i saw in one of your earlier mails: an undirtification mechanizm
in the page cache, although i've still got to see your patch (is it
available somewhere?). Originally i thought about doing it that way too,
but then i have avoided to have the page-writeout mechanizm in the
page-cache according to Linus's suggestion. I'm now pretty much convinced
that this is the right way: future optimizations will enable us to delay
the filesystem block allocation part completely (apart from bumping free
space estimation counters up and down and thus avoiding the async 'out of
free space' problem).

I'd like the page cache end up in a design where we can almost completely
avoid any filesystem overhead for quickly created/destroyed and/or fully
cached files. I'd like to have a very simple unaliased pagecache and no
filesystem overhead, on big RAM boxes. This was the orignal goal of the
page cache as well, as far as i remember. Turning the page-cache into a
buffer-cache again doesnt make much sense IMO... Right now (profiled on my
patch) for cached midsize file-IO the main non-data-copying overhead is
block allocation.  Block allocation _has_ to be complex on a true
block-device or otherwise the filesystem is simply not trying hard enough
to avoid fragmentation.  This is a fundamental conflict. And we will avoid
the data copying overhead with better IO syscalls.

-- mingo

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-23 15:49     ` [PATCHES] Ingo Molnar
@ 1999-05-23 18:34       ` Eric W. Biederman
  1999-05-27  6:24         ` [PATCHES] Stephen C. Tweedie
  1999-05-27  6:25         ` [PATCHES] Stephen C. Tweedie
  1999-05-24 17:20       ` [PATCHES] Manfred Spraul
  1 sibling, 2 replies; 13+ messages in thread
From: Eric W. Biederman @ 1999-05-23 18:34 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: linux-mm

>>>>> "IM" == Ingo Molnar <mingo@chiara.csoma.elte.hu> writes:

My current patches can be found at:
http://www.ccr.net/ebiederm/files
in:
patches9.tar.gz
and soon in
shmfs-0.1.011.tar.gz  (Which should go out later today).

shmfs is my filesystem that resides in swap & the page cache.
Currently it doesn't work with swap-off, but that is in progress.

IM> On 23 May 1999, Eric W. Biederman wrote:

LT> - Ingo just did the page cache / buffer cache dirty stuff, this is going
LT> to clash quite badly with his changes I suspect.
>> 
>> Interesting. I have been telling folks I've been working on this for
>> quite a while. I wish I'd heard about him or vis versa. 

IM> i'm mainly working on these two areas:

IM>  - merging ext2fs (well, this means basically any block-based filesystem,
IM>    but ext2fs is the starting point) data buffers into the page cache.

IM>  - redesigning the page cache for SMP (mainly because i was touching
IM>    things and introducing bugs anyway) [on my box the page cache is
IM>    already completely parallel on SMP, we drop the kernel lock on entry
IM>    into page-cache routines and re-lock it only if we call
IM>    filesystem-specific code or buffer-cache code. (in this patch the
IM>    ll_rw_block IO layer is being executed outside the kernel lock as well,
IM>    and appears to work quite nicely.]

- I added support for large files for much the same reason.

my summary of patches is:
The patches included are:
eb1 --- Allow reuse of page->buffers if you aren't the buffer cache
eb2 --- Allow old old a.out binaries to run even if we can't mmap them
	properly because their data isn't page aligned.
eb3 --- Muck with page offset.
eb4 --- Allow registration and unregistration for functions needed by
	swap off.  This allows a modular filesystem to reside in swap...
eb5 --- Large file support, basically this removes unused bits from all
	of the relevant interfaces.   I also begin to handle PAGE_CACHE_SIZE
	!= PAGE_SIZE
eb6 --- Introduction of struct vm_store, and associated cleanups.
	In particular get_inode_page.
	vm_store is a variation on the inode struct which is
	lighter weight.  
	vm_stores's seperates out the vm layer from the vfs layer more,
	making things like the swap_cache easier to build, and cleaner.
	This is potentially very useful and the cost is low.
eb7 --- Actuall patch for dirty buffers in the page cache.
	I'm fairly well satisfied except for generic_file_write.
	Which I haven't touched.
	It looks like I need 2 variations on generic_file_write at the
	moment. 
	1) for network filesystems that can get away without filling
	   the page on a partial write.
	2) for block based filesystems that must fill the page on a
	   partial write because they can't write arbitrary chunks of
	   data.
eb8 -- Misc things I use, Included simply for reference.

IM> the design/implementation is this: we put dirty and clean block-device
IM> pages into the buffer-cache as well. bdflush automatically takes care of
IM> undirtying buffers (pages). I've modified ext2fs to to have block
IM> allocation/freeing separated from read/write/truncate activities, and now
IM> ext2fs uses (a modified version of) generic_file_write(). 

Yes the current version of generic_file_write() which doesn't read
before writing is interesting. . .

IM> This brought
IM> some fuits already: whenever we write big enough to modify a full,
IM> uncached page, we can now overwrite the page-cache page without first
IM> having to read it. (security issues taken care of as well) [the old
IM> mechanizm was that we first allocated the data block which was memset to
IM> zero deep inside ext2fs's block allocation path, then we read the block if
IM> this was a partial write, then we overwrote it with data from user-space. 
IM> yuck.]

I don't think I ever traced it deep enough to see the memset.
But I follow.  It sounds like you have made some nice performance
improvements.  The first version of my stuff is just after unlocking potential.

IM> the current state of the patch is that it's working and brings a nice
IM> performance jump on SMP boxes on disk-benchmarks and is stable even under
IM> heavy stress-testing. Also (naturally) dirty buffers show up only once, in
IM> the page cache. I've broken some things though (swapping and NFS
IM> side-effects are yet untested), i'm currently working on cleaning the
IM> impact on these things up, once it's cleaned up (today or tomorrow) i'll
IM> Cc: you as well.

Cool.  If you are really that close to done we can probably
synchronise our work and submit the result to Linus.  I think we are
conceptually orthogonal except for handle dirty data in the page
cache.  And that _needs_ synchronizing.

My patches that don't depend on dirty data in the page cache, (large
files, no need to support unaligned mappings, etc) I'm going to send in
now.

IM> i didnt know about you working on this until Stephen Tweedie told me, then
IM> i quickly looked at archives and (maybe wrongly?) thought that while our
IM> work does collide patch-wise but is quite orthogonal conceptually.

Except that we both handle dirty data in the page cache...
Hmm.  You must not subscribe to linux-mm@kvack.org (It's a majordomo list)
There isn't a linux-vfs list out there anywhere is there?

IM>  I've
IM> tried to sync activities with others working in this area (Andrea for
IM> example). I completely overlooked that you are working on the block-cache
IM> side as well, would you mind outlining the basic design? 

Well I'm trying to eliminate the buffer cache...

My work on dirty pages sets up a bdflush like mechanism on top of the page
cache.  So for anything that can fit in the page cache the buffer cache
simply isn't needed.   Where the data goes when it is written simply doesn't
matter.

This means that everyone can reuse the same mechanism for keeping track of 
what is dirty and what isn't.  As this a significant kernel tuning issue
I thinks it's better (if possible) to share the code between all of
the filesystems.

Further the mechanism for writing handling dirty buffers doesn't need
to be tied to the disk buffers.  As far as I can tell bdflush doesn't
really care that data is going to disk except that:
(a) it calls ll_rw_block(instead of calling through a function) and
(b) it names all of the buffers by their destination on the disk.

Something as brilliant as that could happily sit at the page cache
level and be reusable, by all filesystems.

This also allows allocation on write and other fun tricks.

I have recoverd the buffer pointer in struct page, and put it to use
as a generic pointer.  A block based filesystem will probably use
is as a pointer to buffers, but NFS can use it for something else..

IM> one thing i saw in one of your earlier mails: an undirtification mechanizm
IM> in the page cache, although i've still got to see your patch (is it
IM> available somewhere?). Originally i thought about doing it that way too,
IM> but then i have avoided to have the page-writeout mechanizm in the
IM> page-cache according to Linus's suggestion. 

I'm not familiar with that suggestion.
I do know the page writeout mechanism shouldn't be in shrink-mmap...

IM>  I'm now pretty much convinced
IM> that this is the right way: future optimizations will enable us to delay
IM> the filesystem block allocation part completely (apart from bumping free
IM> space estimation counters up and down and thus avoiding the async 'out of
IM> free space' problem).

I've played with things a couple of different ways, (so I'm not
certain what you saw).

I can already delay the filesystem block allocation, though I currently don't
do that in shmfs because last time I played with that it wasn't working too
well.  Mainly because I had a pretty stupid on demand allocator, instead
of allocating for all dirty pages of a file at once.

What I do now is allocate blocks when they are written too, (which works great
without contention).  With contention a delayed strategy almost certainly
will do better.  The other limiting factor of my fs is I'm using swap
pages so I'm not totally in control, of block allocation.

IM> I'd like the page cache end up in a design where we can almost completely
IM> avoid any filesystem overhead for quickly created/destroyed and/or fully
IM> cached files. I'd like to have a very simple unaliased pagecache and no
IM> filesystem overhead, on big RAM boxes. 
IM> This was the orignal goal of the
IM> page cache as well, as far as i remember. Turning the page-cache into a
IM> buffer-cache again doesnt make much sense IMO... 

An unaliased pagecache?  I'm not quite certain what you mean by that.

I don't intend to turn it into a buffer-cache, but I was thinking of
sitting what must remains of the buffer-cache in page-cache inode, like swap
is now.

And the low over head sounds good to me too.  Right now there are a
couple of paths I would like to clean up.  In particular dirtying
mapped pages, in the swap out routines.  

If/when all of the filesystems are converted over I can just about do
it with a simple mark_page_dirty call, (except this doesn't handle fs
that want to track on a finer granularity what is dirty...)
So I'll probably wind up calling something like updatepage.
Except right now updatepage has way too much overhead.



Eric

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-23 15:49     ` [PATCHES] Ingo Molnar
  1999-05-23 18:34       ` [PATCHES] Eric W. Biederman
@ 1999-05-24 17:20       ` Manfred Spraul
  1 sibling, 0 replies; 13+ messages in thread
From: Manfred Spraul @ 1999-05-24 17:20 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Eric W. Biederman, Linus Torvalds, linux-kernel, linux-mm

Ingo Molnar wrote:
> on my box the page cache is already completely parallel on SMP,
> we drop the kernel lock on entry into page-cache routines and
> re-lock it only if we call filesystem-specific code or
> buffer-cache code.

How have you called the 'release_kernel_lock()' function?

I found several lengthy operations in the kernel which
should also release the kernel lock.
(the slowest: clear_page() when called by get_free_page(GFP_WAIT))

--
	Manfred


--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-23 18:34       ` [PATCHES] Eric W. Biederman
@ 1999-05-27  6:24         ` Stephen C. Tweedie
  1999-05-27 19:55           ` [PATCHES] Chuck Lever
  1999-05-30 17:01           ` [PATCHES] Eric W. Biederman
  1999-05-27  6:25         ` [PATCHES] Stephen C. Tweedie
  1 sibling, 2 replies; 13+ messages in thread
From: Stephen C. Tweedie @ 1999-05-27  6:24 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: Ingo Molnar, linux-mm, Stephen Tweedie

Hi,

On 23 May 1999 13:34:11 -0500, ebiederm+eric@ccr.net (Eric W. Biederman) said:

> My work on dirty pages sets up a bdflush like mechanism on top of the page
> cache.  So for anything that can fit in the page cache the buffer cache
> simply isn't needed.   Where the data goes when it is written simply doesn't
> matter.

One good reason for using buffers aliased into the page cache is
precisely to avoid a new bdflush mechanism.  We have had enough deadlock
and resource starvation issues with one bdflush that I get nervous about
adding another one!

(IM == Ingo)
IM> I'd like the page cache end up in a design where we can almost
IM> completely avoid any filesystem overhead for quickly
IM> created/destroyed and/or fully cached files. I'd like to have a very
IM> simple unaliased pagecache and no filesystem overhead, on big RAM
IM> boxes.  This was the orignal goal of the page cache as well, as far
IM> as i remember.

Actually the initial motivation of the page cache was to try to keep
per-file dirty lists, to fix fsync.  We just never got round to that!

However, this brings up another point: 

	ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.8-v5.diff

is a set of diffs to fix fsync performance on 2.2.  It fully implements
fsync and fdatasync, and applies the same optimisations to O_SYNC.  It
uses per-inode dirty buffer lists.  Please bear in mind that we still
need such functionality even with the dirty-page-cache mechanism, to
keep track of the indirect blocks if nothing else.

--Stephen

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-23 18:34       ` [PATCHES] Eric W. Biederman
  1999-05-27  6:24         ` [PATCHES] Stephen C. Tweedie
@ 1999-05-27  6:25         ` Stephen C. Tweedie
  1 sibling, 0 replies; 13+ messages in thread
From: Stephen C. Tweedie @ 1999-05-27  6:25 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: Ingo Molnar, linux-mm, Stephen Tweedie

Hi,

On 23 May 1999 13:34:11 -0500, ebiederm+eric@ccr.net (Eric W. Biederman) said:

> There isn't a linux-vfs list out there anywhere is there?

linux-fsdevel@vger.rutgers.edu

--Stephen
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-27  6:24         ` [PATCHES] Stephen C. Tweedie
@ 1999-05-27 19:55           ` Chuck Lever
  1999-05-27 23:39             ` [PATCHES] Stephen C. Tweedie
  1999-05-30 17:01           ` [PATCHES] Eric W. Biederman
  1 sibling, 1 reply; 13+ messages in thread
From: Chuck Lever @ 1999-05-27 19:55 UTC (permalink / raw)
  To: Stephen C. Tweedie; +Cc: linux-mm

On Thu, 27 May 1999, Stephen C. Tweedie wrote:
> However, this brings up another point: 
> 
> 	ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.8-v5.diff
> 
> is a set of diffs to fix fsync performance on 2.2.  It fully implements
> fsync and fdatasync, and applies the same optimisations to O_SYNC.  It
> uses per-inode dirty buffer lists.

stephen -

this patch appears to combine the "block allocation deadlock" patch with
the original fsync reimplementation... correct?

have you experienced and/or fixed the 5-second self-destruct problem i
mentioned to you?

	- Chuck Lever
--
corporate:	<chuckl@netscape.com>
personal:	<chucklever@netscape.net> or <cel@monkey.org>

The Linux Scalability project:
	http://www.citi.umich.edu/projects/linux-scalability/

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-27 19:55           ` [PATCHES] Chuck Lever
@ 1999-05-27 23:39             ` Stephen C. Tweedie
  1999-05-28  5:30               ` [PATCHES] Chuck Lever
  0 siblings, 1 reply; 13+ messages in thread
From: Stephen C. Tweedie @ 1999-05-27 23:39 UTC (permalink / raw)
  To: Chuck Lever; +Cc: Stephen C. Tweedie, linux-mm

Hi,

On Thu, 27 May 1999 15:55:37 -0400 (EDT), Chuck Lever <cel@monkey.org> said:

> this patch appears to combine the "block allocation deadlock" patch with
> the original fsync reimplementation... correct?

Yep, and that was unintentional.  Fixed.

> have you experienced and/or fixed the 5-second self-destruct problem i
> mentioned to you?

No, and yes --- I needed to add an invalidate_inode_buffers() during
inode invalidation.  Unmounting with writes pending appears to work fine
now.

Fixed patch for 2.2.9 is at

ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.9-a.diff

--Stephen
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-27 23:39             ` [PATCHES] Stephen C. Tweedie
@ 1999-05-28  5:30               ` Chuck Lever
  1999-05-29  1:24                 ` [PATCHES] Stephen C. Tweedie
  0 siblings, 1 reply; 13+ messages in thread
From: Chuck Lever @ 1999-05-28  5:30 UTC (permalink / raw)
  To: Stephen C. Tweedie; +Cc: linux-mm

On Fri, 28 May 1999, Stephen C. Tweedie wrote:
> Fixed patch for 2.2.9 is at
> 
> ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.9-a.diff

oops... one more thing.  invalidate_buffers() and set_blocksize() both
need to call remove_inode_queue() for each reclaimed buffer, and
create_buffers() should set b_inode to NULL on all the new buffers on a
page, for cleanliness.  IMHO.

	- Chuck Lever
--
corporate:	<chuckl@netscape.com>
personal:	<chucklever@netscape.net> or <cel@monkey.org>

The Linux Scalability project:
	http://www.citi.umich.edu/projects/linux-scalability/

--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-28  5:30               ` [PATCHES] Chuck Lever
@ 1999-05-29  1:24                 ` Stephen C. Tweedie
  0 siblings, 0 replies; 13+ messages in thread
From: Stephen C. Tweedie @ 1999-05-29  1:24 UTC (permalink / raw)
  To: Chuck Lever; +Cc: Stephen C. Tweedie, linux-mm

Hi,

On Fri, 28 May 1999 01:30:58 -0400 (EDT), Chuck Lever <cel@monkey.org> said:

> On Fri, 28 May 1999, Stephen C. Tweedie wrote:
>> Fixed patch for 2.2.9 is at
>> 
>> ftp://ftp.uk.linux.org/pub/linux/sct/fs/misc/fsync-2.2.9-a.diff

> oops... one more thing.  invalidate_buffers() and set_blocksize() both
> need to call remove_inode_queue() for each reclaimed buffer, 

Quite right --- done.  I've now checked that there aren't any other
places where we clear BH_Dirty.  Updated patch in the usual place.

> and create_buffers() should set b_inode to NULL on all the new buffers
> on a page, for cleanliness.  IMHO.

New buffer_heads are preinitialised to all-zeros anyway (search buffer.c
for "memset").

--Stephen
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCHES]
  1999-05-27  6:24         ` [PATCHES] Stephen C. Tweedie
  1999-05-27 19:55           ` [PATCHES] Chuck Lever
@ 1999-05-30 17:01           ` Eric W. Biederman
  1 sibling, 0 replies; 13+ messages in thread
From: Eric W. Biederman @ 1999-05-30 17:01 UTC (permalink / raw)
  To: Stephen C. Tweedie; +Cc: Ingo Molnar, linux-mm

>>>>> "ST" == Stephen C Tweedie <sct@redhat.com> writes:

ST> Hi,
ST> On 23 May 1999 13:34:11 -0500, ebiederm+eric@ccr.net (Eric W. Biederman) said:

>> My work on dirty pages sets up a bdflush like mechanism on top of the page
>> cache.  So for anything that can fit in the page cache the buffer cache
>> simply isn't needed.   Where the data goes when it is written simply doesn't
>> matter.

ST> One good reason for using buffers aliased into the page cache is
ST> precisely to avoid a new bdflush mechanism.  We have had enough deadlock
ST> and resource starvation issues with one bdflush that I get nervous about
ST> adding another one!

I agree, multiple bdflushes are a problem.   But this is precisely the
reason why we put bdflush into the page cache.

The buffer cache is not general purpose.

It has a maximum buffer size of 4k,  and doesn't even attempt to work for
non block based filesystems.

We need something in the page cache that can be used by everyone, otherwise
we will eventually have coda-bdflush, smbfs-bdflush, nfs-bdflush, ....
And all of an inferior quality because they don't share code.

Also using the current bdflush we can't implement allocate on write.

Eric
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~1999-05-30 17:41 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-05-23  3:36 [PATCHES] Eric W. Biederman
1999-05-23  6:03 ` [PATCHES] Linus Torvalds
1999-05-23 14:54   ` [PATCHES] Eric W. Biederman
1999-05-23 15:49     ` [PATCHES] Ingo Molnar
1999-05-23 18:34       ` [PATCHES] Eric W. Biederman
1999-05-27  6:24         ` [PATCHES] Stephen C. Tweedie
1999-05-27 19:55           ` [PATCHES] Chuck Lever
1999-05-27 23:39             ` [PATCHES] Stephen C. Tweedie
1999-05-28  5:30               ` [PATCHES] Chuck Lever
1999-05-29  1:24                 ` [PATCHES] Stephen C. Tweedie
1999-05-30 17:01           ` [PATCHES] Eric W. Biederman
1999-05-27  6:25         ` [PATCHES] Stephen C. Tweedie
1999-05-24 17:20       ` [PATCHES] Manfred Spraul

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox