Rights Reserved. § Reasoning about memory is easy when the memory is private to a thread § Memory shared between threads, even in a single piece of code, becomes notoriously difficult to deal with – races, etc. § The bane of Java and C++ developers § Erlang and Go show the way – message based concurrency § At the HW level, shared memory requires coherency protocols which can introduce extraordinary performance delays – even between cores on the same chip
Rights Reserved. § Remote memory – out of the box § No failure model – what if target is temporarily or permanently unavailable? – PCIe over cables? – Software DSM? § No performance transparency – Need NUMA aware memory allocation, even in single box § Giant SMP – Reliability drops as you add nodes
Rights Reserved. § DRAM hasn’t been fast for 30 years! § THE WALL! § Huuuge caches! § Processors are designed around the performance of local DRAM § Anything slower (NVDIMM? Remote?) wastes a huge amount of silicon and power § Need massively multi-threaded HW for slow memory § But multi-threading SW sucks
Rights Reserved. § NV tech is slower than DRAM - Nobody wants slower memory § Everybody wants faster storage! § The memory model is just wrong for storage – We already have mmap – Not really that useful § Persistence not adequate for storage – you need replication/ redundancy
DriveScale Inc. All Rights Reserved. § Shared memory with coherency is a PIA § Shared memory without coherency is a huge PIA § Failure semantics are MIA for LOAD/STORE networks