[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <7d432179-5e3a-febe-ced7-39ea33ba4906@redhat.com>
Date: Sun, 4 Jun 2017 09:11:53 +0200
From: Florian Weimer <fweimer@...hat.com>
To: Jesper Dangaard Brouer <brouer@...hat.com>, netdev@...r.kernel.org,
Eric Dumazet <eric.dumazet@...il.com>
Cc: xiyou.wangcong@...il.com
Subject: Re: [net-next PATCH 2/3] net: reduce cycles spend on ICMP replies
that gets rate limited
On 01/09/2017 04:04 PM, Jesper Dangaard Brouer wrote:
> This patch split the global and per (inet)peer ICMP-reply limiter
> code, and moves the global limit check to earlier in the packet
> processing path. Thus, avoid spending cycles on ICMP replies that
> gets limited/suppressed anyhow.
>
> The global ICMP rate limiter icmp_global_allow() is a good solution,
> it just happens too late in the process. The kernel goes through the
> full route lookup (return path) for the ICMP message, before taking
> the rate limit decision of not sending the ICMP reply.
>
> Details: The kernels global rate limiter for ICMP messages got added
> in commit 4cdf507d5452 ("icmp: add a global rate limitation"). It is
> a token bucket limiter with a global lock. It brilliantly avoids
> locking congestion by only updating when 20ms (HZ/50) were elapsed. It
> can then avoids taking lock when credit is exhausted (when under
> pressure) and time constraint for refill is not yet meet.
This patch removed the rate limit bypass for localhost. As a result, it
is impossible to write deterministic UDP client tests tests which
exercise failover behavior in response to unreachable servers.
H.J. Lu noted that a glibc test started failing on kernel 4.11 and
identified the regression:
https://sourceware.org/ml/libc-alpha/2017-06/msg00167.html
(I have more tests which are afflicted by this, but are not yet in glibc
upstream.)
This is particularly annoying because we already run such tests in a
network namespace for isolation, but the rate limit counter is global,
so that doesn't help here.
I'm attaching a self-contained test case. It fails for me with:
localhost-icmp: iteration 50: no ICMP message (poll timeout)
On kernel 4.10, it passes and runs within just a few milliseconds.
Would you please fix this in some way? Thanks.
Florian
View attachment "localhost-icmp.c" of type "text/x-csrc" (1671 bytes)
Powered by blists - more mailing lists