From: Cong Wang <cong.wang@xxxxxxxxxxxxx> When a socket is added to a sockmap, sk_psock is allocated too as its sk_user_data, therefore it should be consider as an overhead of sockmap memory usage. Before this patch: 1: sockmap flags 0x0 key 4B value 4B max_entries 2 memlock 656B pids echo-sockmap(549) After this patch: 9: sockmap flags 0x0 key 4B value 4B max_entries 2 memlock 1824B pids echo-sockmap(568) Fixes: 73d2c61919e9 ("bpf, net: sock_map memory usage") Cc: Yafang Shao <laoar.shao@xxxxxxxxx> Cc: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> Cc: John Fastabend <john.fastabend@xxxxxxxxx> Signed-off-by: Cong Wang <cong.wang@xxxxxxxxxxxxx> --- net/core/sock_map.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/net/core/sock_map.c b/net/core/sock_map.c index 7c189c2e2fbf..22197e565ece 100644 --- a/net/core/sock_map.c +++ b/net/core/sock_map.c @@ -799,9 +799,17 @@ static void sock_map_fini_seq_private(void *priv_data) static u64 sock_map_mem_usage(const struct bpf_map *map) { + struct bpf_stab *stab = container_of(map, struct bpf_stab, map); u64 usage = sizeof(struct bpf_stab); + int i; usage += (u64)map->max_entries * sizeof(struct sock *); + + for (i = 0; i < stab->map.max_entries; i++) { + if (stab->sks[i]) + usage += sizeof(struct sk_psock); + } + return usage; } @@ -1412,7 +1420,7 @@ static u64 sock_hash_mem_usage(const struct bpf_map *map) u64 usage = sizeof(*htab); usage += htab->buckets_num * sizeof(struct bpf_shtab_bucket); - usage += atomic_read(&htab->count) * (u64)htab->elem_size; + usage += atomic_read(&htab->count) * ((u64)htab->elem_size + sizeof(struct sk_psock)); return usage; } -- 2.34.1