Hermes
0.9.5-beta
Hierarchical Distributed I/O Buffering System
|
#include <metadata_management.h>
Public Attributes | |
u64 | num_targets |
int | num_devices |
u64 | capacities [kMaxDevices] |
std::atomic< u64 > * | bytes_available |
Thresholds | bo_capacity_thresholds [kMaxDevices] |
A snapshot view of the entire system's Targets' available capacities.
This information is only stored on 1 node, designated by MetadataManager::global_system_view_state_node_id, and is only updated by 1 rank (the Hermes process on that node). Hence, it does not need to be stored in shared memory and we are able to use normal std containers. However, since multiple RPC handler threads can potentially update the bytes_available
field concurrently, we must not do any operations on the vector itself. We can only do operations on the atomics within. The vector is created in StartGlobalSystemViewStateUpdateThread, and thereafter we can only call functions on the individual atomics (e.g., bytes_available[i].fetch_add), which is thread safe.
u64 hermes::GlobalSystemViewState::num_targets |
The total number of buffering Targets in the system
int hermes::GlobalSystemViewState::num_devices |
The number of devices per node
u64 hermes::GlobalSystemViewState::capacities[kMaxDevices] |
capacities of devices
std::atomic<u64>* hermes::GlobalSystemViewState::bytes_available |
The remaining capacity of each Target in the system
Thresholds hermes::GlobalSystemViewState::bo_capacity_thresholds[kMaxDevices] |
The min and max capacity thresholds (percentage) for each Target in the system