From: Gleb Natapov <gleb@redhat.com>
To: Alexander Graf <agraf@suse.de>
Cc: Anthony Liguori <anthony@codemonkey.ws>,
"David S. Ahern" <daahern@cisco.com>, Avi Kivity <avi@redhat.com>,
kvm@vger.kernel.org, "Richard W.M. Jones" <rjones@redhat.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Anyone seeing huge slowdown launching qemu with Linux 2.6.35?
Date: Wed, 4 Aug 2010 19:08:23 +0300 [thread overview]
Message-ID: <20100804160823.GE10499@redhat.com> (raw)
In-Reply-To: <3935DA5C-1FE5-4289-AB99-29FAA7B62580@suse.de>
On Wed, Aug 04, 2010 at 05:59:40PM +0200, Alexander Graf wrote:
>
> On 04.08.2010, at 17:48, Gleb Natapov wrote:
>
> > On Wed, Aug 04, 2010 at 05:31:12PM +0200, Alexander Graf wrote:
> >>
> >> On 04.08.2010, at 17:25, Gleb Natapov wrote:
> >>
> >>> On Wed, Aug 04, 2010 at 09:57:17AM -0500, Anthony Liguori wrote:
> >>>> On 08/04/2010 09:51 AM, David S. Ahern wrote:
> >>>>>
> >>>>> On 08/03/10 12:43, Avi Kivity wrote:
> >>>>>> libguestfs does not depend on an x86 architectural feature.
> >>>>>> qemu-system-x86_64 emulates a PC, and PCs don't have -kernel. We should
> >>>>>> discourage people from depending on this interface for production use.
> >>>>> That is a feature of qemu - and an important one to me as well. Why
> >>>>> should it be discouraged? You end up at the same place -- a running
> >>>>> kernel and in-ram filesystem; why require going through a bootloader
> >>>>> just because the hardware case needs it?
> >>>>
> >>>> It's smoke and mirrors. We're still providing a boot loader it's
> >>>> just a little tiny one that we've written soley for this purpose.
> >>>>
> >>>> And it works fine for production use. The question is whether we
> >>>> ought to be aggressively optimizing it for large initrd sizes. To
> >>>> be honest, after a lot of discussion of possibilities, I've come to
> >>>> the conclusion that it's just not worth it.
> >>>>
> >>>> There are better ways like using string I/O and optimizing the PIO
> >>>> path in the kernel. That should cut down the 1s slow down with a
> >>>> 100MB initrd by a bit. But honestly, shaving a couple hundred ms
> >>>> further off the initrd load is just not worth it using the current
> >>>> model.
> >>>>
> >>> The slow down is not 1s any more. String PIO emulation had many bugs
> >>> that were fixed in 2.6.35. I verified how much time it took to load 100M
> >>> via fw_cfg interface on older kernel and on 2.6.35. On older kernels on
> >>> my machine it took ~2-3 second on 2.6.35 it took 26s. Some optimizations
> >>> that was already committed make it 20s. I have some code prototype that
> >>> makes it 11s. I don't see how we can get below that, surely not back to
> >>> ~2-3sec.
> >>
> >> What exactly is the reason for the slowdown? It can't be only boundary and permission checks, right?
> >>
> >>
> > The big part of slowdown right now is that write into memory is done
> > for each byte. It means for each byte we call kvm_write_guest() and
> > kvm_mmu_pte_write(). The second call is needed in case memory, instruction
> > is trying to write to, is shadowed. Previously we didn't checked for
> > that at all. This can be mitigated by introducing write cache and do
> > combined writes into the memory and unshadow the page if there is more
> > then one write into it. This optimization saves ~10secs. Currently string
>
> Ok, so you tackled that bit already.
>
> > emulation enter guest from time to time to check if event injection is
> > needed and read from userspace is done in 1K chunks, not 4K like it was,
> > but when I made reads to be 4K and disabled guest reentry I haven't seen
> > any speed improvements worth talking about.
>
> So what are we wasting those 10 seconds on then? Does perf tell you anything useful?
>
Not 10, but 7-8 seconds.
After applying cache fix nothing definite as far as I remember (I ran it last time
almost 2 week ago, need to rerun). Code always go through emulator now
and check direction flags to update SI/DI accordingly. Emulator is a big
switch and it calls various callbacks that may also slow things down.
--
Gleb.
WARNING: multiple messages have this Message-ID (diff)
From: Gleb Natapov <gleb@redhat.com>
To: Alexander Graf <agraf@suse.de>
Cc: kvm@vger.kernel.org, qemu-devel@nongnu.org,
"Richard W.M. Jones" <rjones@redhat.com>,
Avi Kivity <avi@redhat.com>, "David S. Ahern" <daahern@cisco.com>
Subject: Re: [Qemu-devel] Anyone seeing huge slowdown launching qemu with Linux 2.6.35?
Date: Wed, 4 Aug 2010 19:08:23 +0300 [thread overview]
Message-ID: <20100804160823.GE10499@redhat.com> (raw)
In-Reply-To: <3935DA5C-1FE5-4289-AB99-29FAA7B62580@suse.de>
On Wed, Aug 04, 2010 at 05:59:40PM +0200, Alexander Graf wrote:
>
> On 04.08.2010, at 17:48, Gleb Natapov wrote:
>
> > On Wed, Aug 04, 2010 at 05:31:12PM +0200, Alexander Graf wrote:
> >>
> >> On 04.08.2010, at 17:25, Gleb Natapov wrote:
> >>
> >>> On Wed, Aug 04, 2010 at 09:57:17AM -0500, Anthony Liguori wrote:
> >>>> On 08/04/2010 09:51 AM, David S. Ahern wrote:
> >>>>>
> >>>>> On 08/03/10 12:43, Avi Kivity wrote:
> >>>>>> libguestfs does not depend on an x86 architectural feature.
> >>>>>> qemu-system-x86_64 emulates a PC, and PCs don't have -kernel. We should
> >>>>>> discourage people from depending on this interface for production use.
> >>>>> That is a feature of qemu - and an important one to me as well. Why
> >>>>> should it be discouraged? You end up at the same place -- a running
> >>>>> kernel and in-ram filesystem; why require going through a bootloader
> >>>>> just because the hardware case needs it?
> >>>>
> >>>> It's smoke and mirrors. We're still providing a boot loader it's
> >>>> just a little tiny one that we've written soley for this purpose.
> >>>>
> >>>> And it works fine for production use. The question is whether we
> >>>> ought to be aggressively optimizing it for large initrd sizes. To
> >>>> be honest, after a lot of discussion of possibilities, I've come to
> >>>> the conclusion that it's just not worth it.
> >>>>
> >>>> There are better ways like using string I/O and optimizing the PIO
> >>>> path in the kernel. That should cut down the 1s slow down with a
> >>>> 100MB initrd by a bit. But honestly, shaving a couple hundred ms
> >>>> further off the initrd load is just not worth it using the current
> >>>> model.
> >>>>
> >>> The slow down is not 1s any more. String PIO emulation had many bugs
> >>> that were fixed in 2.6.35. I verified how much time it took to load 100M
> >>> via fw_cfg interface on older kernel and on 2.6.35. On older kernels on
> >>> my machine it took ~2-3 second on 2.6.35 it took 26s. Some optimizations
> >>> that was already committed make it 20s. I have some code prototype that
> >>> makes it 11s. I don't see how we can get below that, surely not back to
> >>> ~2-3sec.
> >>
> >> What exactly is the reason for the slowdown? It can't be only boundary and permission checks, right?
> >>
> >>
> > The big part of slowdown right now is that write into memory is done
> > for each byte. It means for each byte we call kvm_write_guest() and
> > kvm_mmu_pte_write(). The second call is needed in case memory, instruction
> > is trying to write to, is shadowed. Previously we didn't checked for
> > that at all. This can be mitigated by introducing write cache and do
> > combined writes into the memory and unshadow the page if there is more
> > then one write into it. This optimization saves ~10secs. Currently string
>
> Ok, so you tackled that bit already.
>
> > emulation enter guest from time to time to check if event injection is
> > needed and read from userspace is done in 1K chunks, not 4K like it was,
> > but when I made reads to be 4K and disabled guest reentry I haven't seen
> > any speed improvements worth talking about.
>
> So what are we wasting those 10 seconds on then? Does perf tell you anything useful?
>
Not 10, but 7-8 seconds.
After applying cache fix nothing definite as far as I remember (I ran it last time
almost 2 week ago, need to rerun). Code always go through emulator now
and check direction flags to update SI/DI accordingly. Emulator is a big
switch and it calls various callbacks that may also slow things down.
--
Gleb.
next prev parent reply other threads:[~2010-08-04 16:08 UTC|newest]
Thread overview: 285+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-03 11:13 [Qemu-devel] Anyone seeing huge slowdown launching qemu with Linux 2.6.35? Richard W.M. Jones
2010-08-03 11:33 ` Gleb Natapov
2010-08-03 12:10 ` Richard W.M. Jones
2010-08-03 12:37 ` Gleb Natapov
2010-08-03 12:48 ` Richard W.M. Jones
2010-08-03 13:19 ` Avi Kivity
2010-08-03 13:19 ` Avi Kivity
2010-08-03 14:05 ` Richard W.M. Jones
2010-08-03 14:38 ` Avi Kivity
2010-08-03 14:53 ` Richard W.M. Jones
2010-08-03 16:10 ` Avi Kivity
2010-08-03 16:28 ` Richard W.M. Jones
2010-08-03 16:44 ` Avi Kivity
2010-08-03 16:46 ` Anthony Liguori
2010-08-03 16:46 ` Anthony Liguori
2010-08-03 16:50 ` Avi Kivity
2010-08-03 16:50 ` Avi Kivity
2010-08-03 16:53 ` Anthony Liguori
2010-08-03 16:53 ` Anthony Liguori
2010-08-03 17:01 ` Avi Kivity
2010-08-03 17:01 ` Avi Kivity
2010-08-03 17:42 ` Anthony Liguori
2010-08-03 17:42 ` Anthony Liguori
2010-08-03 17:58 ` Avi Kivity
2010-08-03 17:58 ` Avi Kivity
2010-08-03 18:11 ` Richard W.M. Jones
2010-08-03 18:11 ` Richard W.M. Jones
2010-08-03 18:26 ` Anthony Liguori
2010-08-03 18:26 ` Anthony Liguori
2010-08-03 18:43 ` Avi Kivity
2010-08-03 18:43 ` Avi Kivity
2010-08-03 18:47 ` Avi Kivity
2010-08-03 18:47 ` Avi Kivity
2010-08-03 18:55 ` Anthony Liguori
2010-08-03 18:55 ` Anthony Liguori
2010-08-03 19:00 ` Avi Kivity
2010-08-03 19:00 ` Avi Kivity
2010-08-03 19:05 ` Gleb Natapov
2010-08-03 19:05 ` Gleb Natapov
2010-08-03 19:09 ` Avi Kivity
2010-08-03 19:09 ` Avi Kivity
2010-08-03 19:15 ` Anthony Liguori
2010-08-03 19:15 ` Anthony Liguori
2010-08-03 19:24 ` Avi Kivity
2010-08-03 19:24 ` Avi Kivity
2010-08-03 19:38 ` Anthony Liguori
2010-08-03 19:38 ` Anthony Liguori
2010-08-03 19:41 ` Avi Kivity
2010-08-03 19:41 ` Avi Kivity
2010-08-03 19:47 ` Anthony Liguori
2010-08-03 19:47 ` Anthony Liguori
2010-08-04 5:47 ` Avi Kivity
2010-08-04 5:47 ` Avi Kivity
2010-08-03 21:24 ` Gerd Hoffmann
2010-08-03 21:24 ` Gerd Hoffmann
2010-08-03 21:20 ` Gerd Hoffmann
2010-08-03 21:20 ` Gerd Hoffmann
2010-08-04 5:53 ` Avi Kivity
2010-08-04 5:53 ` Avi Kivity
2010-08-04 7:56 ` Gerd Hoffmann
2010-08-04 7:56 ` Gerd Hoffmann
2010-08-04 8:17 ` Avi Kivity
2010-08-04 8:17 ` Avi Kivity
2010-08-04 8:43 ` Gleb Natapov
2010-08-04 8:43 ` Gleb Natapov
2010-08-04 9:22 ` Gerd Hoffmann
2010-08-04 9:22 ` Gerd Hoffmann
2010-08-04 13:04 ` Anthony Liguori
2010-08-04 13:04 ` Anthony Liguori
2010-08-04 13:07 ` Gleb Natapov
2010-08-04 13:07 ` Gleb Natapov
2010-08-04 13:15 ` Anthony Liguori
2010-08-04 13:15 ` Anthony Liguori
2010-08-04 13:24 ` Richard W.M. Jones
2010-08-04 13:24 ` Richard W.M. Jones
2010-08-04 13:26 ` Gleb Natapov
2010-08-04 13:26 ` Gleb Natapov
2010-08-04 14:22 ` Anthony Liguori
2010-08-04 14:22 ` Anthony Liguori
2010-08-04 14:38 ` Gleb Natapov
2010-08-04 14:38 ` Gleb Natapov
2010-08-04 14:50 ` Anthony Liguori
2010-08-04 14:50 ` Anthony Liguori
2010-08-04 15:01 ` Gleb Natapov
2010-08-04 15:01 ` Gleb Natapov
2010-08-04 15:07 ` Anthony Liguori
2010-08-04 15:07 ` Anthony Liguori
2010-08-04 15:15 ` Gleb Natapov
2010-08-04 15:15 ` Gleb Natapov
2010-08-04 22:41 ` Kevin O'Connor
2010-08-04 22:41 ` Kevin O'Connor
2010-08-04 16:26 ` Avi Kivity
2010-08-04 16:26 ` Avi Kivity
2010-08-04 13:34 ` Gleb Natapov
2010-08-04 13:34 ` Gleb Natapov
2010-08-04 13:52 ` Anthony Liguori
2010-08-04 13:52 ` [Qemu-devel] " Anthony Liguori
2010-08-04 14:00 ` Gleb Natapov
2010-08-04 14:00 ` Gleb Natapov
2010-08-04 14:14 ` Anthony Liguori
2010-08-04 14:14 ` Anthony Liguori
2010-08-04 14:36 ` Gleb Natapov
2010-08-04 14:36 ` Gleb Natapov
2010-08-04 14:22 ` Paolo Bonzini
2010-08-04 14:22 ` Paolo Bonzini
2010-08-04 14:39 ` Anthony Liguori
2010-08-04 14:39 ` Anthony Liguori
2010-08-04 16:33 ` Avi Kivity
2010-08-04 16:33 ` Avi Kivity
2010-08-04 16:30 ` Avi Kivity
2010-08-04 16:30 ` Avi Kivity
2010-08-04 16:36 ` Avi Kivity
2010-08-04 16:36 ` Avi Kivity
2010-08-04 16:44 ` Anthony Liguori
2010-08-04 16:44 ` Anthony Liguori
2010-08-04 16:52 ` Avi Kivity
2010-08-04 16:52 ` Avi Kivity
2010-08-04 17:37 ` Gleb Natapov
2010-08-04 17:37 ` Gleb Natapov
2010-08-05 7:28 ` Gerd Hoffmann
2010-08-05 7:28 ` Gerd Hoffmann
2010-08-05 7:34 ` Gleb Natapov
2010-08-05 7:34 ` Gleb Natapov
2010-08-05 7:56 ` Avi Kivity
2010-08-05 7:56 ` Avi Kivity
2010-08-05 7:59 ` Gleb Natapov
2010-08-05 7:59 ` Gleb Natapov
2010-08-05 8:45 ` Avi Kivity
2010-08-05 8:45 ` Avi Kivity
2010-08-05 8:48 ` Gleb Natapov
2010-08-05 8:48 ` Gleb Natapov
2010-08-05 13:43 ` Anthony Liguori
2010-08-05 13:43 ` Anthony Liguori
2010-08-04 16:45 ` Alexander Graf
2010-08-04 16:45 ` Alexander Graf
2010-08-04 16:54 ` Avi Kivity
2010-08-04 16:54 ` Avi Kivity
2010-08-04 17:01 ` Alexander Graf
2010-08-04 17:01 ` Alexander Graf
2010-08-04 17:14 ` Avi Kivity
2010-08-04 17:14 ` Avi Kivity
2010-08-04 17:27 ` Alexander Graf
2010-08-04 17:27 ` Alexander Graf
2010-08-04 17:34 ` Avi Kivity
2010-08-04 17:34 ` Avi Kivity
2010-08-04 20:06 ` David S. Ahern
2010-08-04 20:06 ` David S. Ahern
2010-08-04 20:16 ` Richard W.M. Jones
2010-08-04 20:16 ` Richard W.M. Jones
2010-08-05 2:38 ` Avi Kivity
2010-08-05 2:38 ` Avi Kivity
2010-08-04 17:26 ` Anthony Liguori
2010-08-04 17:26 ` Anthony Liguori
2010-08-04 17:31 ` Alexander Graf
2010-08-04 17:31 ` Alexander Graf
2010-08-04 17:35 ` Avi Kivity
2010-08-04 17:35 ` Avi Kivity
2010-08-04 17:36 ` Anthony Liguori
2010-08-04 17:36 ` Anthony Liguori
2010-08-04 17:36 ` Alexander Graf
2010-08-04 17:36 ` Alexander Graf
2010-08-04 17:46 ` Richard W.M. Jones
2010-08-04 17:46 ` Richard W.M. Jones
2010-08-04 17:50 ` Avi Kivity
2010-08-04 17:50 ` Avi Kivity
2010-08-04 18:13 ` Alexander Graf
2010-08-04 18:13 ` [Qemu-devel] " Alexander Graf
2010-08-04 18:16 ` Anthony Liguori
2010-08-04 18:16 ` Anthony Liguori
2010-08-04 18:18 ` Alexander Graf
2010-08-04 18:18 ` Alexander Graf
2010-08-04 18:19 ` Avi Kivity
2010-08-04 18:19 ` Avi Kivity
2010-08-04 18:18 ` Avi Kivity
2010-08-04 18:18 ` Avi Kivity
2010-08-04 16:42 ` Anthony Liguori
2010-08-04 16:42 ` Anthony Liguori
2010-08-04 13:22 ` Richard W.M. Jones
2010-08-04 13:22 ` Richard W.M. Jones
2010-08-04 13:29 ` Gleb Natapov
2010-08-04 13:29 ` Gleb Natapov
2010-08-04 16:25 ` Avi Kivity
2010-08-04 16:25 ` Avi Kivity
2010-08-03 22:06 ` Richard W.M. Jones
2010-08-03 22:06 ` Richard W.M. Jones
2010-08-04 5:54 ` Avi Kivity
2010-08-04 5:54 ` Avi Kivity
2010-08-04 9:24 ` Richard W.M. Jones
2010-08-04 9:24 ` Richard W.M. Jones
2010-08-04 9:27 ` Gleb Natapov
2010-08-04 9:27 ` Gleb Natapov
2010-08-04 9:52 ` Avi Kivity
2010-08-04 9:52 ` Avi Kivity
2010-08-04 11:33 ` Richard W.M. Jones
2010-08-04 11:33 ` Richard W.M. Jones
2010-08-04 11:36 ` Avi Kivity
2010-08-04 11:36 ` Avi Kivity
2010-08-04 12:07 ` Gleb Natapov
2010-08-04 12:07 ` Gleb Natapov
2010-08-04 12:59 ` Anthony Liguori
2010-08-04 12:59 ` Anthony Liguori
2010-08-03 19:26 ` Gleb Natapov
2010-08-03 19:26 ` Gleb Natapov
2010-08-03 19:13 ` Richard W.M. Jones
2010-08-03 19:13 ` Richard W.M. Jones
2010-08-03 19:17 ` Gleb Natapov
2010-08-03 19:17 ` Gleb Natapov
2010-08-03 19:19 ` Anthony Liguori
2010-08-03 19:19 ` Anthony Liguori
2010-08-03 19:22 ` Avi Kivity
2010-08-03 19:22 ` Avi Kivity
2010-08-03 20:00 ` Richard W.M. Jones
2010-08-03 20:00 ` Richard W.M. Jones
2010-08-03 20:49 ` Anthony Liguori
2010-08-03 20:49 ` Anthony Liguori
2010-08-03 21:13 ` Paolo Bonzini
2010-08-03 21:13 ` Paolo Bonzini
2010-08-03 21:34 ` Anthony Liguori
2010-08-03 21:34 ` Anthony Liguori
2010-08-04 7:57 ` Paolo Bonzini
2010-08-04 7:57 ` Paolo Bonzini
2010-08-04 8:19 ` Avi Kivity
2010-08-04 8:19 ` Avi Kivity
2010-08-04 12:53 ` Anthony Liguori
2010-08-04 12:53 ` Anthony Liguori
2010-08-04 16:44 ` Avi Kivity
2010-08-04 16:44 ` Avi Kivity
2010-08-04 16:46 ` Anthony Liguori
2010-08-04 16:46 ` Anthony Liguori
2010-08-04 16:48 ` Alexander Graf
2010-08-04 16:48 ` Alexander Graf
2010-08-04 16:49 ` Anthony Liguori
2010-08-04 16:49 ` Anthony Liguori
2010-08-04 16:51 ` Alexander Graf
2010-08-04 16:51 ` Alexander Graf
2010-08-04 17:01 ` Paolo Bonzini
2010-08-04 17:01 ` Paolo Bonzini
2010-08-04 17:19 ` Avi Kivity
2010-08-04 17:19 ` Avi Kivity
2010-08-04 17:25 ` Alexander Graf
2010-08-04 17:25 ` Alexander Graf
2010-08-04 17:27 ` Anthony Liguori
2010-08-04 17:27 ` Anthony Liguori
2010-08-04 17:37 ` Avi Kivity
2010-08-04 17:37 ` Avi Kivity
2010-08-04 17:53 ` Anthony Liguori
2010-08-04 17:53 ` Anthony Liguori
2010-08-04 18:05 ` Alexander Graf
2010-08-04 18:05 ` Alexander Graf
2010-08-04 5:56 ` Avi Kivity
2010-08-04 5:56 ` Avi Kivity
2010-08-04 1:17 ` Jamie Lokier
2010-08-04 1:17 ` Jamie Lokier
2010-08-04 8:21 ` Avi Kivity
2010-08-04 8:21 ` Avi Kivity
2010-08-04 14:51 ` David S. Ahern
2010-08-04 14:51 ` David S. Ahern
2010-08-04 14:57 ` Anthony Liguori
2010-08-04 14:57 ` Anthony Liguori
2010-08-04 15:25 ` Gleb Natapov
2010-08-04 15:25 ` Gleb Natapov
2010-08-04 15:31 ` Alexander Graf
2010-08-04 15:31 ` Alexander Graf
2010-08-04 15:48 ` Gleb Natapov
2010-08-04 15:48 ` Gleb Natapov
2010-08-04 15:59 ` Alexander Graf
2010-08-04 15:59 ` Alexander Graf
2010-08-04 16:08 ` Gleb Natapov [this message]
2010-08-04 16:08 ` Gleb Natapov
2010-08-04 16:48 ` Avi Kivity
2010-08-04 16:48 ` Avi Kivity
2010-08-04 23:17 ` Kevin O'Connor
2010-08-04 23:17 ` Kevin O'Connor
2010-08-05 5:26 ` Gleb Natapov
2010-08-05 5:26 ` Gleb Natapov
2010-08-03 16:56 ` Anthony Liguori
2010-08-03 16:56 ` Anthony Liguori
2010-08-03 16:48 ` Avi Kivity
2010-08-03 17:00 ` Richard W.M. Jones
2010-08-03 17:05 ` Avi Kivity
2010-08-03 16:56 ` Richard W.M. Jones
2010-08-03 17:08 ` Avi Kivity
2010-08-03 16:39 ` Anthony Liguori
2010-08-03 16:39 ` Anthony Liguori
2010-08-03 16:43 ` Richard W.M. Jones
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=20100804160823.GE10499@redhat.com \
--to=gleb@redhat.com \
--cc=agraf@suse.de \
--cc=anthony@codemonkey.ws \
--cc=avi@redhat.com \
--cc=daahern@cisco.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
--cc=rjones@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.