diff mbox

[ovs-dev] ovn: broadcast packets dropped with "drop recirc action"

Message ID 621353cee3c3e2308a0f685d991df637@imap.linux.ibm.com
State Not Applicable
Headers show

Commit Message

Ramu Ramamurthy March 16, 2016, 11 p.m. UTC
On 2016-03-15 11:16, Andy Zhou wrote:
> On Mon, Mar 14, 2016 at 12:11 PM, Ramu Ramamurthy <
> sramamur@linux.vnet.ibm.com> wrote:
> 
>> When a logical switch (localnet) has lots of ports on a hypervisor,
>> I find that broadcast packets from one of the ports is only forwarded 
>> to
>> a subset of the other ports, and the kernel module shows the message -
>> "kernel: openvswitch: ovs-system: deferred action limit reached, drop
>> recirc action"
>> 
>> There appears to be a discussion of a related problem and a possible 
>> patch
>> here:
>> http://openvswitch.org/pipermail//discuss/2015-October/019168.html
>> http://openvswitch.org/pipermail//discuss/2015-October/019198.html
> 
> 
> Thanks for the bug report.
> 
> Those patches are now dropped since I have not heard back from the bug
> reporter.
> 
> I have just posted a potential fix as RFC at:
> 
> http://openvswitch.org/pipermail/dev/2016-March/067794.html
> 
> Would you please test it against your set up?  Thanks.

I tried the patch in the link above on devstack-with-ovn. The 
openvswitch kernel module
is rebuilt with the above patch, I find that there is a system hang,
when I send the broadcast packet. The same test earlier showed "drop 
recirc action" errors.

The following change works however,

iff --git a/datapath/actions.c b/datapath/actions.c
index 20413c9..39dedcc 100644
when I set it to 100, I am not able to load the openvswitch module - the 
following errors are seen.

[ 1094.163171] WARNING: at mm/percpu.c:896 pcpu_alloc+0x64a/0x670()
[ 1094.163174] illegal size (46408) or align (8) for percpu allocation

It appears that there is a hard limit on DEFERRED_ACTION_FIFO_SIZE 
determined by:
PCPU_MIN_UNIT_SIZE.
diff mbox

Patch

--- a/datapath/actions.c
+++ b/datapath/actions.c
@@ -72,7 +72,7 @@  struct ovs_frag_data {
  static DEFINE_PER_CPU(struct ovs_frag_data, ovs_frag_data_storage);
  #endif

-#define DEFERRED_ACTION_FIFO_SIZE 10
+#define DEFERRED_ACTION_FIFO_SIZE 70

But, it appears that we cannot arbitrarily increase  
DEFERRED_ACTION_FIFO_SIZE  because