> -----Original Message----- > From: Andy Lutomirski [mailto:luto@xxxxxxxxxxxxxx] > Sent: Friday, May 29, 2015 1:35 PM ... > Whoa, there! Why would we use non-temporal stores to WB memory to > access persistent memory? I can see two reasons not to: Data written to a block storage device (here, the NVDIMM) is unlikely to be read or written again any time soon. It's not like the code and data that a program has in memory, where there might be a loop accessing the location every CPU clock; it's storage I/O to historically very slow (relative to the CPU clock speed) devices. The source buffer for that data might be frequently accessed, but not the NVDIMM storage itself. Non-temporal stores avoid wasting cache space on these "one-time" accesses. The same applies for reads and non-temporal loads. Keep the CPU data cache lines free for the application. DAX and mmap() do change that; the application is now free to store frequently accessed data structures directly in persistent memory. But, that's not available if btt is used, and application loads and stores won't go through the memcpy() calls inside pmem anyway. The non-temporal instructions are cache coherent, so data integrity won't get confused by them if I/O going through pmem's block storage APIs happens to overlap with the application's mmap() regions. --- Robert Elliott, HP Server Storage ��.n������g����a����&ޖ)���)��h���&������梷�����Ǟ�m������)������^�����������v���O��zf������