This repository has been archived by the owner on Dec 27, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.txt
167 lines (149 loc) · 4.16 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#
# NVM Workshop Hackathon
# March 10, 2019
# 1:30pm - 4:30pm
# UCSD, Price Center East Ballroom
#
# These are the materials used during the hackathon:
# slides.pdf contains the slides shown
# Commmands demonstrated during the hackathon are listed below.
# Source files for programming examnples are in this repo.
#
# These instructions are designed to work on the Hackathon guest VMs,
# running Ubuntu 18.04.1 (bionic). Start by cloning this repo, so you
# can easily cut and paste commands from this README into your shell.
#
# Many of the sys admin steps described here can be found in the
# Getting Started Guide on pmem.io:
https://docs.pmem.io/getting-started-guide
#
# Start by making a clone of this repo...
#
git clone https://github.com/pmemhackathon/2019-03-10
cd 2019-03-10
#
# making sure your platform provides an NFIT table
ndctl list -BN # check the "provider" field
#
# Checking to make sure your kernel supports pmem:
#
uname -r # see kernel currently running
grep -i pmem /boot/config-`uname -r`
grep -i nvdimm /boot/config-`uname -r`
#
# Use ndctl to show that you have pmem installed:
#
ndctl list -u
#
# Intel-specific (for demo purposes, won't work on hackathon VMs)
#
#ipmctl show -topology
#ipmctl show -dimm
#ipmctl show -memoryresources
#
# create namespace:
#
sudo ndctl create-namespace -f -e namespace0.0 --mode fsdax
#
# Create a DAX-capable file system and mount it:
#
sudo mkdir /mnt/pmem-fsdax
sudo mkfs.ext4 /dev/pmem0
sudo mount -o dax /dev/pmem0 /mnt/pmem-fsdax
sudo chmod 777 /mnt/pmem-fsdax
df -h
#
# Install the latest libmemkind for the volatile pmem example.
# The extra stuff in front of ./build.sh prevents running the tests.
# On hackathon VMs, the tests will run the system out of memory.
#
cd
sudo apt-get install libnuma-dev libtool
git clone https://github.com/memkind/memkind
cd memkind
MAKEOPTS=check_PROGRAMS= ./build.sh
sudo make install
#
# Some of the examples use PMDK. Many distros include PMDK, but
# it takes some time for the latest version to flow intro the distros
# so here are the steps to build the latest source and install it in
# the usual locations.
#
cd
sudo apt-get install autoconf pkg-config libndctl-dev libdaxctl-dev
git clone https://github.com/pmem/pmdk
cd pmdk
make
sudo make install prefix=/usr
#
# Also install the C++ bindings for libpmemobj for the C++ example.
#
cd
sudo apt-get install cmake
git clone https://github.com/pmem/libpmemobj-cpp
cd libpmemobj-cpp
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
make
sudo make install
#
# Now everything in the hackathon repo should build...
#
cd
cd 2019-03-10
make
#
# raw.c contains the simplest possible memory-mapped pmem example
# this illustrates how to use mmap(). nothing transactional here!
#
dd if=/dev/zero of=/mnt/pmem-fsdax/daxfile bs=4k count=1
od -c /mnt/pmem-fsdax/daxfile
./raw /mnt/pmem-fsdax/daxfile
od -c /mnt/pmem-fsdax/daxfile
#
# volatile_pmem.c demonstrates using libmemkind to allocate both
# normal memory and pmem for volatile use. nothing persistent here!
#
./volatile_pmem /mnt/pmem-fsdax 100
#
# freq.c
#
# Simple C program for counting word frequency on a list on text files.
# It uses a hash table with linked lists in each bucket.
#
# This just sets the stage with a simple programming example. Nothing
# related to pmem yet.
#
./freq -p words.txt
#
# freq_mt.c
#
# Convert freq.c to be multi-threaded. A separate thread is created
# for each text file.
#
./freq_mt -p words.txt words.txt words.txt
#
# freq_pmem.c
#
# Convert freq_mt.c to mode the hash table to persistent memory and use
# libpmemobj for pmem allocation, locking, and transactions.
#
# We also use freq_pmem_print.c to display the currrent hash table contents.
#
pmempool create obj --layout=freq -s 100M /mnt/pmem-fsdax/freqcount
pmempool info /mnt/pmem-fsdax/freqcount
./freq_pmem_print /mnt/pmem-fsdax/freqcount
./freq_pmem /mnt/pmem-fsdax/freqcount words.txt words.txt words.txt
./freq_pmem_print /mnt/pmem-fsdax/freqcount
#
# freq_pmem_cpp.c
#
# Similar to freq_pmem.c but uses the C++ bindings to libpmemobj.
#
./freq_pmem_cpp /mnt/pmem-fsdax/freqcount words.txt words.txt words.txt
#
# You brought in many more examples when you cloned the PMDK tree:
#
cd
cd pmdk/src/examples