• Martin KaFai Lau's avatar
    bpf: Add percpu LRU list · 961578b6
    Martin KaFai Lau authored
    Instead of having a common LRU list, this patch allows a
    percpu LRU list which can be selected by specifying a map
    attribute.  The map attribute will be added in the later
    patch.
    
    While the common use case for LRU is #reads >> #updates,
    percpu LRU list allows bpf prog to absorb unusual #updates
    under pathological case (e.g. external traffic facing machine which
    could be under attack).
    
    Each percpu LRU is isolated from each other.  The LRU nodes (including
    free nodes) cannot be moved across different LRU Lists.
    
    Here are the update performance comparison between
    common LRU list and percpu LRU list (the test code is
    at the last patch):
    
    [root@kerneltest003.31.prn1 ~]# for i in 1 4 8; do echo -n "$i cpus: "; \
    ./map_perf_test 16 $i | awk '{r += $3}END{print r " updates"}'; done
     1 cpus: 2934082 updates
     4 cpus: 7391434 updates
     8 cpus: 6500576 updates
    
    [root@kerneltest003.31.prn1 ~]# for i in 1 4 8; do echo -n "$i cpus: "; \
    ./map_perf_test 32 $i | awk '{r += $3}END{printr " updates"}'; done
      1 cpus: 2896553 updates
      4 cpus: 9766395 updates
      8 cpus: 17460553 updates
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    961578b6
bpf_lru_list.c 17.6 KB