how to flush out cache.?
Julian Elischer
julian at elischer.org
Fri Apr 23 00:30:38 PDT 2004
On Thu, 22 Apr 2004, Matthew Dillon wrote:
> Sigh. Run this program. Note that the file contains an 'A' in the
> first byte after you run it (hexdump -C test.dat). Thus, msync()
> is not destroying the page until AFTER it finishes flushing it to
> disk.
>
> /*
> * x.c
> */
> #include <sys/types.h>
> #include <sys/mman.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <fcntl.h>
>
> int
> main(int ac, char **av)
> {
> int fd;
> char *ptr;
>
> fd = open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0666);
> ftruncate(fd, 4096);
> ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
> *ptr = 'A';
> msync(ptr, 4096, MS_INVALIDATE);
> return(0);
> }
>
> Now run this program. Note that the file still contains an 'A'
> after you run it. Thus, again, msync() is not destroying the page
> until after it has been synchronized with the file.
>
> I also added some additional code to re-read *ptr after the msync
> and observed the I/O go through to the disk, so it does appear to
> be destroying the page. But it is definitely flushing it to disk
> first.
>
> If you can demonstrate a case where the page is being destroying
> when it shouldn't be, then there's a bug that needs fixing. Right
> now though it seems to operate as expected.
But this is exactly what I want..
I want any unwrittendata to be written out, and pages containing written
out data to be discarded so that a reread is forced to go to disk.
>
> -Matt
>
> /*
> * y.c
> */
> #include <sys/types.h>
> #include <sys/mman.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <fcntl.h>
>
> int
> main(int ac, char **av)
> {
> int fd;
> char *ptr;
>
> fd = open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0666);
> ftruncate(fd, 4096);
> ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
> *ptr = 'A';
> munmap(ptr, 4096);
> ptr = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0);
> msync(ptr, 4096, MS_INVALIDATE);
> return(0);
> }
>
>
>
More information about the freebsd-hackers
mailing list