forked from Scalable-Key-Value/code
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
193 lines (125 loc) · 6.21 KB
/
README
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
0. CONTENT
1. configuration
2. compile
3. install
4. runtime env
5. troubleshooting
================
1. CONFIGURATION
SKV uses cmake to build libraries and executables. We require cmake
version 2.8.
After downloading the skv source (lets say to $HOME/skv), you create a
build directory (e.g. $HOME/skv_build).
Go into the build directory and start configuring the build:
$> cmake ../skv [OPTIONS]
We've prepared a few site-specific cmake files in CMake/Site/. These
files set essential paths and config options for a particular site. A
site could also be just your computer. You might want to look into
CMake/Site/pers_example.cmake. This file sets the path to the MPI
compilers. If you need different settings, you can either modify the
file directly or create your own and then run:
$> cmake ../skv -DSKV_SITE:STRING=<sitename>
Predefined sitenames are ykt, cscs, pers_example (the name of the file
in CMake/Site/ without the .cmake extension)
Alternatively, you can run:
$> ccmake ../skv
to start a gui-like cmake configuration tool that allows you to
set/adjust individual variables. You can set the SKV_SITE there and
configure.
Note on multi-configuration requirements, in case your environment
requires different build configurations (for example if you run
clients and servers on different architectures):
The cmake philosophy separates the build from the source. Therefore,
if you need multiple build configurations, you'd just create a new
build directory and configure the next/separate build in there.
================
2. COMPILE
If configuration was successful, stay in the build directory and run
$> gmake
to build SKV.
================
3. INSTALL
To install, run:
$> gmake install
You can also build packages for your Linux distribution by using
cpack. For example:
$> cpack -G RPM
will create an RPM that can be used to install SKV.
================
4. RUNTIME ENVIRONMENT
4.1 prerequisites and dependencies
Installation and setup of the following is not covered here:
* any MPI runtime env to start the server (and parallel clients if
applicable)
* SoftIWarp (siw) if you plan to run server and clients on
overlapping sets of nodes or nodes without InfiniBand or other
verbs providers installed
* an OFED-RDMA capable network and setup (alternative siw)
4.2 SKV runtime
* skv_server.conf: this file contains important configuration
information for server AND client. The search for the config file
is performed in the following order:
* command line parameter for the Server (-c <path+filename>)
* per-user config under ${HOME}/.skv_server.conf
* global config under /etc/skv_server.conf
the skv_install script installs an example copy as
<SKV_DIR>/etc/skv_server.conf The file contains descriptions of
each setting and should be self-explaining
* running the server:
* a single server can be run by just executing
<SKV_DIR>/bin/SKVServer [-h] [-c <configfile>]. If you want a
parallel server you need to use your preferred MPI program
launcher to kick it off. For example:
mpiexec -n 8 -f /etc/machinefile <SKV_DIR>/bin/SKVServer
* if everything works fine, you'll _not_ get back a prompt. You'll
see an SKVServer process running and /tmp/ (as of the defaults in
skv_server.conf) will contain several skv_files as described
below
* skv server files:
* skv_server.info; skv_machinefile: depending on the settings in
the config file, the file(s) contains a list of IP addresses and
port numbers indicating how to connect to the server on THIS
particular node. Each server instance replaces its entry with
the loopback address and can be reached via a proper siw
installation (this is only if the file is located on a local file
system, if the configuration points to a shared file system
between servers, the address is not replaced. Note that this will
cause problems for clients on BG/Q, because they need to connect
to the loopback address via siw)
* skv_store.N: is the mmapped file that contains the stored
data. Where N is the MPI rank of the server process. Currently,
all storage memory has to be pinned and thus the capacity per
node is limited by the amount of available memory and the memlock
limit of the user (see ulimit -l and /etc/security/limits...)
* *.FxLog logfiles of the server. Logging can be configured via the
make.conf(.in) file in the base directory of the SKV distribution
by commenting in/out the *_LOG lines.
* skv client:
* a client requires the skv_server.conf file in one of the places
described above. If the client program is written without
commandline support for the config file, you need to pick one of
the 2 latter options ($HOME or /etc). Every client needs access
to the server machinefile to learn about the location of the
servers. Since the server creates this file, there's no manual
intervention required if a client runs on a node that has a
server too. However, if the client runs on a distinct set of
nodes, this file has to be created manually or on a shared file
system (or by copying one of the server-created files and
replace the lines that have the loopback address with the proper
IP address). In every case, it is suggested to consider the
server-generated machinefile as a template.
* clients can be either MPI or non-MPI programs. Depending on
which library and compiler was used to create the executable.
The default build of SKV creates and installs MPI- and non-MPI
versions of the client libraries.
* a detailed description of the client API will be available
later. For now, unfortunately we can only point to the source
code examples and the file include/client/skv_client.hpp (for C++
clients) or lib/include/skv.h (for C clients).
================
5. TROUBLESHOOTING
* Large Scale runs fail because of open file limit exceeded
* when running SKV at a large scale - i.e. with many many clients,
it is important to observe the user's limit for open file
descriptors. The server needs at least one file desciptor per
client (unless clients connect via the forwarder option).