23 #ifndef STORAGE_TOPOLOGY_H 24 #define STORAGE_TOPOLOGY_H 27 #include <libxml/tree.h> 31 #include "storage/Utils/Region.h" 32 #include "storage/Utils/Exception.h" 38 enum class AlignPolicy
40 ALIGN_END, KEEP_END, KEEP_SIZE
62 Topology(
long alignment_offset,
unsigned long optimal_io_size);
68 long get_alignment_offset()
const;
69 void set_alignment_offset(
long alignment_offset);
71 unsigned long get_optimal_io_size()
const;
72 void set_optimal_io_size(
unsigned long optimal_io_size);
74 unsigned long get_minimal_grain()
const;
75 void set_minimal_grain(
unsigned long minimal_grain);
80 unsigned long calculate_grain()
const;
86 bool can_be_aligned(
const Region& region, AlignPolicy align_policy)
const;
93 Region align(
const Region& region, AlignPolicy align_policy = AlignPolicy::ALIGN_END)
const;
95 bool operator==(
const Topology& rhs)
const;
96 bool operator!=(
const Topology& rhs)
const;
105 const Impl& get_impl()
const;
107 friend bool getChildValue(
const xmlNode* node,
const char* name,
Topology& topology);
108 friend void setChildValue(xmlNode* node,
const char* name,
const Topology& topology);
112 const std::unique_ptr<Impl> impl;
A start/length pair with a block size.
Definition: Region.h:71
std::ostream & operator<<(std::ostream &str, const CodeLocation &obj)
CodeLocation stream output.
Base class for storage exceptions.
Definition: Exception.h:113
A class to calculate partition alignment based on hardware topology.
Definition: Topology.h:57
The storage namespace.
Definition: Actiongraph.h:36
Definition: Topology.h:44