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 7BCC8A0A0C; Fri, 18 Jun 2021 23:44:39 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EF655410DE; Fri, 18 Jun 2021 23:44:38 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 0C6B240150 for ; Fri, 18 Jun 2021 23:44:38 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1059) id 5668620B7178; Fri, 18 Jun 2021 14:44:37 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 5668620B7178 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1624052677; bh=WSFIR/6GN0gd5wvoaO69ON0JJQyanDT5Kn/rEcRIKYM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=C+tku8/E0GF0ScJAr+8bGmzPunyssEYiFSBPfInyzdTq1cSlL29wsjnmZPu17f6dP ylhfpCPDQLuQ/TlXkathVOdW/dVTM1u5XLBkX00wmCbOuyWQ3NkgbTE84axkr0CJmF OApVFRydPVJsQgFxdQ8g1AbYk2ZnRCyn98vgiDoA= Date: Fri, 18 Jun 2021 14:44:37 -0700 From: Narcisa Ana Maria Vasile To: Dmitry Kozlyuk Cc: dev@dpdk.org, thomas@monjalon.net, khot@microsoft.com, navasile@microsoft.com, dmitrym@microsoft.com, roretzla@microsoft.com, talshn@nvidia.com, ocardona@microsoft.com, bruce.richardson@intel.com, david.marchand@redhat.com, pallavi.kadam@intel.com Message-ID: <20210618214437.GC26950@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> References: <1622849908-5710-1-git-send-email-navasile@linux.microsoft.com> <1622850274-6946-1-git-send-email-navasile@linux.microsoft.com> <1622850274-6946-5-git-send-email-navasile@linux.microsoft.com> <20210609020357.2b31dfb4@sovereign> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210609020357.2b31dfb4@sovereign> User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [dpdk-dev] [PATCH v9 04/10] eal: implement functions for thread affinity management 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 Sender: "dev" On Wed, Jun 09, 2021 at 02:03:57AM +0300, Dmitry Kozlyuk wrote: > 2021-06-04 16:44 (UTC-0700), Narcisa Ana Maria Vasile: > [...] > > diff --git a/lib/eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c > > index 6ea1dc2a05..9e74a538c2 100644 > > --- a/lib/eal/windows/rte_thread.c > > +++ b/lib/eal/windows/rte_thread.c > > @@ -7,7 +7,8 @@ > > #include > > #include > > #include > > -#include > > + > > +#include "eal_windows.h" > > > > struct eal_tls_key { > > DWORD thread_index; > > @@ -77,6 +78,130 @@ rte_thread_equal(rte_thread_t t1, rte_thread_t t2) > > return t1.opaque_id == t2.opaque_id; > > } > > > > +static int > > +rte_convert_cpuset_to_affinity(const rte_cpuset_t *cpuset, > > + PGROUP_AFFINITY affinity) > > +{ > > + int ret = 0; > > + PGROUP_AFFINITY cpu_affinity = NULL; > > + > > + memset(affinity, 0, sizeof(GROUP_AFFINITY)); > > + affinity->Group = (USHORT)-1; > > + > > + /* Check that all cpus of the set belong to the same processor group and > > + * accumulate thread affinity to be applied. > > + */ > > + for (unsigned int cpu_idx = 0; cpu_idx < CPU_SETSIZE; cpu_idx++) { > > + if (!CPU_ISSET(cpu_idx, cpuset)) > > + continue; > > + > > + cpu_affinity = eal_get_cpu_affinity(cpu_idx); > > + > > + if (affinity->Group == (USHORT)-1) { > > + affinity->Group = cpu_affinity->Group; > > + } else if (affinity->Group != cpu_affinity->Group) { > > + ret = EINVAL; > > + goto cleanup; > > + } > > + > > + affinity->Mask |= cpu_affinity->Mask; > > + } > > + > > + if (affinity->Mask == 0) { > > + ret = EINVAL; > > + goto cleanup; > > + } > > + > > +cleanup: > > + return ret; > > +} > > For v5 I asked a question that possibly got lost among other comments. > Repeating the question for convenience: > > Just to be clear: is it a kernel limitation that a thread can only > run on cores of one processor group, or do we impose it so that API > is atomic (transactional), i.e. because one of multiple > SetThreadGroupAffinity() calls may fail and leave thread partially > affinitized? The second reason (to ensure full affinitization). I am not aware of a kernel limitation, but I'll double check with Dmitry as we co-engineered this patch.