Struct hwlocality::topology::builder::BuildFlags

source ·
pub struct BuildFlags(/* private fields */);
Expand description

Topology building configuration flags

Implementations§

source§

impl BuildFlags

source

pub const INCLUDE_DISALLOWED: Self = _

Detect the whole system, ignore reservations, include disallowed objects

Gather all online resources, even if some were disabled by the administrator. For instance, ignore Linux Cgroup/Cpusets and gather all processors and memory nodes. However offline PUs and NUMA nodes are still ignored.

When this flag is not set, PUs and NUMA nodes that are disallowed are not added to the topology. Parent objects (package, core, cache, etc.) are added only if some of their children are allowed. All existing PUs and NUMA nodes in the topology are allowed. Topology::allowed_cpuset() and Topology::allowed_nodeset() are equal to the root object cpuset and nodeset.

When this flag is set, the actual sets of allowed PUs and NUMA nodes are given by Topology::allowed_cpuset() and Topology::allowed_nodeset(). They may be smaller than the root object cpuset and nodeset.

If the current topology is exported to XML and reimported later, this flag should be set again in the reimported topology so that disallowed resources are reimported as well.

What additional objects could be detected with this flag depends on DiscoverySupport::disallowed_pu() and DiscoverySupport::disallowed_numa(), which can be checked after building the topology.

source

pub const ASSUME_THIS_SYSTEM: Self = _

Assume that the selected backend provides the topology for the system on which we are running

This forces Topology::is_this_system() to return true, i.e. makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success.

Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior.

This can be used for efficiency reasons to first detect the topology once, save it to an XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind.

source

pub const GET_ALLOWED_RESOURCES_FROM_THIS_SYSTEM: Self = _

Get the set of allowed resources from the local operating system even if the topology was loaded from XML or synthetic description

If the topology was loaded from XML or from a synthetic string, restrict it by applying the current process restrictions such as Linux Cgroup/Cpuset.

This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, while the running process is restricted to only parts of the machine.

If this flag is set, ASSUME_THIS_SYSTEM must also be set, since the loaded topology must match the underlying machine where restrictions will be gathered from.

Setting the environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES would result in the same behavior.

source

pub const IMPORT_SUPPORT: Self = _

Available on crate feature hwloc-2_3_0 only.

Import support from the imported topology

When importing a XML topology from a remote machine, binding is disabled by default (see ASSUME_THIS_SYSTEM). This disabling is also marked by putting zeroes in the corresponding supported feature bits reported by Topology::feature_support().

This flag allows you to actually import support bits from the remote machine. It also sets the MiscSupport::imported() support flag. If the imported XML did not contain any support information (exporter hwloc is too old), this flag is not set.

Note that these supported features are only relevant for the hwloc installation that actually exported the XML topology (it may vary with the operating system, or with how hwloc was compiled).

Note that setting this flag however does not enable binding for the locally imported hwloc topology, it only reports what the remote hwloc and machine support.

source

pub const RESTRICT_CPU_TO_THIS_PROCESS: Self = _

Available on crate feature hwloc-2_5_0 only.

Do not consider resources outside of the process CPU binding

If the binding of the process is limited to a subset of cores, ignore the other cores during discovery.

The resulting topology is identical to what a call to TopologyEditor::restrict() would generate, but this flag also prevents hwloc from ever touching other resources during the discovery.

This flag especially tells the x86 backend to never temporarily rebind a thread on any excluded core. This is useful on Windows because such temporary rebinding can change the process binding. Another use-case is to avoid cores that would not be able to perform the hwloc discovery anytime soon because they are busy executing some high-priority real-time tasks.

If process CPU binding is not supported, the thread CPU binding is considered instead if supported, or the flag is ignored.

This flag requires ASSUME_THIS_SYSTEM as well since binding support is required.

source

pub const RESTRICT_MEMORY_TO_THIS_PROCESS: Self = _

Available on crate feature hwloc-2_5_0 only.

Do not consider resources outside of the process memory binding

If the binding of the process is limited to a subset of NUMA nodes, ignore the other NUMA nodes during discovery.

The resulting topology is identical to what a call to TopologyEditor::restrict() would generate, but this flag also prevents hwloc from ever touching other resources during the discovery.

This flag is meant to be used together with RESTRICT_CPU_TO_THIS_PROCESS when both cores and NUMA nodes should be ignored outside of the process binding.

If process memory binding is not supported, the thread memory binding is considered instead if supported, or the flag is ignored.

This flag requires ASSUME_THIS_SYSTEM as well since binding support is required.

source

pub const DONT_CHANGE_BINDING: Self = _

Available on crate feature hwloc-2_5_0 only.

Do not ever modify the process or thread binding during discovery

This flag disables all hwloc discovery steps that require a change of the process or thread binding. This currently only affects the x86 backend which gets entirely disabled.

This is useful when a Topology is loaded while the application also creates additional threads or modifies the binding.

This flag is also a strict way to make sure the process binding will not change to due thread binding changes on Windows (see RESTRICT_CPU_TO_THIS_PROCESS).

source

pub const IGNORE_DISTANCES: Self = _

Available on crate feature hwloc-2_8_0 only.

Ignore distance information from the operating system (and from XML)

Distances will not be used for grouping TopologyObjects.

source

pub const IGNORE_MEMORY_ATTRIBUTES: Self = _

Available on crate feature hwloc-2_8_0 only.

Ignore memory attribues from the operating system (and from XML)

source

pub const IGNORE_CPU_KINDS: Self = _

Available on crate feature hwloc-2_8_0 only.

Ignore CPU kind information from the operating system (and from XML)

source§

impl BuildFlags

source

pub const fn empty() -> Self

Get a flags value with all bits unset.

source

pub const fn all() -> Self

Get a flags value with all known bits set.

source

pub const fn bits(&self) -> hwloc_topology_flags_e

Get the underlying bits value.

The returned value is exactly the bits set in this flags value.

source

pub const fn from_bits(bits: hwloc_topology_flags_e) -> Option<Self>

Convert from a bits value.

This method will return None if any unknown bits are set.

source

pub const fn from_bits_truncate(bits: hwloc_topology_flags_e) -> Self

Convert from a bits value, unsetting any unknown bits.

source

pub const fn from_bits_retain(bits: hwloc_topology_flags_e) -> Self

Convert from a bits value exactly.

source

pub fn from_name(name: &str) -> Option<Self>

Get a flags value with the bits of a flag with the given name set.

This method will return None if name is empty or doesn’t correspond to any named flag.

source

pub const fn is_empty(&self) -> bool

Whether all bits in this flags value are unset.

source

pub const fn is_all(&self) -> bool

Whether all known bits in this flags value are set.

source

pub const fn intersects(&self, other: Self) -> bool

Whether any set bits in a source flags value are also set in a target flags value.

source

pub const fn contains(&self, other: Self) -> bool

Whether all set bits in a source flags value are also set in a target flags value.

source

pub fn insert(&mut self, other: Self)

The bitwise or (|) of the bits in two flags values.

source

pub fn remove(&mut self, other: Self)

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. remove won’t truncate other, but the ! operator will.

source

pub fn toggle(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in two flags values.

source

pub fn set(&mut self, other: Self, value: bool)

Call insert when value is true or remove when value is false.

source

pub const fn intersection(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.

source

pub const fn union(self, other: Self) -> Self

The bitwise or (|) of the bits in two flags values.

source

pub const fn difference(self, other: Self) -> Self

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won’t truncate other, but the ! operator will.

source

pub const fn symmetric_difference(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.

source

pub const fn complement(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.

source§

impl BuildFlags

source

pub const fn iter(&self) -> Iter<BuildFlags>

Yield a set of contained flags values.

Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.

source

pub const fn iter_names(&self) -> IterNames<BuildFlags>

Yield a set of contained named flags values.

This method is like iter, except only yields bits in contained named flags. Any unknown bits, or bits not corresponding to a contained flag will not be yielded.

Trait Implementations§

source§

impl Arbitrary for BuildFlags

Available on crate feature proptest only.
§

type Parameters = ()

The type of parameters that arbitrary_with accepts for configuration of the generated Strategy. Parameters must implement Default.
§

type Strategy = Map<Subsequence<BuildFlags>, fn(_: Vec<BuildFlags>) -> BuildFlags>

The type of Strategy used to generate values of type Self.
source§

fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy

Generates a Strategy for producing arbitrary values of type the implementing type (Self). The strategy is passed the arguments given in args. Read more
source§

fn arbitrary() -> Self::Strategy

Generates a Strategy for producing arbitrary values of type the implementing type (Self). Read more
source§

impl Binary for BuildFlags

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl BitAnd for BuildFlags

source§

fn bitand(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.

§

type Output = BuildFlags

The resulting type after applying the & operator.
source§

impl BitAndAssign for BuildFlags

source§

fn bitand_assign(&mut self, other: Self)

The bitwise and (&) of the bits in two flags values.

source§

impl BitOr for BuildFlags

source§

fn bitor(self, other: BuildFlags) -> Self

The bitwise or (|) of the bits in two flags values.

§

type Output = BuildFlags

The resulting type after applying the | operator.
source§

impl BitOrAssign for BuildFlags

source§

fn bitor_assign(&mut self, other: Self)

The bitwise or (|) of the bits in two flags values.

source§

impl BitXor for BuildFlags

source§

fn bitxor(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.

§

type Output = BuildFlags

The resulting type after applying the ^ operator.
source§

impl BitXorAssign for BuildFlags

source§

fn bitxor_assign(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in two flags values.

source§

impl Clone for BuildFlags

source§

fn clone(&self) -> BuildFlags

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BuildFlags

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for BuildFlags

source§

fn default() -> BuildFlags

Returns the “default value” for a type. Read more
source§

impl Extend<BuildFlags> for BuildFlags

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

The bitwise or (|) of the bits in each flags value.

source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl Flags for BuildFlags

source§

const FLAGS: &'static [Flag<BuildFlags>] = _

The set of defined flags.
§

type Bits = u32

The underlying bits type.
source§

fn bits(&self) -> hwloc_topology_flags_e

Get the underlying bits value. Read more
source§

fn from_bits_retain(bits: hwloc_topology_flags_e) -> BuildFlags

Convert from a bits value exactly.
source§

fn empty() -> Self

Get a flags value with all bits unset.
source§

fn all() -> Self

Get a flags value with all known bits set.
source§

fn from_bits(bits: Self::Bits) -> Option<Self>

Convert from a bits value. Read more
source§

fn from_bits_truncate(bits: Self::Bits) -> Self

Convert from a bits value, unsetting any unknown bits.
source§

fn from_name(name: &str) -> Option<Self>

Get a flags value with the bits of a flag with the given name set. Read more
source§

fn iter(&self) -> Iter<Self>

Yield a set of contained flags values. Read more
source§

fn iter_names(&self) -> IterNames<Self>

Yield a set of contained named flags values. Read more
source§

fn is_empty(&self) -> bool

Whether all bits in this flags value are unset.
source§

fn is_all(&self) -> bool

Whether all known bits in this flags value are set.
source§

fn intersects(&self, other: Self) -> bool
where Self: Sized,

Whether any set bits in a source flags value are also set in a target flags value.
source§

fn contains(&self, other: Self) -> bool
where Self: Sized,

Whether all set bits in a source flags value are also set in a target flags value.
source§

fn insert(&mut self, other: Self)
where Self: Sized,

The bitwise or (|) of the bits in two flags values.
source§

fn remove(&mut self, other: Self)
where Self: Sized,

The intersection of a source flags value with the complement of a target flags value (&!). Read more
source§

fn toggle(&mut self, other: Self)
where Self: Sized,

The bitwise exclusive-or (^) of the bits in two flags values.
source§

fn set(&mut self, other: Self, value: bool)
where Self: Sized,

Call Flags::insert when value is true or Flags::remove when value is false.
source§

fn intersection(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.
source§

fn union(self, other: Self) -> Self

The bitwise or (|) of the bits in two flags values.
source§

fn difference(self, other: Self) -> Self

The intersection of a source flags value with the complement of a target flags value (&!). Read more
source§

fn symmetric_difference(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.
source§

fn complement(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.
source§

impl FromIterator<BuildFlags> for BuildFlags

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

The bitwise or (|) of the bits in each flags value.

source§

impl Hash for BuildFlags

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl IntoIterator for BuildFlags

§

type Item = BuildFlags

The type of the elements being iterated over.
§

type IntoIter = Iter<BuildFlags>

Which kind of iterator are we turning this into?
source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
source§

impl LowerHex for BuildFlags

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Not for BuildFlags

source§

fn not(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.

§

type Output = BuildFlags

The resulting type after applying the ! operator.
source§

impl Octal for BuildFlags

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for BuildFlags

source§

fn eq(&self, other: &BuildFlags) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PublicFlags for BuildFlags

§

type Primitive = u32

The type of the underlying storage.
§

type Internal = InternalBitFlags

The type of the internal field on the generated flags type.
source§

impl Sub for BuildFlags

source§

fn sub(self, other: Self) -> Self

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won’t truncate other, but the ! operator will.

§

type Output = BuildFlags

The resulting type after applying the - operator.
source§

impl SubAssign for BuildFlags

source§

fn sub_assign(&mut self, other: Self)

The intersection of a source flags value with the complement of a target flags value (&!).

This method is not equivalent to self & !other when other has unknown bits set. difference won’t truncate other, but the ! operator will.

source§

impl UpperHex for BuildFlags

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Copy for BuildFlags

source§

impl Eq for BuildFlags

source§

impl StructuralPartialEq for BuildFlags

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V