Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Feb 2001 08:57:31 -0500 (EST)
From:      Peter Dufault <dufault@hda.hda.com>
To:        Anton Berezin <tobez@tobez.org>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: how to actually find out whether data hit the disk?
Message-ID:  <200102281357.f1SDvVW27830@hda.hda.com>
In-Reply-To: <20010228140749.B29400@heechee.tobez.org> from Anton Berezin at "Feb 28, 2001 02:07:49 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> I am doing the following, on the partition with softupdates turned on:
> 
> 1. fd = open("a file", O_CREAT)
> 2. mmap(fd)
> 3. sequencial write to mmapped region
> 4. some other processing
> 5. munmap
> 6. unlink
> 7. close
> 
> Since this is a supposedly high-perfomance application, I am interested
> that data do NOT hit the disk.  I understand that softupdates do a good
> job at that.  The time taken by step 4 is usually sub-second, but
> sometimes it can take longer (network delays etc.).  The question is -
> is it possible to actually find out whether data hit the disk or not for
> a particular run of 1-7?

Answer to your question:

Do an msync with MS_SYNC someplace.  Also, use MAP_NOSYNC in
mmap until 4.3 when Matt Dillon plans to make that the default behavior.

But: When does the data need to "hit the disk", given that
you're unlinking the file in step 6?  If I read the posix spec
correctly it may never need to hit the disk.  Consider a set
of unrelated processes whacking a shared memory file.  Set it
up so the first one creates it, a bunch attach, and a final
one attaches and unlinks it:

process 1: fd = open("foo", O_CREAT|O_RDWR);
           mmap(fd, MAP_NOSYNC|MAP_SHARED);
           Write to mapped region

process 2: fd = open("foo", O_RDWR);
           mmap(fd, MAP_NOSYNC|MAP_SHARED);

process 3: fd = open("foo", O_RDWR);
           mmap(fd, MAP_NOSYNC|MAP_SHARED);

...

process N: fd = open("foo", O_RDWR)
           mmap(fd, MAP_NOSYNC|MAP_SHARED);
           unlink("foo");

Everyone now happily does what they want and then all exit and no one
ever does an msync().

Then you never need to actually transfer any data to disk.  I'm
not sure what actually happens now.

Peter

--
Peter Dufault (dufault@hda.com)   Realtime development, Machine control,
HD Associates, Inc.               Fail-Safe systems, Agency approval

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200102281357.f1SDvVW27830>