• Yafang Shao's avatar
    bpf: hashtab memory usage · 304849a2
    Yafang Shao authored
    htab_map_mem_usage() is introduced to calculate hashmap memory usage. In
    this helper, some small memory allocations are ignore, as their size is
    quite small compared with the total size. The inner_map_meta in
    hash_of_map is also ignored.
    
    The result for hashtab as follows,
    
    - before this change
    1: hash  name count_map  flags 0x1  <<<< no prealloc, fully set
            key 16B  value 24B  max_entries 1048576  memlock 41943040B
    2: hash  name count_map  flags 0x1  <<<< no prealloc, none set
            key 16B  value 24B  max_entries 1048576  memlock 41943040B
    3: hash  name count_map  flags 0x0  <<<< prealloc
            key 16B  value 24B  max_entries 1048576  memlock 41943040B
    
    The memlock is always a fixed size whatever it is preallocated or
    not, and whatever the count of allocated elements is.
    
    - after this change
    1: hash  name count_map  flags 0x1    <<<< non prealloc, fully set
            key 16B  value 24B  max_entries 1048576  memlock 117441536B
    2: hash  name count_map  flags 0x1    <<<< non prealloc, non set
            key 16B  value 24B  max_entries 1048576  memlock 16778240B
    3: hash  name count_map  flags 0x0    <<<< prealloc
            key 16B  value 24B  max_entries 1048576  memlock 109056000B
    
    The memlock now is hashtab actually allocated.
    
    The result for percpu hash map as follows,
    - before this change
    4: percpu_hash  name count_map  flags 0x0       <<<< prealloc
            key 16B  value 24B  max_entries 1048576  memlock 822083584B
    5: percpu_hash  name count_map  flags 0x1       <<<< no prealloc
            key 16B  value 24B  max_entries 1048576  memlock 822083584B
    
    - after this change
    4: percpu_hash  name count_map  flags 0x0
            key 16B  value 24B  max_entries 1048576  memlock 897582080B
    5: percpu_hash  name count_map  flags 0x1
            key 16B  value 24B  max_entries 1048576  memlock 922748736B
    
    At worst, the difference can be 10x, for example,
    - before this change
    6: hash  name count_map  flags 0x0
            key 4B  value 4B  max_entries 1048576  memlock 8388608B
    
    - after this change
    6: hash  name count_map  flags 0x0
            key 4B  value 4B  max_entries 1048576  memlock 83889408B
    Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
    Acked-by: default avatarHou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20230305124615.12358-4-laoar.shao@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    304849a2
hashtab.c 67.8 KB