linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* ftruncate-mmap: pages are lost after writing to mmaped file.
@ 2009-03-18 19:44 Ying Han
  2009-03-18 22:11 ` Andrew Morton
  0 siblings, 1 reply; 60+ messages in thread
From: Ying Han @ 2009-03-18 19:44 UTC (permalink / raw)
  To: linux-kernel, linux-mm, Andrew Morton, guichaz, Alex Khesin,
	Mike Waychison, Rohit Seth

We triggered the failure during some internal experiment with
ftruncate/mmap/write/read sequence. And we found that some pages are
"lost" after writing to the mmaped file. which in the following test
cases (count >= 0).

First we deployed the test cases into group of machines and see about
>20% failure rate on average. Then, I did couple of experiment to try
to reproduce it on a single machine. what i found is that:
1. add a fsync after write the file, i can not reproduce this issue.
2. add memory pressure(mmap/mlock) while run the test in infinite
loop, the failure is reproduced quickly. ( background flushing ? )

The "bad pages" count differs each time from one digit to 4,5 digit
for 128M ftruncated file. and what i also found that the bad page
number are contiguous for each segment which total bad pages container
several segments. ext "1-4, 9-20, 48-50" (  batch flushing ? )

(The failure is reproduced based on 2.6.29-rc8, also happened on
2.6.18 kernel. . Here is the simple test case to reproduce it with
memory pressure. )

#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

long kMemSize  = 128 << 20;
int kPageSize = 4096;

int main(int argc, char **argv) {
	int status;
	int count = 0;
	int i;
	char *fname = "/root/test.mmap";
	char *mem;

	unlink(fname);
	int fd = open(fname, O_CREAT | O_EXCL | O_RDWR, 0600);
	status = ftruncate(fd, kMemSize);

	mem = mmap(0, kMemSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
	// Fill the memory with 1s.
	memset(mem, 1, kMemSize);

	for (i = 0; i < kMemSize; i++) {
		int byte_good = mem[i] != 0;

		if (!byte_good && ((i % kPageSize) == 0)) {
			//printf("%d ", i / kPageSize);
			count++;
		}
	}

	munmap(mem, kMemSize);
	close(fd);
	unlink(fname);

	if (count > 0) {
		printf("Running %d bad page\n", count);
		return 1;
	}
	return 0;
}

--Ying

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

end of thread, other threads:[~2009-04-03 21:34 UTC | newest]

Thread overview: 60+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-18 19:44 ftruncate-mmap: pages are lost after writing to mmaped file Ying Han
2009-03-18 22:11 ` Andrew Morton
2009-03-18 22:40   ` Linus Torvalds
2009-03-18 23:18     ` Ying Han
2009-03-18 23:36       ` Linus Torvalds
2009-03-18 23:54         ` Ying Han
2009-03-19 15:48           ` Nick Piggin
2009-03-19 16:16             ` Peter Zijlstra
2009-03-19 16:36               ` Nick Piggin
2009-03-19 16:20             ` Linus Torvalds
2009-03-19 16:34               ` Nick Piggin
2009-03-19 16:51                 ` Linus Torvalds
2009-03-19 17:03                   ` Jan Kara
2009-03-19 17:06                     ` Jan Kara
2009-03-19 20:05                     ` Linus Torvalds
2009-03-19 20:21                   ` Linus Torvalds
2009-03-19 21:17                     ` Ying Han
2009-03-19 22:16                     ` Jan Kara
2009-03-19 16:46             ` Jan Kara
2009-03-24  7:44               ` Nick Piggin
2009-03-24 10:27                 ` Nick Piggin
2009-03-24 10:32                 ` Andrew Morton
2009-03-24 15:35                   ` Nick Piggin
2009-03-26 18:29                     ` Jan Kara
2009-03-26  0:03                   ` Ying Han
2009-03-24 12:39                 ` Jan Kara
2009-03-24 12:55                   ` Jan Kara
2009-03-24 13:26                     ` Jan Kara
2009-03-24 14:01                       ` Chris Mason
2009-03-24 14:07                         ` Jan Kara
2009-03-26  8:18                           ` Aneesh Kumar K.V
2009-03-24 14:30                       ` Nick Piggin
2009-03-24 14:47                         ` Jan Kara
2009-03-24 14:56                           ` Peter Zijlstra
2009-03-24 15:29                             ` Jan Kara
2009-03-24 20:14                               ` OGAWA Hirofumi
2009-03-26  8:47                               ` Aneesh Kumar K.V
2009-03-26 11:37                                 ` Jan Kara
2009-03-26 23:02                                 ` Linus Torvalds
2009-03-24 15:03                           ` Nick Piggin
2009-03-24 15:48                             ` Jan Kara
2009-03-24 17:35                               ` Jan Kara
2009-04-01 22:36                                 ` Ying Han
2009-04-02 10:11                                   ` Jan Kara
2009-04-02 11:24                                   ` Nick Piggin
2009-04-02 11:34                                     ` Jan Kara
2009-04-02 15:51                                       ` Nick Piggin
2009-04-02 17:44                                         ` Ying Han
2009-04-02 22:52                                           ` Ying Han
2009-04-02 23:39                                             ` Jan Kara
2009-04-03  0:25                                               ` Ying Han
2009-04-03  1:29                                               ` Ying Han
2009-04-03  9:41                                                 ` Jan Kara
2009-04-03 21:34                                                   ` Ying Han
2009-04-03  0:13                                     ` Ying Han
2009-03-27 20:35                 ` Ying Han
2009-03-20  0:34     ` Ying Han
2009-03-20  0:49       ` Linus Torvalds
2009-03-20  7:00         ` Ying Han
2009-03-25 23:15     ` Ying Han

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).