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
.
Minimum kernel version
The minimum kernel version required to use this feature is 4.6.
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, )?;