]> git.droids-corp.org - dpdk.git/commitdiff
app/compress: use compiler atomic builtins for display sync
authorJoyce Kong <joyce.kong@arm.com>
Wed, 17 Nov 2021 08:21:57 +0000 (08:21 +0000)
committerDavid Marchand <david.marchand@redhat.com>
Wed, 17 Nov 2021 10:07:06 +0000 (11:07 +0100)
Convert rte_atomic_test_and_set usage to compiler atomic
CAS operation for display sync.

Signed-off-by: Joyce Kong <joyce.kong@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
app/test-compress-perf/comp_perf_test_common.h
app/test-compress-perf/comp_perf_test_cyclecount.c
app/test-compress-perf/comp_perf_test_throughput.c
app/test-compress-perf/comp_perf_test_verify.c

index 72705c6a2b65bd8d813283598969b1fa3291867c..d039e5a29a3f11b0b28b7a84a5b5cf5acab1d05d 100644 (file)
@@ -14,7 +14,7 @@ struct cperf_mem_resources {
        uint16_t qp_id;
        uint8_t lcore_id;
 
-       rte_atomic16_t print_info_once;
+       uint16_t print_info_once;
 
        uint32_t total_bufs;
        uint8_t *compressed_data;
index c875ddbdacc6570d9990ad0ee598463cc2b7a12a..da55b02b746a952338f84dd740357faa51052fdb 100644 (file)
@@ -466,7 +466,7 @@ cperf_cyclecount_test_runner(void *test_ctx)
        struct cperf_cyclecount_ctx *ctx = test_ctx;
        struct comp_test_data *test_data = ctx->ver.options;
        uint32_t lcore = rte_lcore_id();
-       static rte_atomic16_t display_once = RTE_ATOMIC16_INIT(0);
+       static uint16_t display_once;
        static rte_spinlock_t print_spinlock;
        int i;
 
@@ -486,10 +486,12 @@ cperf_cyclecount_test_runner(void *test_ctx)
 
        ctx->ver.mem.lcore_id = lcore;
 
+       uint16_t exp = 0;
        /*
         * printing information about current compression thread
         */
-       if (rte_atomic16_test_and_set(&ctx->ver.mem.print_info_once))
+       if (__atomic_compare_exchange_n(&ctx->ver.mem.print_info_once, &exp,
+                               1, 0, __ATOMIC_RELAXED,  __ATOMIC_RELAXED))
                printf("    lcore: %u,"
                                " driver name: %s,"
                                " device name: %s,"
@@ -546,9 +548,10 @@ cperf_cyclecount_test_runner(void *test_ctx)
                        (ctx->ver.mem.total_bufs * test_data->num_iter);
 
        /* R E P O R T processing */
-       if (rte_atomic16_test_and_set(&display_once)) {
+       rte_spinlock_lock(&print_spinlock);
 
-               rte_spinlock_lock(&print_spinlock);
+       if (display_once == 0) {
+               display_once = 1;
 
                printf("\nLegend for the table\n"
                "  - Retries section: number of retries for the following operations:\n"
@@ -576,12 +579,8 @@ cperf_cyclecount_test_runner(void *test_ctx)
                        "setup/op",
                        "[C-e]", "[C-d]",
                        "[D-e]", "[D-d]");
-
-               rte_spinlock_unlock(&print_spinlock);
        }
 
-       rte_spinlock_lock(&print_spinlock);
-
        printf("%12u"
               "%6u"
               "%12zu"
index 13922b658c49c23eb6caeb462419bb201a707091..d3dff070b0814bcb50cc1e773b150aca94e51c63 100644 (file)
@@ -329,15 +329,17 @@ cperf_throughput_test_runner(void *test_ctx)
        struct cperf_benchmark_ctx *ctx = test_ctx;
        struct comp_test_data *test_data = ctx->ver.options;
        uint32_t lcore = rte_lcore_id();
-       static rte_atomic16_t display_once = RTE_ATOMIC16_INIT(0);
+       static uint16_t display_once;
        int i, ret = EXIT_SUCCESS;
 
        ctx->ver.mem.lcore_id = lcore;
 
+       uint16_t exp = 0;
        /*
         * printing information about current compression thread
         */
-       if (rte_atomic16_test_and_set(&ctx->ver.mem.print_info_once))
+       if (__atomic_compare_exchange_n(&ctx->ver.mem.print_info_once, &exp,
+                               1, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED))
                printf("    lcore: %u,"
                                " driver name: %s,"
                                " device name: %s,"
@@ -391,7 +393,9 @@ cperf_throughput_test_runner(void *test_ctx)
        ctx->decomp_gbps = rte_get_tsc_hz() / ctx->decomp_tsc_byte * 8 /
                        1000000000;
 
-       if (rte_atomic16_test_and_set(&display_once)) {
+       exp = 0;
+       if (__atomic_compare_exchange_n(&display_once, &exp, 1, 0,
+                       __ATOMIC_RELAXED, __ATOMIC_RELAXED)) {
                printf("\n%12s%6s%12s%17s%15s%16s\n",
                        "lcore id", "Level", "Comp size", "Comp ratio [%]",
                        "Comp [Gbps]", "Decomp [Gbps]");
index 5e13257b795ed29a5112575aa758cc24ff882a3b..f6e21368e8534bdf751f18818d8cf91673405b66 100644 (file)
@@ -388,7 +388,7 @@ cperf_verify_test_runner(void *test_ctx)
        struct cperf_verify_ctx *ctx = test_ctx;
        struct comp_test_data *test_data = ctx->options;
        int ret = EXIT_SUCCESS;
-       static rte_atomic16_t display_once = RTE_ATOMIC16_INIT(0);
+       static uint16_t display_once;
        uint32_t lcore = rte_lcore_id();
 
        ctx->mem.lcore_id = lcore;
@@ -427,8 +427,10 @@ cperf_verify_test_runner(void *test_ctx)
        ctx->ratio = (double) ctx->comp_data_sz /
                        test_data->input_data_sz * 100;
 
+       uint16_t exp = 0;
        if (!ctx->silent) {
-               if (rte_atomic16_test_and_set(&display_once)) {
+               if (__atomic_compare_exchange_n(&display_once, &exp, 1, 0,
+                               __ATOMIC_RELAXED, __ATOMIC_RELAXED)) {
                        printf("%12s%6s%12s%17s\n",
                            "lcore id", "Level", "Comp size", "Comp ratio [%]");
                }