• Magnus Karlsson's avatar
    libbpf: optimize barrier for XDP socket rings · 2c5935f1
    Magnus Karlsson authored
    The full memory barrier in the XDP socket rings on the consumer side
    between the load of the data and the store of the consumer ring is
    there to protect the store from being executed before the load of the
    data. If this was allowed to happen, the producer might overwrite the
    data field with a new entry before the consumer got the chance to read
    it.
    
    On x86, stores are guaranteed not to be reordered with older loads, so
    it does not need a full memory barrier here. A compile time barrier
    would be enough. This patch introdcues a new primitive in
    libbpf_util.h that implements a new barrier type (libbpf_smp_rwmb)
    hindering stores to be reordered with older loads. It is then used in
    the XDP socket ring access code in libbpf to improve performance.
    Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    2c5935f1
libbpf_util.h 2.05 KB