Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-13 Thread Aaron Conole
Aaron Conole  writes:
> "Traynor, Kevin"  writes:
>>> -Original Message-
>>> From: Aaron Conole [mailto:acon...@redhat.com]
>>> Sent: Monday, January 4, 2016 9:47 PM
>>> To: dev@openvswitch.org; Flavio Leitner; Traynor, Kevin
>>> Subject: [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to
>>> db
>>> 
>>> Existing DPDK integration is provided by use of command line options which
>>> must be split out and passed to librte in a special manner. However, this
>>> forces any configuration to be passed by way of a special DPDK flag, and
>>> interferes with ovs+dpdk packaging solutions.
>>> 
>>> This commit delays dpdk initialization until the first DPDK netdev is added
>>> to the bridge, at which point ovs initializes librte. It pulls all of
>>> the config data from the OVS database, and assembles a new argv/argc
>>> pair to be passed along.
>>> 
>>> Signed-off-by: Aaron Conole 
>>> ---
>>> v2:
>>> * Removed trailing whitespace
>>> * Followed for() loop brace coding style
>>> * Automatically enable DPDK when adding a DPDK enabled port
>>> * Fixed an issue on startup when DPDK enabled ports are present
>>> * Updated the documentation (including vswitch.xml) and documented all
>>>   new parameters
>>> * Dropped the premature initialization test
>>
>> Hi, mostly very minor comments below,
<>
>>> 
>>> -static inline int
>>> -dpdk_init(int argc, char **argv)
>>> +static inline void
>>> +dpdk_config(const struct ovsrec_open_vswitch *ovs_cfg)
>>>  {
>>> -if (argc >= 2 && !strcmp(argv[1], "--dpdk")) {
>>> -ovs_fatal(0, "DPDK support not built into this copy of Open
>>> vSwitch.");
>>> +static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
>>> +
>>> +if (ovs_cfg && ovsthread_once_start(&once)) {
>>> +if(smap_get_bool(&ovs_cfg->other_config, "dpdk", false)) {
>>> +ovs_fatal(0, "DPDK not supported in this copy of Open
>>> vSwitch.");
>>
>> "dpdk" db entry is not in this version of the patchset. 
>
> Good catch... I should have tested it more thoroughly.
>
>> Might be best for this function to just do nothing now. A print doesn't
>> even seem to make sense as this will be called for OVS without DPDK.
>
> Okay.
>

I'm rethinking. We need the print in this case: user has dpdk-init=true
in the database, but this version of OVS doesn't support DPDK. The
netdevs in the database will be broken, and the user will be unaware of
why.

It's the same as the original behavior - if someone requests dpdk at
runtime, but the support wasn't there at compile time, we should abort
altogether and let the user clean things up. So that's what I'm
including in my patchset.

-Aaron
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-12 Thread Traynor, Kevin
> -Original Message-
> From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Aaron Conole
> Sent: Monday, January 11, 2016 6:51 PM
> To: Zoltan Kiss
> Cc: dev@openvswitch.org; Flavio Leitner
> Subject: Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization
> from cmdline to db
> 
> Zoltan Kiss  writes:
> > On 08/01/16 16:31, Aaron Conole wrote:
> >> Panu Matilainen  writes:
> >>> On 01/04/2016 11:46 PM, Aaron Conole wrote:
> >>>> Existing DPDK integration is provided by use of command line options
> which
> >>>> must be split out and passed to librte in a special manner. However,
> this
> >>>> forces any configuration to be passed by way of a special DPDK flag, and
> >>>> interferes with ovs+dpdk packaging solutions.
> >>>>
> >>>> This commit delays dpdk initialization until the first DPDK netdev is
> added
> >>>> to the bridge, at which point ovs initializes librte.
> >>>
> >>> On thing to keep in mind is that rte_eal_init() can and will tear down
> >>> the entire process on failure since DPDK calls rte_panic() if
> >>> something so much as sneezes. In current OVS this occurs on service
> >>> startup where its relatively harmless, but with lazy initialization
> >>> there could be already be other activity that is in risk of getting
> >>> terminated when the first DPDK port is added.
> >>>
> >>> Fixing rte_eal_init() to gracefully return on failure has been
> >>> discussed, and agreed on in principle, on DPDK list but all current
> >>> DPDK versions are nasty wrt that.
> >>>
> >>>   - Panu -
> >>
> >> So, I've waffled back and forth on this. I understand the reason to be
> >> nervous about an always init option (because that wastes lots of
> >> resources when the system won't ever use dpdk). I also understand the
> >> possible issues *today* with dpdk_init, but even then, it's a dpdk issue
> >> which we want fixed anyway, so I don't know that this should hold up
> >> this patch.
> >
> > I couldn't find the original email where this discussion happened: why
> > is it required to be able to init DPDK on the fly? I mean it's a nice
> > bit, but brings in a lot of trouble. On the other hand, asking the
> > user to set a "other_config:odp=true" and then restart ovs-vswitchd is
> > not a huge thing to ask.
> 
> You won't find such a discussion - it's never been "required," as
> such. It is very desirable, as having such automatic behavior reduces the
> amount of steps required to get up and running with DPDK enabled
> OVS. This is, imho, the argument of both Panu and Kevin when they think
> a big on/off switch is less than elegant. I tend to agree with that, as well.
> 
> If the user is going through the trouble of compiling with DPDK support, and
> then wants to add a DPDK port, having to also set
> "other_config:dpdk=yes" seems like too many ok dialogs. I hope the
> analogy makes sense.
> 
> That said, it's really an unneeded enhancement, and I've pitched the
> idea to folks at the office within my elastic-shooting range. The answer
> has been consistently "This is an enhancement, not a requirement." So
> I'll drop the lazy-init feature for now.
> 
> >> It's definitely a more elegant solution to do the lazy init, but I think
> >> there could be times where we want a "stop everything" button for
> >> occasions where testing without DPDK doing it's thing are desired.
> >>
> >> However, I think I've come up with a solution that gives us flexibility
> >> to support these cases without much additional work, so let me know what
> >> you think:
> >>
> >> First, go back to the dpdk true/false flag
> >> Second, add a patch in the series which changes true/false to a tristate
> >> on/off/lazy allowing the policy of when to initialize DPDK to be user
> >> defined. We can default it to 'off' or 'lazy', but it can be changed to
> >> 'on' if we want.
> >>
> >> What do folks think? Too much work and code for not enough gains?
> 
> As I wrote above, the 'second' part of this is a great follow up
> enhancement, but for now I'm going to go back to the giant flag, and we
> can take it as 'future development'.

I think we all agree that removing the vswitchd dpdk mandatory cmdline args by
putting them in the db/code with defaults is good for usability and getting that
alone enabled through this patch would be a good outcome IMHO.

I see "other_config:dpdk=yes" and lazy init's as ways to enable a common build.
That's good for usability and support but I think it's a separate enough change
to warrant a separate patchset/discussion.

> ___
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-12 Thread Aaron Conole
"Traynor, Kevin"  writes:
>> -Original Message-
>> From: Aaron Conole [mailto:acon...@redhat.com]
>> Sent: Monday, January 4, 2016 9:47 PM
>> To: dev@openvswitch.org; Flavio Leitner; Traynor, Kevin
>> Subject: [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to
>> db
>> 
>> Existing DPDK integration is provided by use of command line options which
>> must be split out and passed to librte in a special manner. However, this
>> forces any configuration to be passed by way of a special DPDK flag, and
>> interferes with ovs+dpdk packaging solutions.
>> 
>> This commit delays dpdk initialization until the first DPDK netdev is added
>> to the bridge, at which point ovs initializes librte. It pulls all of
>> the config data from the OVS database, and assembles a new argv/argc
>> pair to be passed along.
>> 
>> Signed-off-by: Aaron Conole 
>> ---
>> v2:
>> * Removed trailing whitespace
>> * Followed for() loop brace coding style
>> * Automatically enable DPDK when adding a DPDK enabled port
>> * Fixed an issue on startup when DPDK enabled ports are present
>> * Updated the documentation (including vswitch.xml) and documented all
>>   new parameters
>> * Dropped the premature initialization test
>
> Hi, mostly very minor comments below,

Kevin, thanks for the review!

>
>> 
>> INSTALL.DPDK.md |  75 
>>  lib/netdev-dpdk.c   | 224 +++---
>> --
>>  lib/netdev-dpdk.h   |  19 ++--
>>  vswitchd/bridge.c   |   3 +
>>  vswitchd/ovs-vswitchd.c |  25 +-
>>  vswitchd/vswitch.xml| 102 +-
>>  6 files changed, 341 insertions(+), 107 deletions(-)
>> 
>> diff --git a/INSTALL.DPDK.md b/INSTALL.DPDK.md
>> index 96b686c..2dd2120 100644
>> --- a/INSTALL.DPDK.md
>> +++ b/INSTALL.DPDK.md
>> @@ -143,22 +143,59 @@ Using the DPDK with ovs-vswitchd:
>> 
>>  5. Start vswitchd:
>> 
>> -   DPDK configuration arguments can be passed to vswitchd via `--dpdk`
>> -   argument. This needs to be first argument passed to vswitchd process.
>> -   dpdk arg -c is ignored by ovs-dpdk, but it is a required parameter
>> -   for dpdk initialization.
>> +   DPDK configuration arguments can be passed to vswitchd via Open_vSwitch
>> +   other_config database. The recognized configuration options are listed.
>
> 'Defaults will be provided for all values not set.'

Thanks, will add this.

>
>> +
>> +   * dpdk-lcore-mask
>> +   Specifies the CPU cores on which dpdk lcore threads should be spawned.
>> +   The DPDK lcore threads are used for DPDK library tasks, such as
>> +   library internal message processing, logging, etc. Value should be in
>> +   the form of a hex string (so '0x123') similar to the 'taskset' mask
>> +   input.
>
> 'CPU cores' and '0x123' imply it will be multiple cores in this case - better
> to change to CPU core and 0x1
>
> Also, I don't think the 0x prefix is accepted based on using pmd-cpu-mask.

Hrrm.. okay. I used the documentation on pmd-cpu-mask as my guideline,
so if that's broken it's a bug against pmd-cpu-mask as well (it's
documented as a ).

>> +   If not specified, the value will be determined by choosing the lowest
>> +   CPU core from initial cpu affinity list. Otherwise, the value will be
>> +   passed directly to the DPDK library.
>> +   For performance reasons, it is best to set this to a single core on
>> +   the system, rather than allow lcore threads to float.
>
> I suppose it depends on the system load and vswitch usage as to which will 
> give
> better performance but I agree setting a dedicated core is at least more
> deterministic and less risky, so statement is probably fine.

Well, I used the advice in rings as my guideline here. I think it's
correct to say that the workload is important. Okay, I'll think if
there's a better comment to use here.

>> +
>> +   * dpdk-mem-channels
>> +   This sets the number of memory spread channels per CPU socket. It is
>> purely
>> +   an optimization flag.
>> +
>> +   * dpdk-alloc-mem
>> +   This sets the total memory to preallocate from hugepages regardless of
>> +   processor socket. It is recommended to use dpdk-socket-mem instead.
>> +
>> +   * dpdk-socket-mem
>> +   Comma separated list of memory to pre-allocate from hugepages on specific
>> +   sockets.
>> +
>> +   * dpdk-hugepage-dir
>> +   Directory where hugetlbfs is mounted
>> +
>> +   * cuse-dev-name
>> +   Option to set the vhost_cuse character device name.
>> +
>> +   * vhost-sock-dir
>> +   Option to set the path to the vhost_user unix socket files.
>> +
>> +   NOTE: Changing any of these options requires restarting the ovs-vswitchd
>> +   application.
>> +
>> +   Open vSwitch can be started as normal. DPDK will not be initialized until
>> +   the first DPDK-enabled port is added to the bridge.
>> 
>> ```
>> export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
>> -   ovs-vswitchd --dpdk -c 0x1 -n 4 -- unix:$DB_SOCK --pidfile --detach
>> +   ovs-vswitchd unix:$DB_SOCK --pidfile --detac

Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-12 Thread Traynor, Kevin
> -Original Message-
> From: Aaron Conole [mailto:acon...@redhat.com]
> Sent: Monday, January 4, 2016 9:47 PM
> To: dev@openvswitch.org; Flavio Leitner; Traynor, Kevin
> Subject: [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to
> db
> 
> Existing DPDK integration is provided by use of command line options which
> must be split out and passed to librte in a special manner. However, this
> forces any configuration to be passed by way of a special DPDK flag, and
> interferes with ovs+dpdk packaging solutions.
> 
> This commit delays dpdk initialization until the first DPDK netdev is added
> to the bridge, at which point ovs initializes librte. It pulls all of
> the config data from the OVS database, and assembles a new argv/argc
> pair to be passed along.
> 
> Signed-off-by: Aaron Conole 
> ---
> v2:
> * Removed trailing whitespace
> * Followed for() loop brace coding style
> * Automatically enable DPDK when adding a DPDK enabled port
> * Fixed an issue on startup when DPDK enabled ports are present
> * Updated the documentation (including vswitch.xml) and documented all
>   new parameters
> * Dropped the premature initialization test

Hi, mostly very minor comments below,

> 
> INSTALL.DPDK.md |  75 
>  lib/netdev-dpdk.c   | 224 +++---
> --
>  lib/netdev-dpdk.h   |  19 ++--
>  vswitchd/bridge.c   |   3 +
>  vswitchd/ovs-vswitchd.c |  25 +-
>  vswitchd/vswitch.xml| 102 +-
>  6 files changed, 341 insertions(+), 107 deletions(-)
> 
> diff --git a/INSTALL.DPDK.md b/INSTALL.DPDK.md
> index 96b686c..2dd2120 100644
> --- a/INSTALL.DPDK.md
> +++ b/INSTALL.DPDK.md
> @@ -143,22 +143,59 @@ Using the DPDK with ovs-vswitchd:
> 
>  5. Start vswitchd:
> 
> -   DPDK configuration arguments can be passed to vswitchd via `--dpdk`
> -   argument. This needs to be first argument passed to vswitchd process.
> -   dpdk arg -c is ignored by ovs-dpdk, but it is a required parameter
> -   for dpdk initialization.
> +   DPDK configuration arguments can be passed to vswitchd via Open_vSwitch
> +   other_config database. The recognized configuration options are listed.

'Defaults will be provided for all values not set.'

> +
> +   * dpdk-lcore-mask
> +   Specifies the CPU cores on which dpdk lcore threads should be spawned.
> +   The DPDK lcore threads are used for DPDK library tasks, such as
> +   library internal message processing, logging, etc. Value should be in
> +   the form of a hex string (so '0x123') similar to the 'taskset' mask
> +   input.

'CPU cores' and '0x123' imply it will be multiple cores in this case - better
to change to CPU core and 0x1

Also, I don't think the 0x prefix is accepted based on using pmd-cpu-mask.

> +   If not specified, the value will be determined by choosing the lowest
> +   CPU core from initial cpu affinity list. Otherwise, the value will be
> +   passed directly to the DPDK library.
> +   For performance reasons, it is best to set this to a single core on
> +   the system, rather than allow lcore threads to float.

I suppose it depends on the system load and vswitch usage as to which will give
better performance but I agree setting a dedicated core is at least more
deterministic and less risky, so statement is probably fine.

> +
> +   * dpdk-mem-channels
> +   This sets the number of memory spread channels per CPU socket. It is
> purely
> +   an optimization flag.
> +
> +   * dpdk-alloc-mem
> +   This sets the total memory to preallocate from hugepages regardless of
> +   processor socket. It is recommended to use dpdk-socket-mem instead.
> +
> +   * dpdk-socket-mem
> +   Comma separated list of memory to pre-allocate from hugepages on specific
> +   sockets.
> +
> +   * dpdk-hugepage-dir
> +   Directory where hugetlbfs is mounted
> +
> +   * cuse-dev-name
> +   Option to set the vhost_cuse character device name.
> +
> +   * vhost-sock-dir
> +   Option to set the path to the vhost_user unix socket files.
> +
> +   NOTE: Changing any of these options requires restarting the ovs-vswitchd
> +   application.
> +
> +   Open vSwitch can be started as normal. DPDK will not be initialized until
> +   the first DPDK-enabled port is added to the bridge.
> 
> ```
> export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
> -   ovs-vswitchd --dpdk -c 0x1 -n 4 -- unix:$DB_SOCK --pidfile --detach
> +   ovs-vswitchd unix:$DB_SOCK --pidfile --detach
> ```
> 
> If allocated more than one GB hugepage (as for IVSHMEM), set amount and
> use NUMA node 0 memory:
> 
> ```
> -   ovs-vswitchd --dpdk -c 0x1 -n 4 --socket-mem 1024,0 \
> -   -- unix:$DB_SOCK --pidfile --detach
> +   ovs-vsctl --no-wait set Open_vSwitch .
> other_config:dpdk_socket_mem="1024,0"
> +   ovs-vswitchd unix:$DB_SOCK --pidfile --detach
> ```
> 
>  6. Add bridge & ports
> @@ -521,11 +558,12 @@ have arbitrary names.
>   `/usr/local/var/run/openvswitch/vhost-user-1`, which you must provide

Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-11 Thread Aaron Conole
Zoltan Kiss  writes:
> On 08/01/16 16:31, Aaron Conole wrote:
>> Panu Matilainen  writes:
>>> On 01/04/2016 11:46 PM, Aaron Conole wrote:
 Existing DPDK integration is provided by use of command line options which
 must be split out and passed to librte in a special manner. However, this
 forces any configuration to be passed by way of a special DPDK flag, and
 interferes with ovs+dpdk packaging solutions.

 This commit delays dpdk initialization until the first DPDK netdev is added
 to the bridge, at which point ovs initializes librte.
>>>
>>> On thing to keep in mind is that rte_eal_init() can and will tear down
>>> the entire process on failure since DPDK calls rte_panic() if
>>> something so much as sneezes. In current OVS this occurs on service
>>> startup where its relatively harmless, but with lazy initialization
>>> there could be already be other activity that is in risk of getting
>>> terminated when the first DPDK port is added.
>>>
>>> Fixing rte_eal_init() to gracefully return on failure has been
>>> discussed, and agreed on in principle, on DPDK list but all current
>>> DPDK versions are nasty wrt that.
>>>
>>> - Panu -
>>
>> So, I've waffled back and forth on this. I understand the reason to be
>> nervous about an always init option (because that wastes lots of
>> resources when the system won't ever use dpdk). I also understand the
>> possible issues *today* with dpdk_init, but even then, it's a dpdk issue
>> which we want fixed anyway, so I don't know that this should hold up
>> this patch.
>
> I couldn't find the original email where this discussion happened: why
> is it required to be able to init DPDK on the fly? I mean it's a nice
> bit, but brings in a lot of trouble. On the other hand, asking the
> user to set a "other_config:odp=true" and then restart ovs-vswitchd is
> not a huge thing to ask.

You won't find such a discussion - it's never been "required," as
such. It is very desirable, as having such automatic behavior reduces the
amount of steps required to get up and running with DPDK enabled
OVS. This is, imho, the argument of both Panu and Kevin when they think
a big on/off switch is less than elegant. I tend to agree with that, as well.

If the user is going through the trouble of compiling with DPDK support, and
then wants to add a DPDK port, having to also set
"other_config:dpdk=yes" seems like too many ok dialogs. I hope the
analogy makes sense.

That said, it's really an unneeded enhancement, and I've pitched the
idea to folks at the office within my elastic-shooting range. The answer
has been consistently "This is an enhancement, not a requirement." So
I'll drop the lazy-init feature for now.

>> It's definitely a more elegant solution to do the lazy init, but I think
>> there could be times where we want a "stop everything" button for
>> occasions where testing without DPDK doing it's thing are desired.
>>
>> However, I think I've come up with a solution that gives us flexibility
>> to support these cases without much additional work, so let me know what
>> you think:
>>
>> First, go back to the dpdk true/false flag
>> Second, add a patch in the series which changes true/false to a tristate
>> on/off/lazy allowing the policy of when to initialize DPDK to be user
>> defined. We can default it to 'off' or 'lazy', but it can be changed to
>> 'on' if we want.
>>
>> What do folks think? Too much work and code for not enough gains?

As I wrote above, the 'second' part of this is a great follow up
enhancement, but for now I'm going to go back to the giant flag, and we
can take it as 'future development'.
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-11 Thread Zoltan Kiss



On 08/01/16 16:31, Aaron Conole wrote:

Panu Matilainen  writes:

On 01/04/2016 11:46 PM, Aaron Conole wrote:

Existing DPDK integration is provided by use of command line options which
must be split out and passed to librte in a special manner. However, this
forces any configuration to be passed by way of a special DPDK flag, and
interferes with ovs+dpdk packaging solutions.

This commit delays dpdk initialization until the first DPDK netdev is added
to the bridge, at which point ovs initializes librte.


On thing to keep in mind is that rte_eal_init() can and will tear down
the entire process on failure since DPDK calls rte_panic() if
something so much as sneezes. In current OVS this occurs on service
startup where its relatively harmless, but with lazy initialization
there could be already be other activity that is in risk of getting
terminated when the first DPDK port is added.

Fixing rte_eal_init() to gracefully return on failure has been
discussed, and agreed on in principle, on DPDK list but all current
DPDK versions are nasty wrt that.

- Panu -


So, I've waffled back and forth on this. I understand the reason to be
nervous about an always init option (because that wastes lots of
resources when the system won't ever use dpdk). I also understand the
possible issues *today* with dpdk_init, but even then, it's a dpdk issue
which we want fixed anyway, so I don't know that this should hold up
this patch.


I couldn't find the original email where this discussion happened: why 
is it required to be able to init DPDK on the fly? I mean it's a nice 
bit, but brings in a lot of trouble. On the other hand, asking the user 
to set a "other_config:odp=true" and then restart ovs-vswitchd is not a 
huge thing to ask.





It's definitely a more elegant solution to do the lazy init, but I think
there could be times where we want a "stop everything" button for
occasions where testing without DPDK doing it's thing are desired.

However, I think I've come up with a solution that gives us flexibility
to support these cases without much additional work, so let me know what
you think:

First, go back to the dpdk true/false flag
Second, add a patch in the series which changes true/false to a tristate
on/off/lazy allowing the policy of when to initialize DPDK to be user
defined. We can default it to 'off' or 'lazy', but it can be changed to
'on' if we want.

What do folks think? Too much work and code for not enough gains?

Thanks,
Aaron

PS: Thanks for looking at this, Panu!
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-08 Thread Aaron Conole
Panu Matilainen  writes:
> On 01/04/2016 11:46 PM, Aaron Conole wrote:
>> Existing DPDK integration is provided by use of command line options which
>> must be split out and passed to librte in a special manner. However, this
>> forces any configuration to be passed by way of a special DPDK flag, and
>> interferes with ovs+dpdk packaging solutions.
>>
>> This commit delays dpdk initialization until the first DPDK netdev is added
>> to the bridge, at which point ovs initializes librte.
>
> On thing to keep in mind is that rte_eal_init() can and will tear down
> the entire process on failure since DPDK calls rte_panic() if
> something so much as sneezes. In current OVS this occurs on service
> startup where its relatively harmless, but with lazy initialization
> there could be already be other activity that is in risk of getting
> terminated when the first DPDK port is added.
>
> Fixing rte_eal_init() to gracefully return on failure has been
> discussed, and agreed on in principle, on DPDK list but all current
> DPDK versions are nasty wrt that.
>
>   - Panu -

So, I've waffled back and forth on this. I understand the reason to be
nervous about an always init option (because that wastes lots of
resources when the system won't ever use dpdk). I also understand the
possible issues *today* with dpdk_init, but even then, it's a dpdk issue
which we want fixed anyway, so I don't know that this should hold up
this patch.

It's definitely a more elegant solution to do the lazy init, but I think
there could be times where we want a "stop everything" button for
occasions where testing without DPDK doing it's thing are desired.

However, I think I've come up with a solution that gives us flexibility
to support these cases without much additional work, so let me know what
you think:

First, go back to the dpdk true/false flag
Second, add a patch in the series which changes true/false to a tristate
on/off/lazy allowing the policy of when to initialize DPDK to be user
defined. We can default it to 'off' or 'lazy', but it can be changed to
'on' if we want.

What do folks think? Too much work and code for not enough gains?

Thanks,
Aaron

PS: Thanks for looking at this, Panu!
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v2 2/3] netdev-dpdk: Convert initialization from cmdline to db

2016-01-07 Thread Panu Matilainen

On 01/04/2016 11:46 PM, Aaron Conole wrote:

Existing DPDK integration is provided by use of command line options which
must be split out and passed to librte in a special manner. However, this
forces any configuration to be passed by way of a special DPDK flag, and
interferes with ovs+dpdk packaging solutions.

This commit delays dpdk initialization until the first DPDK netdev is added
to the bridge, at which point ovs initializes librte.


On thing to keep in mind is that rte_eal_init() can and will tear down 
the entire process on failure since DPDK calls rte_panic() if something 
so much as sneezes. In current OVS this occurs on service startup where 
its relatively harmless, but with lazy initialization there could be 
already be other activity that is in risk of getting terminated when the 
first DPDK port is added.


Fixing rte_eal_init() to gracefully return on failure has been 
discussed, and agreed on in principle, on DPDK list but all current DPDK 
versions are nasty wrt that.


- Panu -

___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev