1*6e1e4a9dSMykyta Yatsenko // SPDX-License-Identifier: GPL-2.0 2*6e1e4a9dSMykyta Yatsenko #include <vmlinux.h> 3*6e1e4a9dSMykyta Yatsenko #include <bpf/bpf_helpers.h> 4*6e1e4a9dSMykyta Yatsenko 5*6e1e4a9dSMykyta Yatsenko struct { 6*6e1e4a9dSMykyta Yatsenko __uint(type, BPF_MAP_TYPE_LRU_HASH); 7*6e1e4a9dSMykyta Yatsenko __uint(max_entries, 64); 8*6e1e4a9dSMykyta Yatsenko __type(key, __u32); 9*6e1e4a9dSMykyta Yatsenko __type(value, __u64); 10*6e1e4a9dSMykyta Yatsenko } lru_map SEC(".maps"); 11*6e1e4a9dSMykyta Yatsenko 12*6e1e4a9dSMykyta Yatsenko int hits; 13*6e1e4a9dSMykyta Yatsenko 14*6e1e4a9dSMykyta Yatsenko SEC("perf_event") 15*6e1e4a9dSMykyta Yatsenko int oncpu(void *ctx) 16*6e1e4a9dSMykyta Yatsenko { 17*6e1e4a9dSMykyta Yatsenko /* 18*6e1e4a9dSMykyta Yatsenko * Key range deliberately wider than max_entries to force LRU 19*6e1e4a9dSMykyta Yatsenko * eviction on every other update. 20*6e1e4a9dSMykyta Yatsenko */ 21*6e1e4a9dSMykyta Yatsenko __u32 key = bpf_get_prandom_u32() % 128; 22*6e1e4a9dSMykyta Yatsenko bool do_update = bpf_get_prandom_u32() & 1; 23*6e1e4a9dSMykyta Yatsenko __u64 val = 1; 24*6e1e4a9dSMykyta Yatsenko 25*6e1e4a9dSMykyta Yatsenko if (do_update) 26*6e1e4a9dSMykyta Yatsenko bpf_map_update_elem(&lru_map, &key, &val, BPF_ANY); 27*6e1e4a9dSMykyta Yatsenko else 28*6e1e4a9dSMykyta Yatsenko bpf_map_delete_elem(&lru_map, &key); 29*6e1e4a9dSMykyta Yatsenko __sync_fetch_and_add(&hits, 1); 30*6e1e4a9dSMykyta Yatsenko return 0; 31*6e1e4a9dSMykyta Yatsenko } 32*6e1e4a9dSMykyta Yatsenko 33*6e1e4a9dSMykyta Yatsenko char _license[] SEC("license") = "GPL"; 34