• Maor Gottlieb's avatar
    net/mlx5: Support multiple updates of steering rules in parallel · bd71b08e
    Maor Gottlieb authored
    Most of the time spent on adding new flow steering rule
    is executing the firmware command.
    The most common action is adding a new flow steering entry.
    In order to enhance the update rate we parallelize the
    commands by doing the following:
    
    1) Replace the mutex lock with readers-writers semaphore and take
    the write lock only when necessary (e.g. allocating a new flow
    table entry index or adding a node to the parent's children list).
    When we try to find a suitable child in the parent's children list
    (e.g. search for flow group with the same match_criteria of the rule)
    then we only take the read lock.
    
    2) Add versioning mechanism - each steering entity (FT, FG, FTE, DST)
    will have an incremental version. The version is increased when the
    entity is changed (e.g. when a new FTE was added to FG - the FG's
    version is increased).
    Versioning is used in order to determine if the last traverse of an
    entity's children is valid or a rescan under write lock is required.
    
    This support improves the insertion rate of steering rules
    from ~5k/sec to ~40k/sec.
    Signed-off-by: default avatarMaor Gottlieb <maorg@mellanox.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    bd71b08e
fs_core.h 7.18 KB