From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id D77B2567C for ; Fri, 12 Jun 2015 09:24:11 +0200 (CEST) Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id DF3AE3674D1; Fri, 12 Jun 2015 07:24:10 +0000 (UTC) Received: from localhost.localdomain (vpn1-4-97.ams2.redhat.com [10.36.4.97]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t5C7O882013590; Fri, 12 Jun 2015 03:24:08 -0400 Message-ID: <557A8918.4040306@redhat.com> Date: Fri, 12 Jun 2015 10:24:08 +0300 From: Panu Matilainen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Thomas Monjalon , Olivier MATZ , "O'Driscoll, Tim" , "Zhang, Helin" , nhorman@tuxdriver.com References: <1432284264-17376-1-git-send-email-helin.zhang@intel.com> <26FA93C7ED1EAA44AB77D62FBE1D27BA54D536B3@IRSMSX102.ger.corp.intel.com> <55784A82.6020801@6wind.com> <4747564.NbtnEmoytI@xps13> In-Reply-To: <4747564.NbtnEmoytI@xps13> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH v6 01/18] mbuf: redefine packet_type in rte_mbuf X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jun 2015 07:24:12 -0000 On 06/10/2015 07:14 PM, Thomas Monjalon wrote: > 2015-06-10 16:32, Olivier MATZ: >> On 06/02/2015 03:27 PM, O'Driscoll, Tim wrote: >>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Olivier MATZ >>>> On 06/01/2015 09:33 AM, Helin Zhang wrote: >>>>> In order to unify the packet type, the field of 'packet_type' in >>>>> 'struct rte_mbuf' needs to be extended from 16 to 32 bits. >>>>> Accordingly, some fields in 'struct rte_mbuf' are re-organized to >>>>> support this change for Vector PMD. As 'struct rte_kni_mbuf' for >>>>> KNI should be right mapped to 'struct rte_mbuf', it should be >>>>> modified accordingly. In addition, Vector PMD of ixgbe is disabled >>>>> by default, as 'struct rte_mbuf' changed. >>>>> To avoid breaking ABI compatibility, all the changes would be >>>>> enabled by RTE_UNIFIED_PKT_TYPE, which is disabled by default. >>>> >>>> What are the plans for this compile-time option in the future? >>>> >>>> I wonder what are the benefits of having this option in terms >>>> of ABI compatibility: when it is disabled, it is ABI-compatible but >>>> the packet-type feature is not present, and when it is enabled we >>>> have the feature but it breaks the compatibility. >>>> >>>> In my opinion, the v5 is preferable: for this kind of features, I >>>> don't see how the ABI can be preserved, and I think packet-type >>>> won't be the only feature that will modify the mbuf structure. I think >>>> the process described here should be applied: >>>> http://dpdk.org/browse/dpdk/tree/doc/guides/rel_notes/abi.rst >>>> >>>> (starting from "Some ABI changes may be too significant to reasonably >>>> maintain multiple versions of"). >>> >>> This is just like the change that Steve (Cunming) Liang submitted for >>> Interrupt Mode. We have the same problem in both cases: we want to find >>> a way to get the features included, but need to comply with our ABI >>> policy. So, in both cases, the proposal is to add a config option to >>> enable the change by default, so we maintain backward compatibility. >>> Users that want these changes, and are willing to accept the >>> associated ABI change, have to specifically enable them. >>> >>> We can note in the Deprecation Notices in the Release Notes for 2.1 >>> that these config options will be removed in 2.2. The features will >>> then be enabled by default. >>> >>> This seems like a good compromise which allows us to get these changes >>> into 2.1 but avoids breaking the ABI policy. >> >> Sorry for the late answer. >> >> After some thoughts on this topic, I understand that having a >> compile-time option is perhaps a good compromise between >> keeping compatibility and having new features earlier. >> >> I'm just afraid about having one #ifdef in the code for >> each new feature that cannot keep the ABI compatibility. >> What do you think about having one option -- let's call >> it "CONFIG_RTE_NEXT_ABI" --, that is disabled by default, >> and that would surround any new feature that breaks the >> ABI? >> >> This would have several advantages: >> - only 2 cases (on or off), the combinatorial is smaller than >> having one option per feature >> - all next features breaking the abi can be identified by a grep >> - the code inside the #ifdef can be enabled in a simple operation >> by Thomas after each release. >> >> Thomas, any comment? > > As previously discussed (1to1) with Olivier, I think that's a good proposal > to introduce changes breaking deeply the ABI. > > Let's sum up the current policy: > 1/ For changes which have a limited impact on the ABI, the backward compatibility > must be kept during 1 release including the notice in doc/guides/rel_notes/abi.rst. > 2/ For important changes like mbuf rework, there was an agreement on skipping the > backward compatibility after having 3 acknowledgements and an 1-release long notice. > Then the ABI numbering must be incremented. > > This CONFIG_RTE_NEXT_ABI proposal would change the rules for the second case. > In order to be adopted, a patch for the file doc/guides/rel_notes/abi.rst must > be submitted and strongly acknowledged. > > The ABI numbering must be also clearly explained: > 1/ Should we have different libraries version number depending of CONFIG_RTE_NEXT_ABI? > It seems straightforward to use "ifeq" when LIBABIVER in the Makefiles An incompatible ABI must be reflected by a soname change, otherwise the whole library versioning is irrelevant. > 2/ Are we able to have some "if CONFIG_RTE_NEXT_ABI" statement in the .map files? > Maybe we should remove these files and generate them with some preprocessing. > > Neil, as the ABI policy author, what is your opinion? I'm not Neil but my 5c... Working around ABI compatibility policy via config options seems like a slippery slope. Going forward this will likely mean there are always two different ABIs for any given version, and the thought of keeping track of it all in a truly compatible manner makes my head hurt. That said its easy to understand the desire to move faster than the ABI policy allows. In a project where so many structs are in the open it gets hard to do much anything at all without breaking the ABI. The issue could be mitigated somewhat by reserving some space at the end of the structs eg when the ABI needs to be changed anyway, but it has obvious downsides as well. The other options I see tend to revolve around changing release policies one way or the other: releasing ABI compatible micro versions between minor versions and relaxing the ABI policy a bit, or just releasing new minor versions more often than the current cycle. - Panu -