-
Notifications
You must be signed in to change notification settings - Fork 18
/
hermes_server_default.yaml
196 lines (165 loc) · 6.19 KB
/
hermes_server_default.yaml
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
194
195
196
# Example Hermes configuration file
### Define properties of the storage devices
devices:
# The name of the device.
# It can be whatever the user wants, there are no special names
ram:
# The mount point of each device. RAM should be the empty string. For block
# devices, this is the directory where Hermes will create buffering files. For
# object storage or cloud targets, this will be a url.
mount_point: ""
# The maximum buffering capacity in MiB of each device.
capacity: 50MB
# The size of the smallest available buffer in KiB. In general this should be
# the page size of your system for byte addressable storage, and the block size
# of the storage device for block addressable storage.
block_size: 4KB
# The number of blocks (the size of which is chosen in block_sizes_kb) that each
# device should contain for each slab (controlled by num_slabs). This allows for
# precise control of the distibution of buffer sizes.
slab_sizes: [ 4KB, 16KB, 64KB, 1MB ]
# The maximum theoretical bandwidth (as advertised by the manufacturer) in
# Possible units: KBps, MBps, GBps
bandwidth: 6000MBps
# The latency of each device (as advertised by the manufacturer).
# Possible units: ns, us, ms, s
latency: 15us
# For each device, indicate '1' if it is shared among nodes (e.g., burst
# buffers), or '0' if it is per node (e.g., local NVMe).
is_shared_device: false
# For each device, the minimum and maximum percent capacity threshold at which
# the BufferOrganizer will trigger. Decreasing the maximum thresholds will cause
# the BufferOrganizer to move data to lower devices, making more room in faster
# devices (ideal for write-heavy workloads). Conversely, increasing the minimum
# threshold will cause data to be moved from slower devices into faster devices
# (ideal for read-heavy workloads). For example, a maximum capacity threshold of
# 0.8 would have the effect of always keeping 20% of the device's space free for
# incoming writes. Conversely, a minimum capacity threshold of 0.3 would ensure
# that the device is always at least 30% occupied.
borg_capacity_thresh: [0.0, 1.0]
nvme:
mount_point: "./"
capacity: 100MB
block_size: 4KB
slab_sizes: [ 4KB, 16KB, 64KB, 1MB ]
bandwidth: 1GBps
latency: 600us
is_shared_device: false
borg_capacity_thresh: [ 0.0, 1.0 ]
ssd:
mount_point: "./"
capacity: 100MB
block_size: 4KB
slab_sizes: [ 4KB, 16KB, 64KB, 1MB ]
bandwidth: 500MBps
latency: 1200us
is_shared_device: false
borg_capacity_thresh: [ 0.0, 1.0 ]
pfs:
mount_point: "./"
capacity: 100MB
block_size: 64KB # The stripe size of PFS
slab_sizes: [ 4KB, 16KB, 64KB, 1MB ]
bandwidth: 100MBps # Per-device bandwidth
latency: 200ms
is_shared_device: true
borg_capacity_thresh: [ 0.0, 1.0 ]
### Define properties of the BORG
buffer_organizer:
# The number of threads used in the background organization of internal Hermes buffers.
num_threads: 1
# Interval (ms) where blobs are checked for flushing
flush_period: 1024
# Interval (ms) where blobs are checked for re-organization
blob_reorg_period: 1024
## What does "recently accessed" mean?
# Time when score is equal to 1 (seconds)
recency_min: 0
# Time when score is equal to 0 (seconds)
recency_max: 60
## What does "frequently accessed" mean?
# Number of accesses for score to be equal to 1 (count)
freq_max: 15
# Number of accesses for score to be equal to 0 (count)
freq_min: 0
### Define the default data placement policy
dpe:
# Choose Random, RoundRobin, or MinimizeIoTime
default_placement_policy: "MinimizeIoTime"
# If true (1) the RoundRobin placement policy algorithm will split each Blob
# into a random number of smaller Blobs.
default_rr_split: 0
### Define I/O tracing properties
tracing:
enabled: false
output: ""
### Define prefetcher properties
prefetch:
enabled: false
io_trace_path: ""
apriori_schema_path: ""
epoch_ms: 50
is_mpi: false
### Define mdm properties
mdm:
# This represents the number of blobs and buckets before collisions start
# to happen in the unordered_map tables.
est_blob_count: 100000
est_bucket_count: 100000
est_num_traits: 256
# The interval in milliseconds at which to update the global system view.
system_view_state_update_interval_ms: 1000
### Runtime orchestration settings
work_orchestrator:
# The max number of dedicated worker threads
max_dworkers: 4
# The max number of overlapping threads
max_oworkers: 32
# The max number of total dedicated cores
owork_per_core: 32
### Queue Manager settings
queue_manager:
# The default depth of allocated queues
queue_depth: 100000
# The maximum number of lanes per queue
max_lanes: 16
# The maximum number of queues
max_queues: 1024
# The shared memory allocator to use
shm_allocator: kScalablePageAllocator
# The name of the shared memory region to create
shm_name: "hrun_shm"
# The size of the shared memory region to allocate for general data structures
shm_size: 0g
# The size of the shared memory to allocate for data buffers
data_shm_size: 4g
### Define properties of RPCs
rpc:
# A path to a file containing a list of server names, 1 per line. If your
# servers are named according to a pattern (e.g., server-1, server-2, etc.),
# prefer the `rpc_server_base_name` and `rpc_host_number_range` options. If this
# option is not empty, it will override anything in `rpc_server_base_name`.
host_file: ""
# Host names can be defined using the following syntax:
# ares-comp-[0-9]-40g will convert to ares-comp-0-40g, ares-comp-1-40g, ...
# ares-comp[00-09] will convert to ares-comp-00, ares-comp-01, ...
host_names: ["localhost"]
# The RPC protocol. This must come from the documentation of the specific RPC
# library in use.
protocol: "ofi+sockets"
# RPC domain name for verbs transport. Blank for tcp.
domain: ""
# Desired RPC port number.
port: 8080
# The number of handler threads for each RPC server.
num_threads: 32
### Task Registry
task_registry: [
'hermes_mdm',
'hermes_blob_mdm',
'hermes_bucket_mdm',
'hermes_data_op',
'data_stager',
'posix_bdev',
'ram_bdev'
]