Re: dirty pages (Was: Re: [PATCH] Prevent large file writebackstarvation)

From: Andrew Morton
Date: Mon Feb 13 2006 - 15:07:48 EST


Johannes Stezenbach <js@xxxxxxxxxxx> wrote:
>
> On Mon, Feb 06, 2006, Andrew Morton wrote:
> > Mark Lord <lkml@xxxxxx> wrote:
> > >
> > > A simple test I do for this:
> > >
> > > $ mkdir t
> > > $ cp /usr/src/*.bz2 t (about 400-500MB worth of kernel tar files)
> > >
> > > In another window, I do this:
> > >
> > > $ while (sleep 1); do echo -n "`date`: "; grep Dirty /proc/meminfo; done
> > >
> > > And then watch the count get large, but take virtually forever
> > > to count back down to a "safe" value.
> > >
> > > Typing "sync" causes all the Dirty pages to immediately be flushed to disk,
> > > as expected.
> >
> > I've never seen that happen and I don't recall seeing any other reports of
> > it, so your machine must be doing something peculiar. I think it can
> > happen if, say, an inode gets itself onto the wrong inode list, or
> > incorrectly gets its dirty flag cleared.
> >
> > Are you using any unusual mount options, or unusual combinations of
> > filesystems, or anything like that?
>
> I've been seeing something like this for some time, but kept
> silent as I'm forced to use vmware on my Thinkpad T42p (1G RAM,
> but CONFIG_NOHIGHMEM=y).
> Sometimes 'sync' takes serveral seconds, even when the machine
> had been idle for >15mins. I don't have laptop mode enabled.
> so far I've not found a deterinistic way to reproduce this behaviour.
>
> Anyway, I temporarily deinstalled vmware (deleted the kernel
> modules and rebooted; kernel is still tainted because of madwifi
> if that matters).
> The behaviour I see with vmware (long 'sync' time) doesn't seem
> to happen without it so far, but:

vmware uses mmap a lot. Perhaps it's doing regular msyncs as well.

> Now copying a 700MB file makes "Dirty" go up to 350MB. It then
> slowly decreases to 325MB and stays there.

It shouldn't. Did you really leave it for long enough?

If you did, then why does it happen there and not here?

> However:
>
> $ time sync
>
> real 0m0.326s
> user 0m0.000s
> sys 0m0.280s
>
> and output from the dirty monitor one-liner:
>
> Mon Feb 13 14:31:43 CET 2006: Dirty: 325916 kB
> Mon Feb 13 14:31:44 CET 2006: Dirty: 325916 kB
> Mon Feb 13 14:31:45 CET 2006: Dirty: 4 kB
> Mon Feb 13 14:31:46 CET 2006: Dirty: 8 kB
>
>
> Clearly my notebook's hdd isn't that fast. ;-/
> What does "Dirty" in /proc/meminfo really mean?

The number of pages which are marked dirty, roughly.

In this case, all those pages' buffers had been written out by kjournald
behind the VM's back, so when the VM tried to write these "dirty" pages it
found that no I/O needed to be performed.

It would be nice if ext3 could clean the parent pages as it goes, but I
seem to recall deciding that this is not trivial. I guess we could get a
99.9% solution by trylocking the page.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/