From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 3FF75A48A for ; Mon, 22 Jan 2018 21:48:40 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jan 2018 12:48:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,398,1511856000"; d="scan'208";a="197844454" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by fmsmga006.fm.intel.com with ESMTP; 22 Jan 2018 12:48:38 -0800 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.236]) by IRSMSX106.ger.corp.intel.com ([169.254.8.36]) with mapi id 14.03.0319.002; Mon, 22 Jan 2018 20:48:37 +0000 From: "Ananyev, Konstantin" To: Matan Azrad , =?iso-8859-1?Q?Ga=EBtan_Rivet?= CC: Thomas Monjalon , "Wu, Jingjing" , "dev@dpdk.org" , Neil Horman , "Richardson, Bruce" Thread-Topic: [PATCH v3 7/7] app/testpmd: adjust ethdev port ownership Thread-Index: AQHTkHpyuUKMeuPQw06Oud7boKI8uKN7InaggAAFDoCAAAQmUIAACAgAgAAXyICABIDDwIAAGvuAgAB1A3A= Date: Mon, 22 Jan 2018 20:48:37 +0000 Message-ID: <2601191342CEEE43887BDE71AB97725886281E73@irsmsx105.ger.corp.intel.com> References: <1515318351-4756-1-git-send-email-matan@mellanox.com> <1516293317-30748-1-git-send-email-matan@mellanox.com> <1516293317-30748-8-git-send-email-matan@mellanox.com> <2601191342CEEE43887BDE71AB97725886280A68@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB97725886280AE8@irsmsx105.ger.corp.intel.com> <20180119150017.mljpcdmldqx32mkq@bidouze.vm.6wind.com> <2601191342CEEE43887BDE71AB97725886281B1D@irsmsx105.ger.corp.intel.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNjE3ZjZhNGUtZDhlNS00MTViLWE0NTgtMWU4MjlkYmZiMWVlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IlN5ZGtkenlSUm9PMHcyWm9WclJycWNsSjh0Z3dZcjVUSmwwdkxFemxUWG89In0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 7/7] app/testpmd: adjust ethdev port ownership X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jan 2018 20:48:41 -0000 Hi Matan, > -----Original Message----- > From: Matan Azrad [mailto:matan@mellanox.com] > Sent: Monday, January 22, 2018 1:23 PM > To: Ananyev, Konstantin ; Ga=EBtan Rivet > Cc: Thomas Monjalon ; Wu, Jingjing ; dev@dpdk.org; Neil Horman > ; Richardson, Bruce > Subject: RE: [PATCH v3 7/7] app/testpmd: adjust ethdev port ownership >=20 >=20 > Hi > From: Ananyev, Konstantin [mailto:konstantin.ananyev@intel.com] > > Hi lads, > > > > > > > > Hi Matan, > > > > > > On Fri, Jan 19, 2018 at 01:35:10PM +0000, Matan Azrad wrote: > > > > Hi Konstantin > > > > > > > > From: Ananyev, Konstantin, Friday, January 19, 2018 3:09 PM > > > > > > -----Original Message----- > > > > > > From: Matan Azrad [mailto:matan@mellanox.com] > > > > > > Sent: Friday, January 19, 2018 12:52 PM > > > > > > To: Ananyev, Konstantin ; Thomas > > > > > > Monjalon ; Gaetan Rivet > > > > > ; > > > > > > Wu, Jingjing > > > > > > Cc: dev@dpdk.org; Neil Horman ; > > > > > > Richardson, Bruce > > > > > > Subject: RE: [PATCH v3 7/7] app/testpmd: adjust ethdev port > > > > > > ownership > > > > > > > > > > > > Hi Konstantin > > > > > > > > > > > > From: Ananyev, Konstantin, Friday, January 19, 2018 2:38 PM > > > > > > > To: Matan Azrad ; Thomas Monjalon > > > > > > > ; Gaetan Rivet > > ; > > > > > Wu, > > > > > > > Jingjing > > > > > > > Cc: dev@dpdk.org; Neil Horman ; > > > > > > > Richardson, Bruce > > > > > > > Subject: RE: [PATCH v3 7/7] app/testpmd: adjust ethdev port > > > > > > > ownership > > > > > > > > > > > > > > Hi Matan, > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > From: Matan Azrad [mailto:matan@mellanox.com] > > > > > > > > Sent: Thursday, January 18, 2018 4:35 PM > > > > > > > > To: Thomas Monjalon ; Gaetan Rivet > > > > > > > > ; Wu, Jingjing > > > > > > > > > > > > > > > > Cc: dev@dpdk.org; Neil Horman ; > > > > > Richardson, > > > > > > > > Bruce ; Ananyev, Konstantin > > > > > > > > > > > > > > > > Subject: [PATCH v3 7/7] app/testpmd: adjust ethdev port > > > > > > > > ownership > > > > > > > > > > > > > > > > Testpmd should not use ethdev ports which are managed by > > > > > > > > other DPDK entities. > > > > > > > > > > > > > > > > Set Testpmd ownership to each port which is not used by > > > > > > > > other entity and prevent any usage of ethdev ports which ar= e > > > > > > > > not owned by > > > > > Testpmd. > > > > > > > > > > > > > > > > Signed-off-by: Matan Azrad > > > > > > > > --- > > > > > > > > app/test-pmd/cmdline.c | 89 +++++++++++++++++++------= ---- > > ------- > > > > > ---- > > > > > > > ----- > > > > > > > > app/test-pmd/cmdline_flow.c | 2 +- > > > > > > > > app/test-pmd/config.c | 37 ++++++++++--------- > > > > > > > > app/test-pmd/parameters.c | 4 +- > > > > > > > > app/test-pmd/testpmd.c | 63 ++++++++++++++++++++-----= --- > > ---- > > > > > > > > app/test-pmd/testpmd.h | 3 ++ > > > > > > > > 6 files changed, 103 insertions(+), 95 deletions(-) > > > > > > > > > > > > > > > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.= c > > > > > > > > index > > > > > > > > 31919ba..6199c64 100644 > > > > > > > > --- a/app/test-pmd/cmdline.c > > > > > > > > +++ b/app/test-pmd/cmdline.c > > > > > > > > @@ -1394,7 +1394,7 @@ struct cmd_config_speed_all { > > > > > > > > &link_speed) < 0) > > > > > > > > return; > > > > > > > > > > > > > > > > - RTE_ETH_FOREACH_DEV(pid) { > > > > > > > > + RTE_ETH_FOREACH_DEV_OWNED_BY(pid, my_owner.id) { > > > > > > > > > > > > > > Why do we need all these changes? > > > > > > > As I understand you changed definition of > > > > > > > RTE_ETH_FOREACH_DEV(), so no testpmd should work ok default > > (no_owner case). > > > > > > > Am I missing something here? > > > > > > > > > > > > Now, After Gaetan suggestion RTE_ETH_FOREACH_DEV(pid) will > > > > > > iterate > > > > > over all valid and ownerless ports. > > > > > > > > > > Yes. > > > > > > > > > > > Here Testpmd wants to iterate over its owned ports. > > > > > > > > > > Why? Why it can't just iterate over all valid and ownerless ports= ? > > > > > As I understand it would be enough to fix current problems and > > > > > would allow us to avoid any changes in testmpd (which I think is = a good > > thing). > > > > > > > > Yes, I understand that this big change is very daunted, But I think > > > > the current a lot of bugs in testpmd(regarding port ownership) even > > > > more > > > daunted. > > > > > > > > Look, > > > > Testpmd initiates some of its internal databases depends on specifi= c > > > > port iteration, In some time someone may take ownership of Testpmd > > ports and testpmd will continue to touch them. > > > > But if someone will take the ownership (assign new owner_id) that port = will > > not appear in RTE_ETH_FOREACH_DEV() any more. > > >=20 > Yes, but testpmd sometimes depends on previous iteration using internal d= atabase. > So it uses internal database that was updated by old iteration. That sounds like just a bug in testpmd that need to be fixed, no? Any particular places where outdated device info is used?=20 >=20 > > > > > > > > > > If I look back on the fail-safe, its sole purpose is to have seamless > > > hotplug with existing applications. > > > > > > Port ownership is a genericization of some functions introduced by th= e > > > fail-safe, that could structure DPDK further. It should allow > > > applications to have a seamless integration with subsystems using por= t > > > ownership. Without this, port ownership cannot be used. > > > > > > Testpmd should be fixed, but follow the most common design patterns o= f > > > DPDK applications. Going with port ownership seems like a paradigm > > > shift. > > > > > > > In addition > > > > Using the old iterator in some places in testpmd will cause a race = for run- > > time new ports(can be created by failsafe or any hotplug code): > > > > - testpmd finds an ownerless port(just now created) by the old > > > > iterator and start traffic there, > > > > - failsafe takes ownership of this new port and start traffic there= . > > > > Problem! > > > > Could you shed a bit more light here - it would be race condition betwe= en > > whom and whom? >=20 > Sure. >=20 > > As I remember in testpmd all control ops are done within one thread (ma= in > > lcore). >=20 > But other dpdk entity can use another thread, for example: > Failsafe uses the host thread(using alarm callback) to create a new port = and to take ownership of a port. Hm, and you create new ports inside failsafe PMD, right and then set new ow= ner_id for it? And all this in alarm in interrupt thread? If so I wonder how you can guarantee that no-one else will set different ow= ner_id between rte_eth_dev_allocate() and rte_eth_dev_owner_set()? Could you point me to that place (I am not really familiar with familiar wi= th failsafe code)? >=20 > The race: > Testpmd iterates over all ports by the master thread. > Failsafe takes ownership of a port by the host thread and start using it. > =3D> The two dpdk entities may use the device at same time! Ok, if failsafe really assigns its owner_id(s) to ports that are already in= use by the app, then how such scheme supposed to work at all? I.E. application has a port - it assigns some owner_id !=3D 0 to it, then P= MD tries to set its owner_id tot the same port. Obviously failsafe's set_owner() will always fail in such case. >>From what I hear we need to introduce a concept of 'default owner id'. I.E. when failsafe PMD is created - user assigns some owner_id to it (defau= lt). Then failsafe PMD generates it's own owner_id and assigns it only to the po= rts whose current owner_id is equal either 0 or 'default' owner_id.=20 >=20 > Obeying the new ownership rules can prevent all these races. >=20 When we discussed RFC of owner_id patch, I thought we all agreed that owner_id API shouldn't be mandatory - i.e. existing apps not required to c= hange to work normally with that. Though right now it seems that application changes seems necessary, at least to work ok with failsafe PMD. Which makes we wonder was it some sort of misunderstanding or we did we do something wrong here? Konstantin > > The only way to attach/detach port with it - invoke testpmd CLI > > "attach/detach" port. > > > > Konstantin > > > > > > > > Testpmd does not handle detection of new port. If it did, testing > > > fail-safe with it would be wrong. > > > > > > At startup, RTE_ETH_FOREACH_DEV already fixed the issue of registerin= g > > > DEFERRED ports. There are still remaining issues regarding this, but = I > > > think they should be fixed. The architecture does not need to be > > > completely moved to port ownership. > > > > > > If anything, this should serve as a test for your API with common > > > applications. I think you'd prefer to know and debug with testpmd > > > instead of firing up VPP or something like that to determine what wen= t > > > wrong with using the fail-safe. > > > > > > > > > > > In addition > > > > As a good example for well-done application (free from ownership > > > > bugs) I tried here to adjust Tespmd to the new rules and BTW to fix > > > > a > > > lot of bugs. > > > > > > Testpmd has too much cruft, it won't ever be a good example of a > > > well-done application. > > > > > > If you want to demonstrate ownership, I think you should start an > > > example application demonstrating race conditions and their mitigatio= n. > > > > > > I think that would be interesting for many DPDK users. > > > > > > > > > > > > > > > So actually applications which are not aware to the port ownership > > > > still are exposed to races, but if there use the old iterator(with > > > > the new > > > change) the amount of races decreases. > > > > > > > > Thanks, Matan. > > > > > Konstantin > > > > > > > > > > > > > > > > > I added to Testpmd ability to take an ownership of ports as the > > > > > > new ownership and synchronization rules suggested, Since Tespmd > > > > > > is a DPDK entity which wants that no one will touch its owned > > > > > > ports, It must allocate > > > > > an unique ID, set owner for its ports (see in main function) and > > > > > recognizes them by its owner ID. > > > > > > > > > > > > > Konstantin > > > > > > > > > > > > > Regards, > > > -- > > > Ga=EBtan Rivet > > > 6WIND