Enabling Efficient Persistent Memory Systems