Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 424c5bd4 authored by Vlad Buslov's avatar Vlad Buslov Committed by David S. Miller
Browse files

selftests: concurrency: add test to verify concurrent replace



Implement test that verifies concurrent replacement of rules by executing
10 tc instances that replace flower filters in same handle range.

Extend tdc_multibatch.py script with new optional CLI argument that is used
to generate all batch files with same filter handle range.

Signed-off-by: default avatarVlad Buslov <vladbu@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4ba21de2
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -71,5 +71,30 @@
            "$TC qdisc del dev $DEV2 ingress",
            "/bin/rm -rf $BATCH_DIR"
        ]
    },
    {
        "id": "14be",
        "name": "Concurrently replace same range of 100k flower filters from 10 tc instances",
        "category": [
            "filter",
            "flower",
            "concurrency"
        ],
        "setup": [
            "/bin/mkdir $BATCH_DIR",
            "$TC qdisc add dev $DEV2 ingress",
            "./tdc_multibatch.py $DEV2 $BATCH_DIR 100000 1 add",
            "$TC -b $BATCH_DIR/add_0",
            "./tdc_multibatch.py -d $DEV2 $BATCH_DIR 100000 10 replace"
        ],
        "cmdUnderTest": "find $BATCH_DIR/replace* -print | xargs -n 1 -P 10 $TC -b",
        "expExitCode": "0",
        "verifyCmd": "$TC -s filter show dev $DEV2 ingress",
        "matchPattern": "filter protocol ip pref 1 flower chain 0 handle",
        "matchCount": "100000",
        "teardown": [
            "$TC qdisc del dev $DEV2 ingress",
            "/bin/rm -rf $BATCH_DIR"
        ]
    }
]
+8 −1
Original line number Diff line number Diff line
@@ -21,6 +21,11 @@ parser.add_argument(
    "operation",
    choices=['add', 'del', 'replace'],
    help="operation to perform on filters")
parser.add_argument(
    "-d",
    "--duplicate_handles",
    action="store_true",
    help="duplicate filter handle range in all files")
args = parser.parse_args()

device = args.device
@@ -29,10 +34,12 @@ file_prefix = args.operation + "_"
num_filters = args.num_filters
num_files = args.num_files
operation = args.operation
duplicate_handles = args.duplicate_handles
handle = 1

for i in range(num_files):
    file = dir + '/' + file_prefix + str(i)
    os.system("./tdc_batch.py -n {} -a {} -e {} -m {} {} {}".format(
        num_filters, handle, operation, i, device, file))
    if not duplicate_handles:
        handle += num_filters