There is 3 upstream patches[1] "Under Review", that has been created to
mitigate this specific situation. The test (with these patches) so far
has been proven to provide better performance.

The patches consist on allocating the percpu counters in page-sized
batch chunks.

[1] - Patches :
http://patchwork.ozlabs.org/patch/697259/
http://patchwork.ozlabs.org/patch/697260/
http://patchwork.ozlabs.org/patch/697261/

- Eric

** Summary changed:

- netfilter regression introducing a performance slowdown in binary ip/ip6tables
+ netfilter regression introducing a performance slowdown in binary 
arp/iptables/ip6tables

** Summary changed:

- netfilter regression introducing a performance slowdown in binary 
arp/iptables/ip6tables
+ netfilter regression introducing a performance slowdown in binary 
arp/ip/ip6tables

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1640786

Title:
  netfilter regression introducing a performance slowdown in binary
  arp/ip/ip6tables

Status in linux package in Ubuntu:
  Confirmed

Bug description:
  Explanation :

  It has been brought to my attention that Ubuntu kernel 4.4 has a
  severe netfilter regression affecting the performance of
  "/sbin/iptables" command, especially when adding large number of
  policies. My source have documented everything here[2].

  I was able to reproduce the situation on my side, and a kernel bisect
  identified the same offending commit[1] as my source found for this
  bug.

  Running the commit right before the offending one have proven to have
  expected performance :

  # commit [71ae0dff] <== Offending commit
  real 0m33.314s
  user 0m1.520s
  sys 0m26.192s

  # commit [d7b59742] <== Right before offending commit
  real 0m5.952s
  user 0m0.124s
  sys 0m0.220s

  Reproducer :

  $ iptables -F
  $ echo 3 > /proc/sys/vm/drop_caches
  $ time (./list-addrs 3000 | xargs -n1 iptables -A FORWARD -j ACCEPT -s)

  "list-addrs" script can be found here[3]

  Note :

  * "iptables-restore" doesn't suffer of that netfilter regression, and
  I'm also aware that "iptables-restore" is the favourite approach since
  it is way more efficient than iptables that is executed over and over,
  once for each policy one want to set, but since "/sbin/iptables" takes
  vastly longer to perform with that commit, I think this need to be
  address anyway.

  * I also tried with the latest and greatest iptables upstream code,
  and got the same result.

  Reference :
  [1] - 
https://github.com/torvalds/linux/commit/71ae0dff02d756e4d2ca710b79f2ff5390029a5f
  [2] - https://gist.github.com/williammartin/b75e3faf5964648299e4d985413e6c0c
  [3] - 
https://gist.github.com/williammartin/b75e3faf5964648299e4d985413e6c0c#file-list-addrs

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1640786/+subscriptions

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to