This allows to use same command for allocating hugepages on systems with different hugepage sizes. The old NRHUGE variable can be still set on Linux machines, but is currently undocumented. Change-Id: I1fba315d95e9aae8b6a8c9c445deb447fecc65dc Signed-off-by: Hailiang Wang <hailiangx.e.wang@intel.com> Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/369546 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
129 lines
3.3 KiB
Markdown
129 lines
3.3 KiB
Markdown
# Getting Started {#getting_started}
|
|
|
|
# Installing Prerequisites {#getting_started_prerequisites}
|
|
|
|
Fedora/CentOS:
|
|
|
|
~~~{.sh}
|
|
sudo dnf install -y gcc gcc-c++ make CUnit-devel libaio-devel openssl-devel \
|
|
git astyle-devel python-pep8 lcov python clang-analyzer
|
|
# Additional dependencies for RDMA (NVMe over Fabrics)
|
|
sudo dnf install -y libibverbs-devel librdmacm-devel
|
|
# Additional dependencies for building docs
|
|
sudo dnf install -y doxygen mscgen
|
|
~~~
|
|
|
|
Ubuntu/Debian:
|
|
|
|
~~~{.sh}
|
|
sudo apt-get install -y gcc g++ make libcunit1-dev libaio-dev libssl-dev \
|
|
git astyle pep8 lcov clang
|
|
# Additional dependencies for RDMA (NVMe over Fabrics)
|
|
sudo apt-get install -y libibverbs-dev librdmacm
|
|
# Additional dependencies for building docs
|
|
sudo apt-get install -y doxygen mscgen
|
|
~~~
|
|
|
|
FreeBSD:
|
|
|
|
~~~{.sh}
|
|
sudo pkg install gmake cunit openssl git devel/astyle bash devel/pep8 \
|
|
python
|
|
# Additional dependencies for building docs
|
|
sudo pkg install doxygen mscgen
|
|
~~~
|
|
|
|
# Getting the Source Code {#getting_started_source}
|
|
|
|
~~~{.sh}
|
|
git clone https://github.com/spdk/spdk
|
|
cd spdk
|
|
git submodule update --init
|
|
~~~
|
|
|
|
# Building {#getting_started_building}
|
|
|
|
Linux:
|
|
|
|
~~~{.sh}
|
|
./configure
|
|
make
|
|
~~~
|
|
|
|
FreeBSD:
|
|
Note: Make sure you have the matching kernel source in /usr/src/
|
|
|
|
~~~{.sh}
|
|
./configure
|
|
gmake
|
|
~~~
|
|
|
|
There are a number of options available for the configure script, which can
|
|
be viewed by running
|
|
|
|
~~~{.sh}
|
|
./configure --help
|
|
~~~
|
|
|
|
Note that not all features are enabled by default. For example, RDMA
|
|
support (and hence NVMe over Fabrics) is not enabled by default. You
|
|
can enable it by doing the following:
|
|
|
|
~~~{.sh}
|
|
./configure --with-rdma
|
|
make
|
|
~~~
|
|
|
|
# Running the Unit Tests {#getting_started_unittests}
|
|
|
|
It's always a good idea to confirm your build worked by running the
|
|
unit tests.
|
|
|
|
~~~{.sh}
|
|
./unittest.sh
|
|
~~~
|
|
|
|
You will see several error messages when running the unit tests, but they are
|
|
part of the test suite. The final message at the end of the script indicates
|
|
success or failure.
|
|
|
|
# Running the Example Applications {#getting_started_examples}
|
|
|
|
Before running an SPDK application, some hugepages must be allocated and
|
|
any NVMe and I/OAT devices must be unbound from the native kernel drivers.
|
|
SPDK includes a script to automate this process on both Linux and FreeBSD.
|
|
This script should be run as root. It only needs to be run once on the
|
|
system. *Make sure you aren't using an NVMe device as your boot device.*
|
|
|
|
~~~{.sh}
|
|
sudo scripts/setup.sh
|
|
~~~
|
|
|
|
To rebind devices back to the kernel, you can run
|
|
|
|
~~~{.sh}
|
|
sudo scripts/setup.sh reset
|
|
~~~
|
|
|
|
By default, the script allocates 2048MB of hugepages. To change this number,
|
|
specify HUGEMEM (in MB) as follows:
|
|
|
|
~~~{.sh}
|
|
sudo HUGEMEM=4096 scripts/setup.sh
|
|
~~~
|
|
|
|
On Linux machines HUGEMEM will be rounded up to system-default huge page
|
|
size boundary.
|
|
|
|
Example code is located in the examples directory. The examples are compiled
|
|
automatically as part of the build process. Simply call any of the examples
|
|
with no arguments to see the help output. If your system has its IOMMU
|
|
enabled you can run the examples as your regular user. If it doesn't, you'll
|
|
need to run as a privileged user (root).
|
|
|
|
A good example to start with is `examples/nvme/identify`, which prints
|
|
out information about all of the NVMe devices on your system.
|
|
|
|
Larger, more fully functional applications are available in the `app`
|
|
directory. This includes the iSCSI and NVMe-oF target.
|