Hi, On 7/4/2023 11:02 PM, Anton Protopopov wrote: > On Tue, Jul 04, 2023 at 10:41:10PM +0800, Hou Tao wrote: >> Hi, >> >> On 6/30/2023 4:25 PM, Anton Protopopov wrote: >>> Add a new map test, map_percpu_stats.c, which is checking the correctness of >>> map's percpu elements counters. For supported maps the test upserts a number >>> of elements, checks the correctness of the counters, then deletes all the >>> elements and checks again that the counters sum drops down to zero. >>> >>> The following map types are tested: >>> >>> * BPF_MAP_TYPE_HASH, BPF_F_NO_PREALLOC >>> * BPF_MAP_TYPE_PERCPU_HASH, BPF_F_NO_PREALLOC >>> * BPF_MAP_TYPE_HASH, >>> * BPF_MAP_TYPE_PERCPU_HASH, >>> * BPF_MAP_TYPE_LRU_HASH >>> * BPF_MAP_TYPE_LRU_PERCPU_HASH >> A test for BPF_MAP_TYPE_HASH_OF_MAPS is also needed. We could also exercise the test for LRU map with BPF_F_NO_COMMON_LRU. > SNIP >>> diff --git a/tools/testing/selftests/bpf/map_tests/map_percpu_stats.c b/tools/testing/selftests/bpf/map_tests/map_percpu_stats.c >>> new file mode 100644 >>> index 000000000000..5b45af230368 >>> --- /dev/null >>> +++ b/tools/testing/selftests/bpf/map_tests/map_percpu_stats.c >>> @@ -0,0 +1,336 @@ >>> +// SPDX-License-Identifier: GPL-2.0 >>> +/* Copyright (c) 2023 Isovalent */ >>> + >>> +#include <errno.h> >>> +#include <unistd.h> >>> +#include <pthread.h> >>> + >>> +#include <bpf/bpf.h> >>> +#include <bpf/libbpf.h> >>> + >>> +#include <bpf_util.h> >>> +#include <test_maps.h> >>> + >>> +#include "map_percpu_stats.skel.h" >>> + >>> +#define MAX_ENTRIES 16384 >>> +#define N_THREADS 37 >> Why 37 thread is needed here ? Does a small number of threads work as well ? > This was used to evict more elements from LRU maps when they are full. I see. But in my understanding, for the global LRU list, the eviction (the invocation of htab_lru_map_delete_node) will be possible if the free element is less than LOCAL_FREE_TARGET(128) * nr_running_cpus. Now the number of free elements is 1000 as defined in __test(), the number of vCPU is 8 in my local VM setup (BPF CI also uses 8 vCPUs) and it is hard to trigger the eviction because 8 * 128 is roughly equal with 1000. So I suggest to decrease the number of free elements to 512 and the number of threads to 8, or adjust the number of running thread and free elements according to the number of online CPUs.