Persistent Pointers in NVRAM via Segment Offsets

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Pointers embedded in data structures in non-volatile random access memory (NVRAM) become invalid after power-up or reboot, and their validity can vary across operating system processes, making them unreliable for persistent storage.

Innovation Solution

Implementing NVRAM compiler directives that generate persistent pointers by using NVRAM segment identifiers and offsets, which are mapped into virtual addresses, ensuring pointer validity across reboots and processes through an NVRAM driver and registry system.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If pointers are embedded in data structures stored in NVRAM, then data structures can be persisted across power cycles, but the pointers become invalid after reboot and vary across operating system processes

Engineering Contradiction:
Improvepointer validityVSAvoidpointer compatibility across processes
Core Design Contradiction:
ReliabilityVSAdaptability or versatility

Solution Approach 1:

The pointer is divided into two separate components: an NVRAM segment identifier (stored persistently in NVRAM) and a virtual address (generated temporarily for each process). This segmentation allows the persistent portion to remain valid across reboots while the transient portion adapts to process-specific address spaces, resolving the contradiction between persistence and compatibility.

Inventive Principle:
Principle #1Segmentation

2Reliability

If NVRAM is used to store data structures, then persistence is achieved, but additional programming instructions are needed to store data via block mode interface

Engineering Contradiction:
Improvedata persistenceVSAvoidprogramming complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The patent introduces an NVRAM driver as an intermediary layer between the application and the NVRAM hardware. This driver provides a simplified interface that automatically handles the complex block mode storage operations, allowing applications to use NVRAM with the same simplicity as traditional memory while maintaining persistence capabilities.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Ease of operation

If traditional memory hierarchy is used with NVRAM, then NVRAM can be accessed as block oriented device, but byte oriented access capability is lost

Engineering Contradiction:
Improveaccess simplicityVSAvoidaccess flexibility
Core Design Contradiction:
Ease of operationVSAdaptability or versatility

Solution Approach 1:

The patent makes NVRAM multi-functional by enabling it to operate in two modes: block-oriented mode for persistent storage and byte-oriented mode for temporary memory operations. The system can dynamically switch between these modes, allowing NVRAM to serve both as a persistent storage device and as an accessible working memory, thus achieving universality.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Data Source

PatentUS10108402B2Persistent pointers for programs running on NVRAM based computers
Publication Date: 2018.10.23 HEWLETT PACKARD ENTERPRISE DEV LP
  • US10108402B2 patent drawing
  • US10108402B2 patent drawing
  • US10108402B2 patent drawing

AI summary

In one example implementation, a method for generating persistent pointers using non-volatile random access memory (NVRAM) compiler directives in a program for NVRAM based computing systems includes generating a program including modified variables. The modified variables include NVRAM compiler directives indicative of persistent pointer type. The method further includes generating assembly code, including persistent pointer enablers, using the program including the modified variables by a compiler. Furthermore, the method includes mapping information of each NVRAM segment formed by the program with an associated physical address in NVRAM by an NVRAM driver residing in the NVRAM or main memory, maintaining an NVRAM registry including the mapped information by the NVRAM driver, determining valid virtual addresses of processes during runtime using the generated assembly code including the persistent pointer enablers and the NVRAM registry including the mapped information, and generating the persistent pointers from the valid virtual addresses during runtime.