Struct aya::maps::hash_map::PerCpuHashMap [−][src]
Expand description
Similar to HashMap
but each CPU holds a separate value for a given key. Tipically used to
minimize lock contention in eBPF programs.
This type can be used with eBPF maps of type BPF_MAP_TYPE_PERCPU_HASH
and
BPF_MAP_TYPE_LRU_PERCPU_HASH
.
Examples
use aya::maps::PerCpuHashMap; use std::convert::TryFrom; const CPU_IDS: u8 = 1; const WAKEUPS: u8 = 2; let mut hm = PerCpuHashMap::<_, u8, u32>::try_from(bpf.map("COUNTERS")?)?; let cpu_ids = unsafe { hm.get(&CPU_IDS, 0)? }; let wakeups = unsafe { hm.get(&WAKEUPS, 0)? }; for (cpu_id, wakeups) in cpu_ids.iter().zip(wakeups.iter()) { println!("cpu {} woke up {} times", cpu_id, wakeups); }
Implementations
Returns a slice of values - one for each CPU - associated with the key.
An iterator visiting all key-value pairs in arbitrary order. The
iterator item type is Result<(K, PerCpuValues<V>), MapError>
.
Inserts a slice of values - one for each CPU - for the given key.
Examples
use aya::maps::{PerCpuHashMap, PerCpuValues}; use aya::util::nr_cpus; use std::convert::TryFrom; const RETRIES: u8 = 1; let mut hm = PerCpuHashMap::<_, u8, u32>::try_from(bpf.map_mut("PER_CPU_STORAGE")?)?; hm.insert( RETRIES, PerCpuValues::try_from(vec![3u32; nr_cpus()?])?, 0, )?;
Trait Implementations
Auto Trait Implementations
impl<T, K, V> RefUnwindSafe for PerCpuHashMap<T, K, V> where
K: RefUnwindSafe,
T: RefUnwindSafe,
V: RefUnwindSafe,
impl<T, K, V> Send for PerCpuHashMap<T, K, V> where
K: Send,
T: Send,
V: Send,
impl<T, K, V> Sync for PerCpuHashMap<T, K, V> where
K: Sync,
T: Sync,
V: Sync,
impl<T, K, V> Unpin for PerCpuHashMap<T, K, V> where
K: Unpin,
T: Unpin,
V: Unpin,
impl<T, K, V> UnwindSafe for PerCpuHashMap<T, K, V> where
K: UnwindSafe,
T: UnwindSafe,
V: UnwindSafe,