diff options
| author | Alexei Starovoitov <[email protected]> | 2016-02-01 22:39:53 -0800 |
|---|---|---|
| committer | David S. Miller <[email protected]> | 2016-02-06 03:34:35 -0500 |
| commit | 824bd0ce6c7c43a9e1e210abf124958e54d88342 (patch) | |
| tree | 10d1841e462152a97c3d855f17568684d5246dd0 /tools/perf/scripts/python/futex-contention.py | |
| parent | ba905f5e2f63d86ed4cfbd3d9096fb28d156f1ee (diff) | |
bpf: introduce BPF_MAP_TYPE_PERCPU_HASH map
Introduce BPF_MAP_TYPE_PERCPU_HASH map type which is used to do
accurate counters without need to use BPF_XADD instruction which turned
out to be too costly for high-performance network monitoring.
In the typical use case the 'key' is the flow tuple or other long
living object that sees a lot of events per second.
bpf_map_lookup_elem() returns per-cpu area.
Example:
struct {
u32 packets;
u32 bytes;
} * ptr = bpf_map_lookup_elem(&map, &key);
/* ptr points to this_cpu area of the value, so the following
* increments will not collide with other cpus
*/
ptr->packets ++;
ptr->bytes += skb->len;
bpf_update_elem() atomically creates a new element where all per-cpu
values are zero initialized and this_cpu value is populated with
given 'value'.
Note that non-per-cpu hash map always allocates new element
and then deletes old after rcu grace period to maintain atomicity
of update. Per-cpu hash map updates element values in-place.
Signed-off-by: Alexei Starovoitov <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Diffstat (limited to 'tools/perf/scripts/python/futex-contention.py')
0 files changed, 0 insertions, 0 deletions