Skip to content

Commit 452a4af

Browse files
authored
Merge pull request #91 from hpc-io/code-docs
Update documentation
2 parents a1037d5 + 185b44d commit 452a4af

File tree

14 files changed

+3361
-354
lines changed

14 files changed

+3361
-354
lines changed

README.md

Lines changed: 41 additions & 229 deletions
Original file line numberDiff line numberDiff line change
@@ -1,230 +1,42 @@
11
[![linux](https://github.com/hpc-io/pdc/actions/workflows/linux.yml/badge.svg?branch=stable)](https://github.com/hpc-io/pdc/actions/workflows/linux.yml)
2-
# Proactive Data Containers (PDC)
3-
Proactive Data Containers (PDC) software provides an object-centric API and a runtime system with a set of data object management services. These services allow placing data in the memory and storage hierarchy, performing data movement asynchronously, and providing scalable metadata operations to find data objects. PDC revolutionizes how data is stored and accessed by using object-centric abstractions to represent data that moves in the high-performance computing (HPC) memory and storage subsystems. PDC manages extensive metadata to describe data objects to find desired data efficiently as well as to store information in the data objects.
4-
5-
PDC API, data types, and developer notes are available in docs/readme.md.
6-
7-
More information and publications of PDC is available at https://sdm.lbl.gov/pdc
8-
9-
# Installation
10-
11-
The following instructions are for installing PDC on Linux and Cray machines.
12-
GCC version 7 or newer and a version of MPI are needed to install PDC.
13-
14-
Current PDC tests have been verified with MPICH. To install MPICH, follow the documentation in https://www.mpich.org/static/downloads/3.4.1/mpich-3.4.1-installguide.pdf
15-
16-
PDC also depends on libfabric and Mercury. We provide detailed instructions for installing libfabric, Mercury, and PDC below.
17-
Make sure to record the environmental variables (lines that contains the "export" commands). They are needed for running PDC and to use the libraries again.
18-
19-
## Preparing for Installation
20-
21-
PDC relies on [`libfabric`](https://github.com/ofiwg/libfabric/) as well as [`mercury`](https://github.com/mercury-hpc/mercury). Therefore, let's **prepare the dependencies**.
22-
### Preparing Work Space
23-
24-
Before installing the dependencies and downloading the code repository, we assume there is a directory created for your installation already, e.g. `$WORK_SPACE` and now you are in `$WORK_SPACE`.
25-
26-
```bash
27-
export WORK_SPACE=/path/to/your/work/space
28-
mkdir -p $WORK_SPACE/source
29-
mkdir -p $WORK_SPACE/install
30-
```
31-
32-
### Download Necessary Source Repository
33-
34-
Now, let's download [`libfabric`](https://github.com/ofiwg/libfabric/), [`mercury`](https://github.com/mercury-hpc/mercury) and [`pdc`](https://github.com/hpc-io/pdc/tree/develop) into our `source` directory.
35-
36-
```bash
37-
cd $WORK_SPACE/source
38-
git clone [email protected]:ofiwg/libfabric.git
39-
git clone [email protected]:mercury-hpc/mercury.git
40-
git clone [email protected]:hpc-io/pdc.git
41-
```
42-
43-
### Prepare Directories for Artifact Installation
44-
```bash
45-
export LIBFABRIC_SRC_DIR=$WORK_SPACE/source/libfabric
46-
export MERCURY_SRC_DIR=$WORK_SPACE/source/mercury
47-
export PDC_SRC_DIR=$WORK_SPACE/source/pdc
48-
49-
export LIBFABRIC_DIR=$WORK_SPACE/install/libfabric
50-
export MERCURY_DIR=$WORK_SPACE/install/mercury
51-
export PDC_DIR=$WORK_SPACE/install/pdc
52-
53-
mkdir -p $LIBFABRIC_SRC_DIR
54-
mkdir -p $MERCURY_SRC_DIR
55-
mkdir -p $PDC_SRC_DIR
56-
57-
mkdir -p $LIBFABRIC_DIR
58-
mkdir -p $MERCURY_DIR
59-
mkdir -p $PDC_DIR
60-
61-
echo "export LIBFABRIC_SRC_DIR=$LIBFABRIC_SRC_DIR" > $WORK_SPACE/pdc_env.sh
62-
echo "export MERCURY_SRC_DIR=$MERCURY_SRC_DIR" >> $WORK_SPACE/pdc_env.sh
63-
echo "export PDC_SRC_DIR=$PDC_SRC_DIR" >> $WORK_SPACE/pdc_env.sh
64-
65-
echo "export LIBFABRIC_DIR=$LIBFABRIC_DIR" >> $WORK_SPACE/pdc_env.sh
66-
echo "export MERCURY_DIR=$MERCURY_DIR" >> $WORK_SPACE/pdc_env.sh
67-
echo "export PDC_DIR=$PDC_DIR" >> $WORK_SPACE/pdc_env.sh
68-
```
69-
70-
Remember, from now on, at any time, you can simply run the following to set the above environment variables so that you can run any of the following command for your installation.
71-
72-
```bash
73-
export WORK_SPACE=/path/to/your/work/space
74-
source $WORK_SPACE/pdc_env.sh
75-
```
76-
77-
### Compile and Install`libfabric`
78-
79-
Check out tag `v1.11.2` for `libfabric`:
80-
81-
```bash
82-
cd $LIBFABRIC_SRC_DIR
83-
git checkout tags/v1.11.2
84-
```
85-
86-
Configure, compile and install:
87-
88-
```bash
89-
./autogen.sh
90-
./configure --prefix=$LIBFABRIC_DIR CC=cc CFLAG="-O2"
91-
92-
make -j 32
93-
make install
94-
95-
export LD_LIBRARY_PATH="$LIBFABRIC_DIR/lib:$LD_LIBRARY_PATH"
96-
export PATH="$LIBFABRIC_DIR/include:$LIBFABRIC_DIR/lib:$PATH"
97-
98-
echo 'export LD_LIBRARY_PATH=$LIBFABRIC_DIR/lib:$LD_LIBRARY_PATH' >> $WORK_SPACE/pdc_env.sh
99-
echo 'export PATH=$LIBFABRIC_DIR/include:$LIBFABRIC_DIR/lib:$PATH' >> $WORK_SPACE/pdc_env.sh
100-
```
101-
102-
Note: On NERSC supercomputers, e.g. Cori and Perlmutter, we should add `--disable-efa --disable-sockets` to the `./configure` command during the compilation on login nodes.
103-
104-
### Compile and Install `mercury`
105-
106-
Now, you may check out a specific tag version of `mercury`, for example, `v2.2.0`:
107-
108-
```bash
109-
cd $MERCURY_SRC_DIR
110-
mkdir build
111-
git checkout tags/v2.2.0
112-
git submodule update --init
113-
```
114-
115-
Configure, compile, test and install:
116-
117-
```bash
118-
cd build
119-
cmake ../ -DCMAKE_INSTALL_PREFIX=$MERCURY_DIR -DCMAKE_C_COMPILER=cc -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DNA_USE_OFI=ON -DNA_USE_SM=OFF -DNA_OFI_TESTING_PROTOCOL=tcp
120-
make -j 32 && make install
121-
122-
ctest
123-
124-
export LD_LIBRARY_PATH="$MERCURY_DIR/lib:$LD_LIBRARY_PATH"
125-
export PATH="$MERCURY_DIR/include:$MERCURY_DIR/lib:$PATH"
126-
127-
echo 'export LD_LIBRARY_PATH=$MERCURY_DIR/lib:$LD_LIBRARY_PATH' >> $WORK_SPACE/pdc_env.sh
128-
echo 'export PATH=$MERCURY_DIR/include:$MERCURY_DIR/lib:$PATH' >> $WORK_SPACE/pdc_env.sh
129-
```
130-
131-
## Compile and Install PDC
132-
Now, it's time to compile and install PDC.
133-
134-
* One can replace `mpicc` to other available MPI compilers. For example, on Cori, `cc` can be used to replace `mpicc`.
135-
* `ctest` contains both sequential and MPI tests for the PDC settings. These can be used to perform regression tests.
136-
137-
```bash
138-
cd $PDC_SRC_DIR
139-
git checkout develop
140-
mkdir build
141-
cd build
142-
cmake ../ -DBUILD_MPI_TESTING=ON -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DCMAKE_INSTALL_PREFIX=$PDC_DIR -DPDC_ENABLE_MPI=ON -DMERCURY_DIR=$MERCURY_DIR -DCMAKE_C_COMPILER=cc -DMPI_RUN_CMD=srun
143-
make -j 32 && make install
144-
```
145-
146-
Let's run `ctest` now on a compute node:
147-
148-
### On Cori
149-
```bash
150-
salloc --nodes 1 --qos interactive --time 01:00:00 --constraint haswell
151-
```
152-
### On Perlmutter
153-
154-
```bash
155-
salloc --nodes 1 --qos interactive --time 01:00:00 --constraint cpu --account=mxxxx
156-
```
157-
158-
Once you are on the compute node, you can run `ctest`.
159-
160-
```bash
161-
ctest
162-
```
163-
164-
Note: On Cori, if you happen to see failures regarding `libibverb` validation, login to one of the compute nodes by running an interactive job and re-compile all PDC's dependencies and PDC itself. Then problem will be solved.
165-
166-
If all the tests pass, you can now specify the environment variables.
167-
168-
```bash
169-
export LD_LIBRARY_PATH="$PDC_DIR/lib:$LD_LIBRARY_PATH"
170-
export PATH="$PDC_DIR/include:$PDC_DIR/lib:$PATH"
171-
172-
echo 'export LD_LIBRARY_PATH=$PDC_DIR/lib:$LD_LIBRARY_PATH' >> $WORK_SPACE/pdc_env.sh
173-
echo 'export PATH=$PDC_DIR/include:$PDC_DIR/lib:$PATH' >> $WORK_SPACE/pdc_env.sh
174-
```
175-
176-
## About Spack
177-
178-
One can also install `PDC` with [`Spack`](https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/pdc/package.py), with which the dependencies of `PDC` can be easily managed and installed.
179-
180-
```bash
181-
git clone -c feature.manyFiles=true https://github.com/spack/spack.git
182-
cd spack/bin
183-
./spack install pdc
184-
```
185-
186-
## Running PDC
187-
188-
Essentially, PDC is a typical client-server application.
189-
To run `PDC`, one needs to start the server processes first, and then the clients can be started to issue RPC requests handled by the `Mercury` RPC framework.
190-
191-
We provide [`mpi_test.sh` utility](https://github.com/hpc-io/pdc/blob/develop/examples/mpi_test.sh) for running MPI tests. For example, on a regular Linux machine, you may run the following:
192-
193-
```bash
194-
export JOB_RUNNER=mpiexec
195-
cd $PDC_DIR/bin
196-
./mpi_test.sh ./pdc_init $JOB_RUNNER 2 4
197-
```
198-
199-
This is test will start 2 processes for PDC servers. The client program ./pdc_init will start 4 processes. Similarly, one can run any of the client examples in `ctest`.
200-
201-
Depending on the specific HPC environment where you run `PDC` , the value of `$JOB_RUNNER` variable can be changed to `srun` (for NERSC), `aprun` (for Theta), or `jsrun` for `Summit`, accordingly.
202-
203-
These source code will provide some knowledge of how to use PDC. For more reference, one may check the documentation folder in this repository.
204-
205-
# PDC on Cori
206-
207-
If you are running `PDC` on Cori supercomputer, here are some tips you would need to follow:
208-
209-
* On Cori, it is recommended to use `cc` as the default compiler when compiling PDC and its dependencies.
210-
* When preparing compilation for `PDC` using `CMake`, it is suggested to append console argument `-DMPI_RUN_CMD=srun` so that `ctest` can be executed on Cori.
211-
* Sometimes, it might be helpful to unload `darshan` module before the installation.
212-
213-
* For opening an interactive job session on Cori, it is recommended to add `--gres=craynetwork:2` option to the `salloc` command:
214-
```bash
215-
salloc -C haswell -N 4 -t 01:00:00 -q interactive --gres=craynetwork:2
216-
```
217-
* To launch the PDC server and the client, add `--gres=craynetwork:1` before the executables, for example:
218-
219-
* Run 4 server processes, each on one node in background:
220-
```bash
221-
srun -N 4 -n 4 -c 2 --mem=25600 --cpu_bind=cores --gres=craynetwork:1 --overlap ./bin/pdc_server.exe &
222-
```
223-
224-
* Run 64 client processes that concurrently create 1000 objects in total:
225-
```bash
226-
srun -N 4 -n 64 -c 2 --mem=25600 --cpu_bind=cores --gres=craynetwork:1 --overlap ./bin/create_obj_scale -r 1000
227-
```
228-
229-
230-
2+
![GitHub release tag(latest by date)](https://img.shields.io/github/v/tag/hpc-io/pdc)
3+
![Spack](https://img.shields.io/spack/v/pdc)
4+
5+
## Proactive Data Containers (PDC)
6+
Proactive Data Containers (PDC) software provides an object-focused data management API, a runtime system with a set of scalable data object management services, and tools for managing data objects stored in the PDC system. The PDC API allows efficient and transparent data movement in complex memory and storage hierarchy. The PDC runtime system performs data movement asynchronously and provides scalable metadata operations to find and manipulate data objects. PDC revolutionizes how data is managed and accessed by using object-centric abstractions to represent data that moves in the high-performance computing (HPC) memory and storage subsystems. PDC manages extensive metadata to describe data objects to find desired data efficiently as well as to store information in the data objects.
7+
8+
Full documentation of PDC with installation instructions, code examples for using PDC API, and research publications are available at [pdc.readthedocs.io](https://pdc.readthedocs.io)
9+
10+
More information and publications on PDC is available at https://sdm.lbl.gov/pdc
11+
12+
If you use PDC in your research, please use the following citations:
13+
14+
```
15+
@misc{byna:2017:pdc,
16+
title = {Proactive Data Containers (PDC) v0.1},
17+
author = {Byna, Suren and Dong, Bin and Tang, Houjun and Koziol, Quincey and Mu, Jingqing and Soumagne, Jerome and Vishwanath, Venkat and Warren, Richard and Tessier, François},
18+
url = {https://www.osti.gov/servlets/purl/1772576},
19+
doi = {10.11578/dc.20210325.1},
20+
url = {https://www.osti.gov/biblio/1772576},
21+
year = {2017},
22+
month = {5},
23+
}
24+
25+
@inproceedings{tang:2018:toward,
26+
title = {Toward scalable and asynchronous object-centric data management for HPC},
27+
author = {Tang, Houjun and Byna, Suren and Tessier, Fran{\c{c}}ois and Wang, Teng and Dong, Bin and Mu, Jingqing and Koziol, Quincey and Soumagne, Jerome and Vishwanath, Venkatram and Liu, Jialin and others},
28+
booktitle = {2018 18th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (CCGRID)},
29+
pages = {113--122},
30+
year = {2018},
31+
organization = {IEEE}
32+
}
33+
34+
@inproceedings{tang:2019:tuning,
35+
title = {Tuning object-centric data management systems for large scale scientific applications},
36+
author = {Tang, Houjun and Byna, Suren and Bailey, Stephen and Lukic, Zarija and Liu, Jialin and Koziol, Quincey and Dong, Bin},
37+
booktitle = {2019 IEEE 26th International Conference on High Performance Computing, Data, and Analytics (HiPC)},
38+
pages = {103--112},
39+
year = {2019},
40+
organization = {IEEE}
41+
}
42+
```

docs/_static/css/pdc.css

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
div.wy-nav-content {
2+
max-width: 1024px;
3+
}
4+
5+
nav.wy-nav-side, div.wy-side-nav-search,
6+
div.ethical-dark-theme .ethical-sidebar,
7+
div.rst-versions .rst-current-version {
8+
background: #efefef;
9+
}
10+
11+
div.wy-side-nav-search > a img.logo {
12+
margin: 40px auto;
13+
}
14+
15+
div.wy-menu-vertical p.caption {
16+
color: #503788;
17+
}
18+
19+
div.wy-menu-vertical a {
20+
color: #404040;
21+
}
22+
23+
div.wy-menu-vertical a:hover {
24+
background-color: #ffffff;
25+
}
26+
27+
.rst-content div[class^=highlight], .rst-content pre.literal-block {
28+
border-radius: 5px;
29+
background: #efefef;
30+
}
31+
32+
.admonition note {
33+
border-radius: 5px;
34+
}
35+
36+
.admonition-title {
37+
border-radius: 5px 5px 0 0;
38+
}
39+
40+
div.rst-versions span.rst-current-version {
41+
color: #344f90;
42+
}
43+
44+
div.rst-versions span.fa {
45+
color: #404040!important;
46+
}
47+
48+
div.ethical-dark-theme a, div.ethical-dark-theme a:visited {
49+
color: #404040!important;
50+
}
51+
52+
div.rst-versions {
53+
color: #404040;
54+
}
55+
56+
div.rst-content dl dt {
57+
border-radius: 3px;
58+
display: block;
59+
}
60+
61+
.cpp .function > dt.cpp {
62+
background: #efe7fa;
63+
color: #65419d;
64+
border-left: 3px solid #65419d;
65+
}

docs/_static/image/pdc.png

167 KB
Loading

docs/requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
sphinxemoji
2+
breathe

0 commit comments

Comments
 (0)