<div dir="ltr">My best theory is that mmap has to map zero pages first. Typically everything is mapped to one zero page, and then every new page write causes a COW page fault. That might explain Sean's observations of lots of functions that execute #bytes/4096 times.<div><br></div><div>I wonder if there are some tweaks to the mmap path that would help, like only mapping 10MB of output buffer per file and then remapping it to a +10MB offset. There are probably also things like MAP_POPULATE or explicitly asking for a few huge pages that might help.<br><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 12, 2014 at 3:30 PM, Rafael Ávila de Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It seems that the common wisdom on the fastest way to create a file is<br>
<br>
* create the file<br>
* resize it to the final size<br>
* mmap it rw<br>
* write the data to the mapping<br>
<br>
I benchmarked that against doing 1 MB writes to create a 1GB file with pseudo random data.<br>
<br>
The test program is attached. The results I got were (in seconds, mmap is the first):<br>
<br>
btrfs<br>
1.752698e+00<br>
1.112864e+00<br>
<br>
tmpsfs<br>
1.484731e+00<br>
1.113772e+00<br>
<br>
hfs+ (laptop)<br>
4.015817e+00<br>
2.240137e+00<br>
<br>
windows 7 (vm)<br>
1.609375e+00<br>
3.875000e+00<br>
<br>
ext2 on arm (old google chrome book):<br>
5.910171e+01<br>
6.566929e+01<br>
<br>
So on Windows it is true, mmap seems to be faster than writes. On Linux and OS X x86_64 the situation is inverted. On arm mmap is a bit faster.<br>
<br>
It would be interesting to see if someone else can reproduce these numbers. It would be particularly nice to try a newer arm system and windows outside a vm.<br>
<br>
Also, does anyone have a theory of where the difference comes from?<br>
<br>
Cheers,<br>
Rafael<br>
<br><br>
<br>
<br>
Sent from my iPhone<br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div></div>