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 DFEFA3B5 for ; Mon, 15 May 2017 15:36:26 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 May 2017 06:36:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,345,1491289200"; d="scan'208";a="87570341" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.237.220.81]) ([10.237.220.81]) by orsmga004.jf.intel.com with ESMTP; 15 May 2017 06:36:22 -0700 To: Bruce Richardson , Thomas Monjalon Cc: dev@dpdk.org, Yuanhan Liu , Maxime Coquelin , Jing Chen , Helin Zhang , Jingjing Wu , Wenzhuo Lu , Konstantin Ananyev References: <1857248.OtrprS2xZT@xps> <20170515131517.GA68644@bricha3-MOBL3.ger.corp.intel.com> From: Ferruh Yigit Message-ID: <4a758068-a05e-4b67-0647-f3c57a32f23d@intel.com> Date: Mon, 15 May 2017 14:36:21 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 MIME-Version: 1.0 In-Reply-To: <20170515131517.GA68644@bricha3-MOBL3.ger.corp.intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] SIMD Rx/Tx paths 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, 15 May 2017 13:36:27 -0000 On 5/15/2017 2:15 PM, Bruce Richardson wrote: > On Mon, May 15, 2017 at 02:35:55PM +0200, Thomas Monjalon wrote: >> Hi, >> >> I would like to open a discussion about SIMD code in drivers. >> >> I think we should not have different behaviours or features capabilities, >> in the different code paths of a same driver. >> I suggest to consider such differences as exceptions. >> So we should merge features files (i.e. matrix columns), >> and remove these files: >> >> % ls doc/guides/nics/features/*_vec.ini >> >> doc/guides/nics/features/fm10k_vec.ini >> doc/guides/nics/features/fm10k_vf_vec.ini >> doc/guides/nics/features/i40e_vec.ini >> doc/guides/nics/features/i40e_vf_vec.ini >> doc/guides/nics/features/ixgbe_vec.ini >> doc/guides/nics/features/ixgbe_vf_vec.ini >> doc/guides/nics/features/virtio_vec.ini >> >> If a feature is not supported in all code paths of a driver, >> it must be marked as partially (P) supported. >> >> Then the mid-term goal will be to try removing these inconsistencies. >> >> Opinions/comments? > > Yes, there are inconsistencies, but if they are hidden from the user, > e.g. by having the driver select automatically the most appropriate > path, I don't think we should need to mark the support as "partial". > Instead, it should be marked as being fully supported, but perhaps with > a note indicating that a performance hit may be experienced due to the > code taking a less-optimised driver path. After all, especially in the > TX code path, a lot of the speed-up comes from not supporting different > features, as well as from the vectorization. In those cases "closing the > gap" may mean losing performance for those who don't want the features, > which is not acceptable. Any feature support we can add, without > affecting performance, should of course be implemented. I mostly agree with Bruce, except for PMD selection the patch automatically. There is a trade off between feature set and performance, scalar driver favors features and vector driver favors performance, I think good to have both. And I agree that feature support should be added to vector drivers as long as it doesn't effect the performance. Related to the driver auto selecting the path, I concern this may confuse the user, because he may end up a situation he doesn't clear about supported features, I am for more explicit way to select the scalar or vector driver. And for merging the features files, most of the items are already same for scalar and vector drivers, so perhaps we can merge files and use different syntax for features that is different for scalar and vector: Ys: Yes Scalar [no vector] Yv: Yes Vector [no scalar] Y: Yes Both Ps: Partially Scalar [no vector] Pv: Partially Vector [no scalar] P: Partially Both YsPv, YvPs > > /Bruce >