From: Hannes Frederic Sowa <hidden> Date: 2015-10-26 12:51:46
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
E.g. systemd enables timestamping during boot-up on the journald af-unix
sockets, thus causing the system to globally enable timestamping in the
lower networking stack. Still, it is very probable that timestamping
gets activated, by e.g. dhclient or various NTP implementations.
Reported-by: Jesper Dangaard Brouer <redacted>
Signed-off-by: Hannes Frederic Sowa <redacted>
---
net/core/sock.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
From: Richard Cochran <richardcochran@gmail.com> Date: 2015-10-26 13:19:33
On Mon, Oct 26, 2015 at 01:51:37PM +0100, Hannes Frederic Sowa wrote:
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
What problem is this patch trying to solve?
Thanks,
Richard
From: Hannes Frederic Sowa <hidden> Date: 2015-10-26 13:32:59
Hello,
On Mon, Oct 26, 2015, at 14:19, Richard Cochran wrote:
On Mon, Oct 26, 2015 at 01:51:37PM +0100, Hannes Frederic Sowa wrote:
quoted
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
What problem is this patch trying to solve?
netstamp_needed is a static-key which enables timestamping code in the
networking stack receive functions for every packet, while it is not
needed for AF_UNIX/LOCAL. So it is merely a small performance
enhancement.
Bye,
Hannes
From: Richard Cochran <richardcochran@gmail.com> Date: 2015-10-27 10:12:02
On Mon, Oct 26, 2015 at 02:32:59PM +0100, Hannes Frederic Sowa wrote:
On Mon, Oct 26, 2015, at 14:19, Richard Cochran wrote:
quoted
On Mon, Oct 26, 2015 at 01:51:37PM +0100, Hannes Frederic Sowa wrote:
quoted
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
What problem is this patch trying to solve?
netstamp_needed is a static-key which enables timestamping code in the
networking stack receive functions for every packet, while it is not
needed for AF_UNIX/LOCAL. So it is merely a small performance
enhancement.
Are there any numbers that show the effect of this enhancement?
Thanks,
Richard
From: Hannes Frederic Sowa <hidden> Date: 2015-10-27 11:09:22
Hi Richard,
On Tue, Oct 27, 2015, at 11:11, Richard Cochran wrote:
On Mon, Oct 26, 2015 at 02:32:59PM +0100, Hannes Frederic Sowa wrote:
quoted
On Mon, Oct 26, 2015, at 14:19, Richard Cochran wrote:
quoted
On Mon, Oct 26, 2015 at 01:51:37PM +0100, Hannes Frederic Sowa wrote:
quoted
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
What problem is this patch trying to solve?
netstamp_needed is a static-key which enables timestamping code in the
networking stack receive functions for every packet, while it is not
needed for AF_UNIX/LOCAL. So it is merely a small performance
enhancement.
Are there any numbers that show the effect of this enhancement?
I haven't personally done any performance numbers.
Jesper (in Cc) noticed that it showed up in perf performance reports
even though he used a very minimal setup. Turned out that
systemd-journald enables timestamping on AF_UNIX sockets which thus
enabled netstamps globally. I think Jesper can chime in here.
Bye,
Hannes
From: Hannes Frederic Sowa <hidden> Date: 2015-10-27 11:15:16
On Tue, Oct 27, 2015, at 12:09, Hannes Frederic Sowa wrote:
Hi Richard,
On Tue, Oct 27, 2015, at 11:11, Richard Cochran wrote:
quoted
On Mon, Oct 26, 2015 at 02:32:59PM +0100, Hannes Frederic Sowa wrote:
quoted
On Mon, Oct 26, 2015, at 14:19, Richard Cochran wrote:
quoted
On Mon, Oct 26, 2015 at 01:51:37PM +0100, Hannes Frederic Sowa wrote:
quoted
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
What problem is this patch trying to solve?
netstamp_needed is a static-key which enables timestamping code in the
networking stack receive functions for every packet, while it is not
needed for AF_UNIX/LOCAL. So it is merely a small performance
enhancement.
Are there any numbers that show the effect of this enhancement?
I haven't personally done any performance numbers.
Jesper (in Cc) noticed that it showed up in perf performance reports
even though he used a very minimal setup. Turned out that
systemd-journald enables timestamping on AF_UNIX sockets which thus
enabled netstamps globally. I think Jesper can chime in here.
Also counter question: why is the netstamp code protected by a
static_key otherwise if not for trying to suppress the code path as
often as possible if not used? ;)
Bye,
Hannes
On Tue, 27 Oct 2015 12:15:16 +0100 Hannes Frederic Sowa [off-list ref] wrote:
On Tue, Oct 27, 2015, at 12:09, Hannes Frederic Sowa wrote:
quoted
Hi Richard,
On Tue, Oct 27, 2015, at 11:11, Richard Cochran wrote:
quoted
On Mon, Oct 26, 2015 at 02:32:59PM +0100, Hannes Frederic Sowa wrote:
quoted
On Mon, Oct 26, 2015, at 14:19, Richard Cochran wrote:
quoted
On Mon, Oct 26, 2015 at 01:51:37PM +0100, Hannes Frederic Sowa wrote:
quoted
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
What problem is this patch trying to solve?
netstamp_needed is a static-key which enables timestamping code in the
networking stack receive functions for every packet, while it is not
needed for AF_UNIX/LOCAL. So it is merely a small performance
enhancement.
Are there any numbers that show the effect of this enhancement?
I haven't personally done any performance numbers.
Jesper (in Cc) noticed that it showed up in perf performance reports
even though he used a very minimal setup. Turned out that
systemd-journald enables timestamping on AF_UNIX sockets which thus
enabled netstamps globally. I think Jesper can chime in here.
Well, it should be quite obvious that requesting a timestamp on every
packet is a fairly expensive, especially when not used for anything.
I can estimate the cost by looking at perf report, on a single-flow
IP-fwd test (1989575 pps) CPU i7-4790K @ 4.2GHz.
I quick IP-fwd test show perf top:
1.54% ksoftirqd/1 [kernel.vmlinux] [k] read_tsc
1.07% ksoftirqd/1 [kernel.vmlinux] [k] ktime_get_with_offset
(1/1989575*10^9)*((1.54+1.07)/100) = 13.12 nanosec
On some of my slower systems, I've seen cost of just reading TSC be
around 32 ns.
Also counter question: why is the netstamp code protected by a
static_key otherwise if not for trying to suppress the code path as
often as possible if not used? ;)
From: Eric Dumazet <hidden> Date: 2015-10-27 13:19:37
On Tue, 2015-10-27 at 12:15 +0100, Hannes Frederic Sowa wrote:
Also counter question: why is the netstamp code protected by a
static_key otherwise if not for trying to suppress the code path as
often as possible if not used? ;)
Any idea of why timestamping is asked on AF_UNIX in the first place ?
For messages sent/received on af_unix sockets, in which place timestamp
is taken ?
Is it at the time skb is cooked and stored in receive queue, or the time
it was dequeued ?
In any case, is your patch changing af_unix behavior ? It is not clear
from your changelog...
From: Hannes Frederic Sowa <hidden> Date: 2015-10-27 13:44:29
On Tue, Oct 27, 2015, at 14:19, Eric Dumazet wrote:
On Tue, 2015-10-27 at 12:15 +0100, Hannes Frederic Sowa wrote:
quoted
Also counter question: why is the netstamp code protected by a
static_key otherwise if not for trying to suppress the code path as
often as possible if not used? ;)
Any idea of why timestamping is asked on AF_UNIX in the first place ?
I guess syslog code want's to have more accurate timetstamps on when the
packet is send.
For messages sent/received on af_unix sockets, in which place timestamp
is taken ?
in unix_sendmsg on the sending unix socket (we check peer unix socket
for timestamp flag).
Is it at the time skb is cooked and stored in receive queue, or the time
it was dequeued ?
No, at time it is send by sendmsg on the sending socket.
In any case, is your patch changing af_unix behavior ? It is not clear
from your changelog...
No, af_unix logic does not pass this logic at all, so we don't need to
care about netstamp code. netstamp_needed is private to dev.c.
Bye,
Hannes
From: Eric Dumazet <hidden> Date: 2015-10-27 14:15:12
On Tue, 2015-10-27 at 14:44 +0100, Hannes Frederic Sowa wrote:
On Tue, Oct 27, 2015, at 14:19, Eric Dumazet wrote:
quoted
On Tue, 2015-10-27 at 12:15 +0100, Hannes Frederic Sowa wrote:
quoted
Also counter question: why is the netstamp code protected by a
static_key otherwise if not for trying to suppress the code path as
often as possible if not used? ;)
Any idea of why timestamping is asked on AF_UNIX in the first place ?
I guess syslog code want's to have more accurate timetstamps on when the
packet is send.
quoted
For messages sent/received on af_unix sockets, in which place timestamp
is taken ?
in unix_sendmsg on the sending unix socket (we check peer unix socket
for timestamp flag).
quoted
Is it at the time skb is cooked and stored in receive queue, or the time
it was dequeued ?
No, at time it is send by sendmsg on the sending socket.
quoted
In any case, is your patch changing af_unix behavior ? It is not clear
from your changelog...
No, af_unix logic does not pass this logic at all, so we don't need to
care about netstamp code. netstamp_needed is private to dev.c.
Thanks for clarifying
Acked-by: Eric Dumazet <edumazet@google.com>
From: David Miller <davem@davemloft.net> Date: 2015-10-28 02:22:57
From: Hannes Frederic Sowa <redacted>
Date: Mon, 26 Oct 2015 13:51:37 +0100
netstamp_needed is toggled for all socket families if they request
timestamping. But some protocols don't need the lower-layer timestamping
code at all. This patch starts disabling it for af-unix.
E.g. systemd enables timestamping during boot-up on the journald af-unix
sockets, thus causing the system to globally enable timestamping in the
lower networking stack. Still, it is very probable that timestamping
gets activated, by e.g. dhclient or various NTP implementations.
Reported-by: Jesper Dangaard Brouer <redacted>
Signed-off-by: Hannes Frederic Sowa <redacted>