DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Thomas Monjalon <thomas@monjalon.net>
Cc: dev@dpdk.org, Ajit Khaparde <ajit.khaparde@broadcom.com>,
	Jerin Jacob <jerin.jacob@caviumnetworks.com>,
	Shijith Thotton <shijith.thotton@cavium.com>,
	Santosh Shukla <santosh.shukla@caviumnetworks.com>,
	Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>,
	John Daley <johndale@cisco.com>,
	Wenzhuo Lu <wenzhuo.lu@intel.com>,
	Konstantin Ananyev <konstantin.ananyev@intel.com>,
	Beilei Xing <beilei.xing@intel.com>,
	Qi Zhang <qi.z.zhang@intel.com>,
	Jingjing Wu <jingjing.wu@intel.com>,
	Adrien Mazarguil <adrien.mazarguil@6wind.com>,
	Nelio Laranjeiro <nelio.laranjeiro@6wind.com>,
	Yongseok Koh <yskoh@mellanox.com>,
	Shahaf Shuler <shahafs@mellanox.com>,
	Tomasz Duszynski <tdu@semihalf.com>,
	Jianbo Liu <jianbo.liu@arm.com>,
	Alejandro Lucero <alejandro.lucero@netronome.com>,
	Hemant Agrawal <hemant.agrawal@nxp.com>,
	Shreyansh Jain <shreyansh.jain@nxp.com>,
	Harish Patil <harish.patil@cavium.com>,
	Rasesh Mody <rasesh.mody@cavium.com>,
	Andrew Rybchenko <arybchenko@solarflare.com>,
	Shrikrishna Khare <skhare@vmware.com>,
	Maxime Coquelin <maxime.coquelin@redhat.com>,
	Allain Legacy <allain.legacy@windriver.com>,
	Bruce Richardson <bruce.richardson@intel.com>,
	Gaetan Rivet <gaetan.rivet@6wind.com>,
	Olivier Matz <olivier.matz@6wind.com>
Subject: Re: [dpdk-dev] Survey for final decision about per-port offload API
Date: Wed, 25 Apr 2018 14:32:55 +0100	[thread overview]
Message-ID: <38ef5fed-d664-2c99-543d-89b04f03be0a@intel.com> (raw)
In-Reply-To: <2216799.LoqiUiJk6K@xps>

On 4/24/2018 11:00 PM, Thomas Monjalon wrote:
> Hi,
> 
> First, this is my summary after the survey answers and comments:
> 
> 1/ allow "forgetting" port offloads in queue offloads setup
> 
> 2/ update documentation, applications and remove checks in PMDs for 18.05-rc2
> 
> 3/ an offload enabled at port level, cannot be disabled at queue level
> 
> 4/ The queue capabilities must be a subset of port capabilities,
> i.e. every queue capabilities must be reported as port capabilities.
> But the port capabilities should be reported at queue level
> only if it can be enabled on queue when it is disabled on port level.
> 
> 
> 24/04/2018 12:39, Ferruh Yigit:
>> On 3/30/2018 2:47 PM, Thomas Monjalon wrote:
>>> There are some discussions about a specific part of the offload API:
>>> 	"To enable per-port offload, the offload should be set on both
>>> 	device configuration and queue setup."
>>>
>>> It means the application must repeat the port offload flags
>>> in rte_eth_conf.[rt]xmode.offloads and rte_eth_[rt]xconf.offloads,
>>> when calling respectively rte_eth_dev_configure() and
>>> rte_eth_[rt]x_queue_setup for each queue.
>>>
>>> The PMD must check if there is mismatch, i.e. a port offload not
>>> repeated in queue setup.
>>> There is a proposal to do this check at ethdev level:
>>> 	http://dpdk.org/ml/archives/dev/2018-March/094023.html
>>>
>>> It was also proposed to relax the API and allow "forgetting" port
>>> offloads in queue offloads:
>>> 	http://dpdk.org/ml/archives/dev/2018-March/092978.html
>>>
>>> It would mean the offloads applied to a queue result of OR operation:
>>> 	rte_eth_conf.[rt]xmode.offloads | rte_eth_[rt]xconf.offloads
>>>
>>> 1/ Do you agree with above API change?
>>
>> There is a detail of ability to disabling queue level offloads in queue_setup()
>> function, I want to discuss here.
>>
>> Prolog:
>> port level offload: An offload only can be applied port level, to all queues.
>> queue level offload: An offload can be applied into individual queues of the port
>>
>> PMD reports port offload capability: port level offload + queue level offload
>> PMD reports queue offload capability: queue level offload
>>
>>
>> Above suggested change to API:
>> - Application will be limited in configure() to set only an offload within "port
>> offload capability"
> 
> "limited" is not the right word, given port offload capability reports also
> queue level offload capability.
> 
>> - Application will be limited in queue_setup() to set only an offload within
>> "queue offload capability"
> 
> Yes
> 
>> This doesn't say much about disabling an offload in queue_setup(), as a rule:
>> - An "port level offload" can't be disabled in queue_setup()
> 
> Yes
> 
>> There are two cases of disable:
>> 1- Disabling a "queue level offload" enabled queue_setup() previously
>> 2- Disabling a "queue level offload" enabled in configure()
>>
>> If second is not supported, to disable the offload, applications should
>> stop->re-configure()->re-queue_setup()->start the port. But having this
>> capability makes the offloading parameters more confusing for applications.
> 
> I don't understand the last sentence.
> 
>> I suggest adding disable support to fist one but not second one.
> 
> Yes, it is the item 3 of the survey.

Yes indeed.

> 
>> According this,
>> application:
>> - In configure() set offload within "port offload capability"
>> - In queue_setup() set offload within "queue offload capability". Offloads are
>> incremental to ones in configure()
>>
>> PMDs:
>> - In configure() verify the offload against "port offload capability"
>> - In queue_setup() verify the offload against "queue offload capability"
> 
> At ethdev level, we should filter out the offloads already enabled at port level,
> before calling the queue setup op.

Above two steps can be moved to ethdev layer, agreed. But I guess you are
talking about something else, can you please detail?

> 
>> - In queue_setup() if requested offload is not enabled already, enable it for queue
>> - In queue_setup() if an offload value cleared in requested offload that is set
>> in port_offload, return error.
> 
> No
> The item 1 of the survey is about allow "forgetting" port offloads.
> If offload is enabled at port level, and not repeated in queue setup,
> nothing happen. It stays enabled at port level.

Right.

> 
>> - In queue_setup() if an offload value cleared in requested offload that is not
>> set in port_offload but set in queue_offload, disable it for that queue.
> 
> Yes

OK, good to agree on this, this was the main topic of this email.

> 
> 
>> Samples according initial suggestion + disable support:
>>
>> Sample 1:
>> port level offload: A, B
>> queue level offload: C, D
>> port offload capability: A, B, C, D
>> queue offload capability: C, D
>>
>> configure(A,C): Q1:A,C  Q2:A,C [queue_setup() can't disable A,C after this]
>> queue_setup(Q1, B): --> Error [Can't enable port level offload in queue_setup()]
>> queue_setup(Q1, D): Q1:A,C,D
>> queue_setup(Q1, ""): Q1:A,C [Disabled D]
> 
> Yes we can disable a queue offload.
> 
>> queue_setup(Q2, "C,D"): Q2:A,C,D
>> queue_setup(Q2, ""): Q2:A,C
> 
> Yes we cannot disable a port offload.
> 
>> queue_setup(Q2, A): --> Error [A is port_level offload]
> 
> No, it is the same as queue_setup(Q2, "C,D").
> We can repeat an already enabled port offload in queue setup.

You are right, no need to return error here, since it is already enabled for queue.

> 
> 
>> Sample 2:
>> port level offload: A, B, C
>> queue level offload: ""
>> port offload capability: A, B, C
>> queue offload capability: ""   [no way to change offloads in queue level]
>>
>> configure(A,C): Q1:A,C  Q2:A,C
>> queue_setup(Q1, B): --> Error
>> queue_setup(Q1, A): --> Error
> 
> No, we can repeat an already enabled port offload in queue setup.

Right.

> 
>> queue_setup(Q2, ""): Q2:A,C
>> queue_setup(Q1, ""): Q1:A,C
>>
>>
>> Sample 3:
>> port level offload: ""
>> queue level offload: A, B, C, D
>> port offload capability: A, B, C, D
>> queue offload capability: A, B, C, D
>>
>> configure(A): Q1:A  Q2:A
>> queue_setup(Q1, A): Q1:A
>> queue_setup(Q1, ""): Q1:A
>> queue_setup(Q1, A,B,C,D): Q1:A,B,C,D
>> queue_setup(Q1, B): Q1:A,B [Disable C,D]
> 
> Yes
> 
>> queue_setup(Q2, C): Q2:A,C
>> queue_setup(Q1, ""): Q1:A [Disable B]
>> queue_setup(Q2, ""): Q2:A [Disable C]
> 
> Yes
> 
> 
> 

  reply	other threads:[~2018-04-25 13:33 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-30 13:47 Thomas Monjalon
2018-03-30 15:13 ` Andrew Rybchenko
2018-03-30 15:46   ` Thomas Monjalon
2018-04-01  1:51 ` Zhang, Qi Z
2018-04-02 15:44   ` Thomas Monjalon
2018-04-01  4:44 ` Shahaf Shuler
2018-04-02 15:53   ` Thomas Monjalon
2018-04-03  5:19     ` Shahaf Shuler
2018-04-02  1:27 ` Lu, Wenzhuo
2018-04-02  3:18 ` Xing, Beilei
2018-04-02 17:23 ` Wu, Jingjing
2018-04-02 17:39 ` Patil, Harish
2018-04-02 20:10   ` Thomas Monjalon
2018-04-02 20:45     ` Patil, Harish
2018-04-03  0:53 ` Zhang, Qi Z
2018-04-03 19:59 ` John Daley (johndale)
2018-04-04  0:25 ` Yongseok Koh
2018-04-11 14:42 ` Olivier Matz
2018-04-11 15:17 ` Alejandro Lucero
2018-04-12  5:41 ` Jerin Jacob
2018-04-12  7:03 ` Maxime Coquelin
2018-04-12  9:08 ` Shreyansh Jain
2018-04-24 10:39 ` Ferruh Yigit
2018-04-24 11:08   ` Ananyev, Konstantin
2018-04-24 12:27     ` Ferruh Yigit
2018-04-24 15:20       ` Ananyev, Konstantin
2018-04-24 16:18         ` Ferruh Yigit
2018-04-24 12:56   ` Shahaf Shuler
2018-04-24 22:00   ` Thomas Monjalon
2018-04-25 13:32     ` Ferruh Yigit [this message]
2018-04-25 15:21       ` Thomas Monjalon
2018-04-25 16:45       ` Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=38ef5fed-d664-2c99-543d-89b04f03be0a@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=adrien.mazarguil@6wind.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=alejandro.lucero@netronome.com \
    --cc=allain.legacy@windriver.com \
    --cc=arybchenko@solarflare.com \
    --cc=beilei.xing@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=gaetan.rivet@6wind.com \
    --cc=harish.patil@cavium.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerin.jacob@caviumnetworks.com \
    --cc=jianbo.liu@arm.com \
    --cc=jingjing.wu@intel.com \
    --cc=johndale@cisco.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=nelio.laranjeiro@6wind.com \
    --cc=olivier.matz@6wind.com \
    --cc=qi.z.zhang@intel.com \
    --cc=rahul.lakkireddy@chelsio.com \
    --cc=rasesh.mody@cavium.com \
    --cc=santosh.shukla@caviumnetworks.com \
    --cc=shahafs@mellanox.com \
    --cc=shijith.thotton@cavium.com \
    --cc=shreyansh.jain@nxp.com \
    --cc=skhare@vmware.com \
    --cc=tdu@semihalf.com \
    --cc=thomas@monjalon.net \
    --cc=wenzhuo.lu@intel.com \
    --cc=yskoh@mellanox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).