From: Thomas Gleixner <tglx@linutronix.de>
To: Lorenzo Colitti <lorenzo@google.com>
Cc: "Greg KH" <gregkh@linuxfoundation.org>,
"Maciej Żenczykowski" <zenczykowski@gmail.com>,
"Ingo Molnar" <mingo@kernel.org>,
"Anna-Maria Behnsen" <anna-maria@linutronix.de>,
lkml <linux-kernel@vger.kernel.org>,
mikael.beckius@windriver.com,
"Maciej Żenczykowski" <maze@google.com>,
"Will Deacon" <will@kernel.org>
Subject: Re: [PATCH] hrtimer: Update softirq_expires_next correctly after __hrtimer_get_next_event()
Date: Thu, 22 Apr 2021 12:07:58 +0200 [thread overview]
Message-ID: <87sg3iy6m9.ffs@nanos.tec.linutronix.de> (raw)
In-Reply-To: <87v98fxjtm.ffs@nanos.tec.linutronix.de>
On Thu, Apr 22 2021 at 02:08, Thomas Gleixner wrote:
> On Wed, Apr 21 2021 at 23:08, Lorenzo Colitti wrote:
> That said, even if you manage to avoid the timer hardware trainwreck on
> which your system is depending on right now, then still the underlying
> problem remains that hrtimers are not the proper tool for high frequency
> modification and never will be.
>
> There are smarter approaches to that USB/NTB problem, but that's beyond
> the discussion at hand.
And because I was looking at it anyway, here are some hints:
Buffersize: 16k
Timeout: 300us
Let's assume small packets with a size of 256 bytes each. The packets
arrive with a period of ~299us, i.e. right before the timer fires. Which
means the timer wont fire because it's moved 300us ahead each time and
the buffer is sent to the wire when it's full.
That means the 1st packet in the buffer is sent 63 * 299 us = 18.8ms
after it was queued in the buffer.
How is that supposed to be correct? I know, throughput is what matters
and correctness is overrated.
For the high volume traffic case the timer is not needed at all if
the logic is done proper.
xmit()
{
if (!packet_fits_in_buffer())
send_buffer_and_cancel_timer_if_armed();
if (first_packet_in_buffer())
buffer_deadline = now() + MAX_DELAY;
add_packet_to_buffer();
/* Are more packets available for xmit at the core? */
if (!xmit_queue_empty())
return;
/*
* Last packet from network core for now, check how long the
* first packet sits in the buffer.
*/
if (buffer_deadline <= now()) {
send_buffer_and_cancel_timer_if_armed();
return;
}
if (!timer_armed())
arm_timer(buffer_deadline);
}
IOW, as long as the network core has packets outstanding for xmit, there
is no point in arming the timer at all.
But yes, that needs more work and thoughts than the 'bolt and duct tape'
approach which led to the current situation.
Aside of that it would certainly be interesting to start very simple
with an experiment which does not use a timer in the first place:
xmit()
{
if (!packet_fits_in_buffer())
send_buffer();
add_packet_to_buffer();
/* Are more packets available for xmit at the core? */
if (!xmit_queue_empty())
return;
/* Last packet from network core for now. Drain it. */
send_buffer();
}
I wouldn't be surprised if that'd turn out to be the right thing to do
both latency-wise and throughput-wise.
But that'd be not convoluted enough and of course the commit which
introduced that magic does not explain anything at all, so I can't tell
if that was actually tried or not.
Thanks,
tglx
next prev parent reply other threads:[~2021-04-22 10:08 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-13 16:55 Maciej Żenczykowski
2021-04-13 17:14 ` Greg KH
2021-04-14 2:49 ` Lorenzo Colitti
2021-04-15 16:47 ` Thomas Gleixner
2021-04-20 3:12 ` Maciej Żenczykowski
2021-04-20 6:44 ` Thomas Gleixner
2021-04-20 8:15 ` Lorenzo Colitti
2021-04-20 14:19 ` Thomas Gleixner
2021-04-21 14:08 ` Lorenzo Colitti
2021-04-21 14:40 ` Lorenzo Colitti
2021-04-21 15:22 ` Greg KH
2021-04-22 0:08 ` Thomas Gleixner
2021-04-22 10:07 ` Thomas Gleixner [this message]
2021-04-22 14:20 ` Lorenzo Colitti
2021-04-22 15:35 ` Thomas Gleixner
2021-04-26 8:49 ` [PATCH] hrtimer: Avoid double reprogramming in __hrtimer_start_range_ns() Thomas Gleixner
2021-04-26 9:40 ` Peter Zijlstra
2021-04-26 12:25 ` Peter Zijlstra
2021-05-14 19:29 ` Thomas Gleixner
2021-04-26 12:33 ` Thomas Gleixner
2021-04-26 12:40 ` Peter Zijlstra
2021-04-26 14:27 ` Thomas Gleixner
-- strict thread matches above, loose matches on Subject: below --
2021-02-12 13:38 Sv: [PATCH] hrtimer: Interrupt storm on clock_settime Beckius, Mikael
2021-02-23 16:02 ` [PATCH] hrtimer: Update softirq_expires_next correctly after __hrtimer_get_next_event() Anna-Maria Behnsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sg3iy6m9.ffs@nanos.tec.linutronix.de \
--to=tglx@linutronix.de \
--cc=anna-maria@linutronix.de \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo@google.com \
--cc=maze@google.com \
--cc=mikael.beckius@windriver.com \
--cc=mingo@kernel.org \
--cc=will@kernel.org \
--cc=zenczykowski@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome