On 09/02/2015 06:39 PM, Dave Hansen wrote:
On 09/02/2015 08:18 AM, Boaz Harrosh wrote:
> On 09/02/2015 05:23 PM, Dave Hansen wrote:
>>> I'd be curious what the cost is in practice. Do you have any actual
>>> numbers of the cost of doing it this way?
>>> Even if the instruction is a "noop", I'd really expect the
>>> really add up for a tens-of-gigabytes mapping, no matter how much the
>>> CPU optimizes it.
> What tens-of-gigabytes mapping? I have yet to encounter an application
> that does that. Our tests show that usually the mmaps are small.
We are going to have 2-socket systems with 6TB of persistent memory in
them. I think it's important to design this mechanism so that it scales
to memory sizes like that and supports large mmap()s.
I'm not sure the application you've seen thus far are very
representative of what we want to design for.
We have a patch pending to introduce a new mmap flag that pmem aware
applications can set to eliminate any kind of flushing. MMAP_PMEM_AWARE.
This is good for the like of libnvdimm that does one large mmap of the
all 6T and does not want the clflush penalty on unmap.
> I can send you a micro benchmark results of an mmap vs direct-io
> write. Our code will jump over holes in the file BTW, but I'll ask to also
> run it with falloc that will make all blocks allocated.
I'm really just more curious about actual clflush performance on large
ranges. I'm curious how good the CPU is at optimizing it.
Again our test does not do this, because it will only flush written-extents
of the file. the most we have in one machine is 64G of pmem, so even on a
very large mmap the most that can be is 64G of data, and the actual modify
of 64G of data will be much slower then the added clflush to each cache_line.