val = bpf_map_lookup_elem(&values, &key); if (val)
*val = count; else
bpf_map_update_elem(&values, &key, &count, BPF_NOEXIST);
return 0;
}
/* * Since *_map_lookup_elem can't be expected to trigger bpf programs * due to potential deadlocks (bpf_disable_instrumentation), this bpf * program will be attached to bpf_map_copy_value (which is called * from map_lookup_elem) and will only filter the hashtable type.
*/
SEC("kprobe/bpf_map_copy_value") int BPF_KPROBE(bpf_prog2, struct bpf_map *map)
{
u32 key = bpf_get_smp_processor_id(); struct bpf_perf_event_value *val, buf; enum bpf_map_type type; int error;
type = BPF_CORE_READ(map, map_type); if (type != BPF_MAP_TYPE_HASH) return 0;
error = bpf_perf_event_read_value(&counters, key, &buf, sizeof(buf)); if (error) return 0;
val = bpf_map_lookup_elem(&values2, &key); if (val)
*val = buf; else
bpf_map_update_elem(&values2, &key, &buf, BPF_NOEXIST);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.