On Wed, 8 Nov 2017, Christoph Hellwig wrote: > On Tue, Nov 07, 2017 at 05:03:11PM -0500, Mikulas Patocka wrote: > > Hi > > > > I am developing a driver that uses persistent memory for caching. A > > persistent memory device can be mapped in several discontiguous ranges. > > > > The kernel has a function vmap that takes an array of pointers to pages > > and maps these pages to contiguous linear address space. However, it can't > > be used on persistent memory because persistent memory may not be backed > > by page structures. > > > > This patch introduces a new function vmap_pfn, it works like vmap, but > > takes an array of pfn_t - so it can be used on persistent memory. > > How is cache flushing going to work for this interface assuming > that your write to/from the virtual address and expect it to be > persisted on pmem? We could use the function clwb() (or arch-independent wrapper dax_flush()) - that uses the clflushopt instruction on Broadwell or clwb on Skylake - but it is very slow, write performance on Broadwell is only 350MB/s. So in practice I use the movnti instruction that bypasses cache. The write-combining buffer is flushed with sfence. Mikulas -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel