From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 824C7A04FF; Sun, 1 May 2022 11:18:44 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CDE5642824; Sun, 1 May 2022 11:18:38 +0200 (CEST) Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by mails.dpdk.org (Postfix) with ESMTP id 732F44281F for ; Sun, 1 May 2022 11:18:38 +0200 (CEST) Received: by mail-lf1-f51.google.com with SMTP id p10so20832584lfa.12 for ; Sun, 01 May 2022 02:18:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QqkyUCINsiXEcX3xJVGNFcitMjQKfi2wXrFoDo+/JR0=; b=LZwvk7cNY5xir39u1BVxu1h3O7Aof7ja6/WV8SJsxk2ar4yXFuScRC42f6vvBeIZYm E4feNc0xFKj1HsKT49FE4hjGt2i4w6qo6W1bB9a0+muMbptTMwI0UW7OeUhoeDGALnVy GGnYQwxnqcOMb4LZUHZuP0nmpM2iO0T9VZwbkuiBlgcMNAbFCoSSn7D7w3vkrgspHdiV uee83hptOo6X3jACfCEzBrseTCAEyQ9Biolow0xRm/HLz5QZ/g2oxf5jjOzOs/a9Z16H xnoE0ekpiDwHl+uJ+gmjS9t7R58RuNbtaZw+H44zjqTjSllN39YBmg2CEznIRJxfcLau wZ3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QqkyUCINsiXEcX3xJVGNFcitMjQKfi2wXrFoDo+/JR0=; b=v6Y7HXuk25Ajw6E96u0QQNi2el/sJUYU1WiZN278NPCdf7yI71jY7G36pjA9/Veawl Qztm91dOth+lb36lkzn5eOQ3Of2mg6JG06uRK6r8xnMdfKYulSoGPeIzBnr+x6TJ0kh2 xQsb37BbDwQSwFGjCVRpbTsG7tsCoCrTKZgvJJEtivYnDQ7pToY2hjZO92J/pQTlcCUQ /h8JfyhZITM0x6RiGW3FJC4Q9KzFrEpUJ+lgwIH4gsJg5i8FDOY6yT/4jJDcEf5+oKy+ 9rxX8zBJrpBpWXdjkZ9Ne+aZR4l/3i4KYCbg4iM4PiRQ5drcS1wUHwr08wlkgjnCD8KN G9SA== X-Gm-Message-State: AOAM533YI8plr1ft+YTzJzKg6SdVb5BZoJhTFcnwyHhT7s2NzPs3snjg OysmxRCzObgkjAfYWEss9rA= X-Google-Smtp-Source: ABdhPJx3Xw5jFUdGbOQlG+/zJAo9ICXQUSkwLCvwfI2sADkLfhIhwvqcMRODoeEGs+CSKchOYJMMtA== X-Received: by 2002:a05:6512:c03:b0:447:7912:7e6b with SMTP id z3-20020a0565120c0300b0044779127e6bmr5766076lfu.508.1651396717974; Sun, 01 May 2022 02:18:37 -0700 (PDT) Received: from sovereign (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id u11-20020ac243cb000000b0047255d2113fsm396712lfl.110.2022.05.01.02.18.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 May 2022 02:18:37 -0700 (PDT) Date: Sun, 1 May 2022 12:18:36 +0300 From: Dmitry Kozlyuk To: Tyler Retzlaff Cc: dev@dpdk.org, thomas@monjalon.net, anatoly.burakov@intel.com, Narcisa Vasile Subject: Re: [PATCH v4 3/3] test/threads: add unit test for thread API Message-ID: <20220501121836.439b883e@sovereign> In-Reply-To: <1650959442-29330-4-git-send-email-roretzla@linux.microsoft.com> References: <1648819793-18948-1-git-send-email-roretzla@linux.microsoft.com> <1650959442-29330-1-git-send-email-roretzla@linux.microsoft.com> <1650959442-29330-4-git-send-email-roretzla@linux.microsoft.com> X-Mailer: Claws Mail 3.18.0 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org 2022-04-26 00:50 (UTC-0700), Tyler Retzlaff: > Establish unit test for testing thread api. Initial unit tests > for rte_thread_{get,set}_affinity_by_id(). > > Signed-off-by: Narcisa Vasile > Signed-off-by: Tyler Retzlaff > --- > app/test/meson.build | 2 ++ > app/test/test_threads.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 91 insertions(+) > create mode 100644 app/test/test_threads.c > > diff --git a/app/test/meson.build b/app/test/meson.build > index 5fc1dd1..5a9d69b 100644 > --- a/app/test/meson.build > +++ b/app/test/meson.build > @@ -133,6 +133,7 @@ test_sources = files( > 'test_tailq.c', > 'test_thash.c', > 'test_thash_perf.c', > + 'test_threads.c', > 'test_timer.c', > 'test_timer_perf.c', > 'test_timer_racecond.c', > @@ -238,6 +239,7 @@ fast_tests = [ > ['reorder_autotest', true], > ['service_autotest', true], > ['thash_autotest', true], > + ['threads_autotest', true], > ['trace_autotest', true], > ] > > diff --git a/app/test/test_threads.c b/app/test/test_threads.c > new file mode 100644 > index 0000000..0ca6745 > --- /dev/null > +++ b/app/test/test_threads.c > @@ -0,0 +1,89 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (C) 2022 Microsoft Corporation > + */ > + > +#include > +#include > + > +#include > +#include > + > +#include "test.h" > + > +RTE_LOG_REGISTER(threads_logtype_test, test.threads, INFO); > + > +static uint32_t thread_id_ready; > + > +static void * > +thread_main(void *arg) > +{ > + *(rte_thread_t *)arg = rte_thread_self(); > + __atomic_store_n(&thread_id_ready, 1, __ATOMIC_RELEASE); > + > + return NULL; > +} > + > +static int > +test_thread_affinity(void) > +{ > + pthread_t id; > + rte_thread_t thread_id; > + > + RTE_TEST_ASSERT(pthread_create(&id, NULL, thread_main, &thread_id) == 0, > + "Failed to create thread"); > + > + while (__atomic_load_n(&thread_id_ready, __ATOMIC_ACQUIRE) == 0) > + ; > + > + rte_cpuset_t cpuset0; Variables should be declared at the beginning of the block. > + RTE_TEST_ASSERT(rte_thread_get_affinity_by_id(thread_id, &cpuset0) == 0, > + "Failed to get thread affinity"); > + > + rte_cpuset_t cpuset1; > + RTE_TEST_ASSERT(rte_thread_get_affinity_by_id(thread_id, &cpuset1) == 0, > + "Failed to get thread affinity"); > + RTE_TEST_ASSERT(memcmp(&cpuset0, &cpuset1, sizeof(rte_cpuset_t)) == 0, > + "Affinity should be stable"); > + > + RTE_TEST_ASSERT(rte_thread_set_affinity_by_id(thread_id, &cpuset1) == 0, > + "Failed to set thread affinity"); > + RTE_TEST_ASSERT(rte_thread_get_affinity_by_id(thread_id, &cpuset0) == 0, > + "Failed to get thread affinity"); > + RTE_TEST_ASSERT(memcmp(&cpuset0, &cpuset1, sizeof(rte_cpuset_t)) == 0, > + "Affinity should be stable"); > + > + size_t i; > + for (i = 1; i < CPU_SETSIZE; i++) > + if (CPU_ISSET(i, &cpuset0)) { > + CPU_ZERO(&cpuset0); > + CPU_SET(i, &cpuset0); > + > + break; > + } > + RTE_TEST_ASSERT(rte_thread_set_affinity_by_id(thread_id, &cpuset0) == 0, > + "Failed to set thread affinity"); > + RTE_TEST_ASSERT(rte_thread_get_affinity_by_id(thread_id, &cpuset1) == 0, > + "Failed to get thread affinity"); > + RTE_TEST_ASSERT(memcmp(&cpuset0, &cpuset1, sizeof(rte_cpuset_t)) == 0, > + "Affinity should be stable"); The message is not really relevant to the check done. "Retrieved affinity differs from requested"? I think this is the only check worth keeping in this test. The fist one is speculative: if we expect that a wrong implementation may change affinity sporadically, the test can't prove it doesn't. The second one isn't stronger than this one. > + > + return 0; > +} > + > +static struct unit_test_suite threads_test_suite = { > + .suite_name = "threads autotest", > + .setup = NULL, > + .teardown = NULL, > + .unit_test_cases = { > + TEST_CASE(test_thread_affinity), > + TEST_CASES_END() > + } > +}; > + > +static int > +test_threads(void) > +{ > + return unit_test_suite_runner(&threads_test_suite); > +} > + > +REGISTER_TEST_COMMAND(threads_autotest, test_threads);