forked from pmem/pmem.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Andy Rudoff
committed
Sep 3, 2014
1 parent
3034650
commit 7aa418c
Showing
34 changed files
with
908 additions
and
490 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
* text=auto eol=lf |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
*.swp | ||
_site |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
--- | ||
permalink: /404.html | ||
--- | ||
|
||
### Page not found | ||
|
||
Sorry, couldn't find that page. Perhaps it was an outdated link to a blog post? You'll find a list of blog posts [here](/blog/). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
Copyright (c) 2014, Intel Corporation | ||
|
||
Redistribution and use in source and binary forms, with or without | ||
modification, are permitted provided that the following conditions | ||
are met: | ||
|
||
* Redistributions of source code must retain the above copyright | ||
notice, this list of conditions and the following disclaimer. | ||
|
||
* Redistributions in binary form must reproduce the above copyright | ||
notice, this list of conditions and the following disclaimer in | ||
the documentation and/or other materials provided with the | ||
distribution. | ||
|
||
* Neither the name of Intel Corporation nor the names of its | ||
contributors may be used to endorse or promote products derived | ||
from this software without specific prior written permission. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,10 @@ | ||
pmem.github.io | ||
============== | ||
|
||
pmem Organization Pages | ||
### pmem.io web site | ||
|
||
This repo contains the jekyll-based web site for http://pmem.io. | ||
|
||
The contents of this site are BSD-licensed open source. | ||
|
||
Send questions or comments to [[email protected]](mailto:[email protected]). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
name: pmem.io | ||
description: Persistent Memory Programming | ||
url: http://pmem.io | ||
|
||
highlighter: pygments | ||
|
||
gems: | ||
- jekyll-mentions | ||
|
||
defaults: | ||
- | ||
scope: | ||
path: "" # all files | ||
values: | ||
layout: "default" # default layout is "default" | ||
|
||
exclude: ['CNAME', 'LICENSE', 'README.md'] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
<p size="-2"> | ||
The contents of this web site and the associated | ||
<a href="https://github.com/pmem">GitHub repositories</a> | ||
are BSD-licensed open source. | ||
</p> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
<!DOCTYPE HTML> | ||
<html> | ||
<head> | ||
<meta charset="utf-8"> | ||
<title>{% if page.title %}pmem.io: {{ page.title }}{% else %}pmem.io{% endif %}</title> | ||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | ||
<link rel="stylesheet" href="/css/pmem.css" type="text/css"> | ||
<link rel="stylesheet" href="/css/pygment_trac.css" type="text/css"> | ||
<link rel="shortcut icon" href="/favicon.ico"> | ||
<link href="http://pmem.io/feed.xml" rel="alternate" type="application/atom+xml"> | ||
</head> | ||
<body> | ||
<!-- _layouts/default.html --> | ||
<div id="wrap"> | ||
<div id="header"> | ||
<a href="http://pmem.io/"> | ||
<h2>pmem.io<br>Persistent Memory Programming</h2> | ||
</a> | ||
</div> | ||
<div id="nav"> | ||
<ul> | ||
<li><a href="/" {% if page.title == "Home" %} class="sel" {% endif %}>Home</a></li> | ||
<li><a href="/glossary/" {% if page.title == "Glossary" %} class="sel" {% endif %}>Glossary</a></li> | ||
<li><a href="/nvml/" {% if page.title == "NVM Library" %} class="sel" {% endif %}>NVM Library</a></li> | ||
<li><a href="/blog/" {% if page.title == "Blog" %} class="sel" {% endif %}>Blog</a></li> | ||
<li><a href="/about/" {% if page.title == "About" %} class="sel" {% endif %}>About</a></li> | ||
</ul> | ||
</div> | ||
<div id="main"> | ||
{{ content }} | ||
</div> | ||
{% if page.title != "Blog" %} | ||
<div id="sidebar"> | ||
<h5>Recent Blog Posts</h5> | ||
{% for post in site.posts limit:5 %} | ||
<hr> | ||
<a href="{{ post.url }}">{{ post.title }}</a><br> | ||
<div id="postinfo">Posted {{ post.date | date: '%B %d, %Y' }}</div> | ||
{{ post.content | strip_html | truncatewords:20}} | ||
<br><br> | ||
{% endfor %} | ||
</div> | ||
{% endif %} | ||
<div id="footer"> | ||
<hr> | ||
{% include pagefooter.html %} | ||
</div> | ||
</div> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<!DOCTYPE HTML> | ||
<html> | ||
<head> | ||
<meta charset="utf-8"> | ||
<title>{% if page.title %}pmem.io: {{ page.title }}{% else %}pmem.io{% endif %}</title> | ||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | ||
<link rel="stylesheet" href="/css/pmem.css" type="text/css"> | ||
<link rel="stylesheet" href="/css/pygment_trac.css" type="text/css"> | ||
<link rel="shortcut icon" href="/favicon.ico"> | ||
<link href="http://pmem.io/feed.xml" rel="alternate" type="application/atom+xml"> | ||
</head> | ||
<body> | ||
<!-- _layouts/post.html --> | ||
<div id="wrap"> | ||
<div id="header"> | ||
<a href="http://pmem.io/"> | ||
<h2>pmem.io<br>Persistent Memory Programming</h2> | ||
</a> | ||
</div> | ||
<div id="nav"> | ||
<ul> | ||
<li><a href="/">Home</a></li> | ||
<li><a href="/glossary/">Glossary</a></li> | ||
<li><a href="/nvml/">NVM Library</a></li> | ||
<li><a href="/blog/" class="sel">Blog</a></li> | ||
<li><a href="/about/">About</a></li> | ||
</ul> | ||
</div> | ||
<br> | ||
<h3>{{ page.title }}</h3> | ||
<div id="postinfo">Posted {{ page.date | date: '%B %d, %Y' }}</div> | ||
<br> | ||
{{ content }} | ||
<br> | ||
<br> | ||
<div id="postinfo">Posted by <a href="https://github.com/{{ page.author }}">@{{ page.author }}</a></div> | ||
<div id="footer"> | ||
<hr> | ||
{% include pagefooter.html %} | ||
</div> | ||
</div> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
--- | ||
title: Creating pmem.io | ||
author: andyrudoff | ||
layout: post | ||
--- | ||
|
||
The [pmem](https://github.com/pmem) project in GitHub has been | ||
created as an open source project focused on persistent memory programming. | ||
Everything on this web site and the associated GitHub repositories is | ||
open source under the "three-clause" BSD license. | ||
|
||
Some educational [Linux examples](https://github.com/pmem/linux-examples) | ||
are included, which demonstrate the | ||
[SNIA NVM programming model](http://snia.org/nvmp) and some of the | ||
interesting features and challenges associated with persistent memory. | ||
|
||
The team's initial focus is the Linux [NVM Library](/nvml/) which | ||
will provide useful APIs for memory allocation, transactions, etc. | ||
built on top of the NVM programming model. | ||
|
||
This site includes a [pmem blog](/blog/) based on | ||
[Jekyll](https://github.com/jekyll/jekyll) so over time we can | ||
write up our experiences working with persistent memory programming. | ||
There are [many ways](/about/) to get involved and we welcome your | ||
contributions! | ||
|
||
#### GitHub Pages and Jekyll | ||
|
||
Since we will surely keep our focus on persistent memory and | ||
immediately forget the steps taken to create this site, here's | ||
a quick summary for reference. First, any GitHub user or project | ||
area can have [GitHub Pages](https://pages.github.com/) associated | ||
with them with almost no effort. We simply created a repository | ||
named **pmem.github.io** to hold the pages. GitHub pages use | ||
Jekyll automatically, but it is convenient to install it locally | ||
for previewing content before pushing changes to the repo. On the | ||
Debian-based distro known as _CrunchBang_, these steps did the trick: | ||
|
||
{% highlight sh %} | ||
$ sudo apt-get install ruby ruby-dev node python-pygments | ||
$ sudo gem install jekyll | ||
$ sudo gem install jekyll-mentions | ||
{% endhighlight %} | ||
|
||
After creating the appropriate Jekyll files in the local copy | ||
of the repo, we used this command: | ||
|
||
{% highlight sh %} | ||
$ jekyll serve --watch | ||
{% endhighlight %} | ||
|
||
This watches for changes, re-generating | ||
the web pages as necessary, and provides the content for preview | ||
at the local URL `http://0.0.0.0:4000/`. | ||
|
||
The rest of the details (like how to write a `_config.yml` or create | ||
templates or includes) can all be found in the | ||
[Jekyll documentation](http://jekyllrb.com/) or you can look | ||
at the [source for this web site](https://github.com/pmem/pmem.github.io/) | ||
for details. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
--- | ||
title: References | ||
author: andyrudoff | ||
layout: post | ||
--- | ||
|
||
Some very interesting research has been happening in the area of | ||
Persistent Memory and more is emerging. While the examples provided | ||
here are meant as introductory and simple, some publications cover | ||
the topic in much more depth and include complete transaction systems, | ||
compiler/language enhancements, etc. Here are some of the most | ||
important publications in this space (please send links to more and | ||
we'll include them). | ||
|
||
One of the most impressive bodies of work in this area is **Mnemosyne**. | ||
Read the paper: | ||
|
||
- Haris Volos, Andres Jaan Tack, Michael M. Swift: _Mnemosyne: | ||
Lightweight Persistent Memory_, The 16th ACM Conference on | ||
Architectural Support for Programming Languages and Operating | ||
Systems (ASPLOS 2011), March 2011, Newport Beach, California. | ||
|
||
and explore the website, which includes full source and documentation: | ||
|
||
- [http://research.cs.wisc.edu/sonar/projects/mnemosyne/](http://research.cs.wisc.edu/sonar/projects/mnemosyne/) | ||
|
||
Another very relevant project is **NV-Heaps**. Read the paper: | ||
|
||
- J. Coburn, et al.: _NV-Heaps: Making Persistent Objects Fast and Safe | ||
with Next Generation, Non-Volatile Memories_, The 16th ACM Conference | ||
on Architectural Support for Programming Languages and Operating | ||
Systems (ASPLOS 2011), March 2011, Newport Beach, Ca. | ||
|
||
The June 2013 issue of _USENIX ;login:_ contains an article that discusses | ||
the NVM Programming Model, including a discussion of Persistent Memory. | ||
|
||
- [https://www.usenix.org/publications/login/june-2013-volume-38-number-3](https://www.usenix.org/publications/login/june-2013-volume-38-number-3) | ||
|
||
The NVM Programming Technical Work Group (TWG) in SNIA has over 35 | ||
companies working together on NVM programming models, including | ||
Persistent Memory. You can read more about the TWG and see the | ||
programming model specification here: | ||
|
||
- [http://snia.org/nvmp](http://snia.org/nvmp) | ||
|
||
The basics of NVDIMM at Wikipedia, with lots of additional links: | ||
|
||
- [http://en.wikipedia.org/wiki/NVDIMM](http://en.wikipedia.org/wiki/NVDIMM) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
--- | ||
title: Crawl, Walk, Run... | ||
author: andyrudoff | ||
layout: post | ||
--- | ||
|
||
> _If you can't fly then run, if you can't run then walk, if you can't walk then crawl, but whatever you do you have to keep moving forward._ | ||
> | ||
> - Martin Luther King Jr. | ||
This project, as well as the support for persistent memory in | ||
various operating systems, can be thought of as a _crawl, walk, run_ | ||
approach. As byte-addressable persistence enters the market, | ||
modified system BIOS images and device drivers expose it to | ||
other modules in the kernel. Despite the byte-addressability, | ||
many of the initial usages are based on block storage device | ||
interfaces. But you have to start somewhere, so this is the | ||
_crawl_ phase. The move beyond that, we need a software | ||
architecture for exposing persistent memory up the stack. | ||
|
||
 | ||
|
||
The picture above shows the _walk_ phase of persistent memory | ||
support: exposing persistent memory up the stack so applications | ||
can leverage it. When the [SNIA NVM Programming TWG](http://snia.org/nvmp) | ||
(Technical Work Group) was discussing how persistent memory was | ||
exposed, there was a pervasive feeling in the group that the | ||
best approach would leverage existing mechanisms, like the file system | ||
naming and administrative model. So the recommendation published | ||
by the TWG matches the above diagram, and that's the initial | ||
approach we see happening in the Linux community. | ||
|
||
The idea is fairly straightforward. We want applications to have | ||
direct load/store access to persistent memory just as they do to | ||
traditional volatile memory. But since persistent memory is, well, | ||
persistent, applications are going to need to be able to express | ||
which blob of previously-stored data is desired when asking the OS | ||
for direct access to it. This is done using the well-understood | ||
file namespace. So walking through the path from hardware (at the bottom) | ||
to the application (at the top) in the above picture, we see a | ||
non-volatile DIMM (NVDIMM), which is one way of providing persistent | ||
memory to the platform, and it is managed by a driver in the OS labeled | ||
_NVDIMM Driver_ in the picture. That driver provides access for | ||
manageability, shown on the left (for things like configuration changes | ||
and health monitoring). The driver may also provide the common | ||
block-based storage interfaces shown in the middle of the picture, | ||
so that existing file systems or applications that use block storage | ||
directly work without modification. But the more disruptive path | ||
(and the more interesting to this project) is the rightmost path | ||
where the application opens a file using a _persistent memory aware | ||
file system_ and then memory-maps that file. This is done in Linux | ||
using the [mmap(2)](http://linux.die.net/man/2/mmap) system call. | ||
|
||
So this is the _walk_ phase for persistent memory: when an application | ||
memory-maps a file from a _persistent memory aware file system_ it | ||
gets direct access to the persistence (shown in the far right arrow | ||
in the above picture). Unlike the page-cache-cased memory mapping | ||
done by traditional file systems, the persistent memory aware file | ||
system literally provides the shortest possible path | ||
between an application and some storage! Once things are set up and | ||
initial page faults are taken, there's no kernel code running at all | ||
when data is fetched from persistent memory -- the application loads | ||
the data directly from the NVDIMM. | ||
|
||
So what's the _run_ phase? Giving an application a large range of | ||
directly-mapped persistence is cool, but every application writer | ||
will then start the complex process of managing how data structures | ||
are laid out in that raw range of memory. That's where libraries | ||
come in -- to help application writers solve some of the more common | ||
problems like memory allocation or transactional updates. That will | ||
be the topic for an upcoming blog entry. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
--- | ||
title: Linux Examples | ||
author: andyrudoff | ||
layout: post | ||
--- | ||
|
||
The [basic architecture]({% post_url 2014-08-27-crawl-walk-run %}) | ||
for exposing persistent memory gives applications a very **raw** | ||
type of access. Applications can load/store directly to the | ||
persistence, but then what. What are the interesting problems | ||
facing an application developer and what would some solutions | ||
look like? | ||
|
||
To help describe the issues and potential solutions, we've | ||
published a set of [Linux examples](https://github.com/pmem/linux-examples) | ||
around persistent memory. These examples start with a simple | ||
"hello, world!" style program for storing a string in persistent | ||
memory, and end with a full binary tree sort example which maintains | ||
a consistent tree data structure even in the face of power failure or | ||
other types of system interruption. The examples include a mini | ||
fault injection framework to illustrate the type of tools that | ||
are necessary for demonstrating programs correctly survive system | ||
interruption. | ||
|
||
While not really useful in a production environment, these examples | ||
are educational, and provide a background on how persistent memory | ||
is exposed to applications and what the application writer needs to | ||
consider before using it. So please | ||
[check it out](https://github.com/pmem/linux-examples) and feel | ||
free to ask questions, comment on it, or contribute to it. | ||
(Scroll down on the GitHub repository page to see the README which | ||
contains all sorts of details on the examples.) | ||
A good | ||
place to send questions or comments is our | ||
[Google Group](http://groups.google.com/group/pmem). |
Oops, something went wrong.