Hermes  0.9.5-beta
Hierarchical Distributed I/O Buffering System
hermes::GlobalSystemViewState Struct Reference

#include <metadata_management.h>

Collaboration diagram for hermes::GlobalSystemViewState:

Public Attributes

u64 num_targets
 
int num_devices
 
u64 capacities [kMaxDevices]
 
std::atomic< u64 > * bytes_available
 
Thresholds bo_capacity_thresholds [kMaxDevices]
 

Detailed Description

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.

Member Data Documentation

◆ num_targets

u64 hermes::GlobalSystemViewState::num_targets

The total number of buffering Targets in the system

◆ num_devices

int hermes::GlobalSystemViewState::num_devices

The number of devices per node

◆ capacities

u64 hermes::GlobalSystemViewState::capacities[kMaxDevices]

capacities of devices

◆ bytes_available

std::atomic<u64>* hermes::GlobalSystemViewState::bytes_available

The remaining capacity of each Target in the system

◆ bo_capacity_thresholds

Thresholds hermes::GlobalSystemViewState::bo_capacity_thresholds[kMaxDevices]

The min and max capacity thresholds (percentage) for each Target in the system


The documentation for this struct was generated from the following file: