qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* Re: [Qemu-devel] [PATCH 1.1?] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
       [not found]     ` <4FC5888D.5080902@codemonkey.ws>
@ 2012-06-11  9:55       ` Stefano Stabellini
  2012-06-11 10:12         ` Andreas Färber
  0 siblings, 1 reply; 10+ messages in thread
From: Stefano Stabellini @ 2012-06-11  9:55 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Paolo Bonzini, andreas.faerber@web.de, Stefano Stabellini,
	qemu-devel@nongnu.org, Stefan Weil

[-- Attachment #1: Type: text/plain, Size: 572 bytes --]

On Wed, 30 May 2012, Anthony Liguori wrote:
> >> Reviewed-by: Stefan Weil<sw@weilnetz.de>
> >>
> >> This patch clearly improves the current code and fixes
> >> an abort on Darwin (reported by Andreas Färber) and maybe
> >> other hosts. Therefore I changed the subject and suggest
> >> to consider this patch for QEMU 1.1.
> 
> Not for 1.1.0.  I'm just a few hours away from pushing the 1.1.0-rc4 tag and I 
> don't plan on doing any updates before GA unless something critical emerges.

Anthony,
are you going to pick this one up for 1.1.1? Do you need me to do
anything?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1.1?] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-06-11  9:55       ` [Qemu-devel] [PATCH 1.1?] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX Stefano Stabellini
@ 2012-06-11 10:12         ` Andreas Färber
  0 siblings, 0 replies; 10+ messages in thread
From: Andreas Färber @ 2012-06-11 10:12 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Paolo Bonzini, qemu-devel@nongnu.org, Anthony Liguori,
	Stefan Weil

Am 11.06.2012 11:55, schrieb Stefano Stabellini:
> On Wed, 30 May 2012, Anthony Liguori wrote:
>>>> Reviewed-by: Stefan Weil<sw@weilnetz.de>
>>>>
>>>> This patch clearly improves the current code and fixes
>>>> an abort on Darwin (reported by Andreas Färber) and maybe
>>>> other hosts. Therefore I changed the subject and suggest
>>>> to consider this patch for QEMU 1.1.
>>
>> Not for 1.1.0.  I'm just a few hours away from pushing the 1.1.0-rc4 tag and I 
>> don't plan on doing any updates before GA unless something critical emerges.
> 
> Anthony,
> are you going to pick this one up for 1.1.1? Do you need me to do
> anything?

I think I still need to test this one... thanks for the reminder. ;)

Andreas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
       [not found] <alpine.DEB.2.00.1205291426350.26786@kaball-desktop>
       [not found] ` <4FC502CE.20509@weilnetz.de>
@ 2012-06-12  8:24 ` Andreas Färber
  2012-06-12  8:35   ` Andreas Färber
  2012-07-27 17:00   ` Andreas Färber
  1 sibling, 2 replies; 10+ messages in thread
From: Andreas Färber @ 2012-06-12  8:24 UTC (permalink / raw)
  To: Stefano Stabellini, Anthony Liguori
  Cc: Paolo Bonzini, Stefan Weil, qemu-devel, Stefan Hajnoczi

Am 29.05.2012 15:35, schrieb Stefano Stabellini:
> qemu_rearm_alarm_timer partially duplicates the code in
> qemu_next_alarm_deadline to figure out if it needs to rearm the timer.
> If it calls qemu_next_alarm_deadline, it always rearms the timer even if
> the next deadline is INT64_MAX.
> 
> This patch simplifies the behavior of qemu_rearm_alarm_timer and removes
> the duplicated code, always calling qemu_next_alarm_deadline and only
> rearming the timer if the deadline is less than INT64_MAX.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Tested-by: Andreas Färber <andreas.faerber@web.de>

This resolves the assertion I had previously reported.

The check-qtest-i386 qemu-system-i386 process now hangs at ~98% CPU,
just as with my INT64_MAX hack before. How would I best debug this qtest
scenario, and what should I be looking for? Since my 1.1 patch this is
no longer going through any Cocoa event handling, so the only causes I
can think of are timers and signals...

Andreas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-06-12  8:24 ` [Qemu-devel] " Andreas Färber
@ 2012-06-12  8:35   ` Andreas Färber
  2012-06-12 12:37     ` Stefano Stabellini
  2012-07-27 17:00   ` Andreas Färber
  1 sibling, 1 reply; 10+ messages in thread
From: Andreas Färber @ 2012-06-12  8:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Stefan Hajnoczi, Paolo Bonzini, Stefan Weil, Anthony Liguori,
	Stefano Stabellini

Am 12.06.2012 10:24, schrieb Andreas Färber:
> Am 29.05.2012 15:35, schrieb Stefano Stabellini:
> The check-qtest-i386 qemu-system-i386 process now hangs at ~98% CPU,
> just as with my INT64_MAX hack before. How would I best debug this qtest
> scenario, and what should I be looking for? Since my 1.1 patch this is
> no longer going through any Cocoa event handling, so the only causes I
> can think of are timers and signals...

Might this shed any light?

Analysis of sampling qemu-system-i386 (pid 19531) every 1 millisecond
Call graph:
    2337 Thread_2503
      2337 0xffc
        2337 start
          2337 main
            2337 qemu_main
              2337 main_loop_wait
                2337 qemu_iohandler_poll
                  2337 tcp_chr_read
                    2337 qtest_read
                      2337 memory_region_iorange_write
                        2337 rtc_change_mon_event
                          2337 monitor_protocol_event
                            2337 monitor_json_emitter
                              2337 monitor_puts
                                2337 monitor_flush
                                  2177 write
                                    2177 write
                                  92 send_all
                                    81 cerror
                                      57 malloc_zone_malloc
                                        35 __error
                                          35 __error
                                        17 dyld_stub___error
                                          17 dyld_stub___error
                                        5 cthread_set_errno_self
                                          5 cthread_set_errno_self
                                      24 cerror
                                    11 send_all
                                  36 dyld_stub_write
                                    36 dyld_stub_write
                                  24 dyld_stub___error
                                    24 dyld_stub___error
                                  6 cerror
                                    6 cerror
                                  2 __error
                                    2 __error
    2337 Thread_2603
      2337 _pthread_start
        2337 sigwait_compat
          2337 sigwait
            2337 __sigwait
              2337 __sigwait
    2337 Thread_2703
      2337 _pthread_start
        2337 qemu_dummy_cpu_thread_fn
          2337 sigwait
            2337 __sigwait
              2337 __sigwait

rtc-test is still blocked by the system() call apparently, and gtester
is polling in its main loop.

Andreas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-06-12  8:35   ` Andreas Färber
@ 2012-06-12 12:37     ` Stefano Stabellini
  2012-06-12 12:58       ` Andreas Färber
  0 siblings, 1 reply; 10+ messages in thread
From: Stefano Stabellini @ 2012-06-12 12:37 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Stefano Stabellini, Stefan Hajnoczi, qemu-devel@nongnu.org,
	Anthony Liguori, Stefan Weil, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 3065 bytes --]

On Tue, 12 Jun 2012, Andreas Färber wrote:
> Am 12.06.2012 10:24, schrieb Andreas Färber:
> > Am 29.05.2012 15:35, schrieb Stefano Stabellini:
> > The check-qtest-i386 qemu-system-i386 process now hangs at ~98% CPU,

Does this mean that increasing the timeout caused a busy loop somewhere
in the test? But if we set the max timeout value to INT32_MAX doesn't
happen?


> > just as with my INT64_MAX hack before. How would I best debug this qtest
> > scenario, and what should I be looking for? Since my 1.1 patch this is
> > no longer going through any Cocoa event handling, so the only causes I
> > can think of are timers and signals...
> 
> Might this shed any light?
> 
> Analysis of sampling qemu-system-i386 (pid 19531) every 1 millisecond

So I take that the call graph below repeats itself every 1m?


> Call graph:
>     2337 Thread_2503
>       2337 0xffc
>         2337 start
>           2337 main
>             2337 qemu_main
>               2337 main_loop_wait
>                 2337 qemu_iohandler_poll
>                   2337 tcp_chr_read
>                     2337 qtest_read
>                       2337 memory_region_iorange_write
>                         2337 rtc_change_mon_event
>                           2337 monitor_protocol_event
>                             2337 monitor_json_emitter
>                               2337 monitor_puts
>                                 2337 monitor_flush
>                                   2177 write
>                                     2177 write
>                                   92 send_all
>                                     81 cerror
>                                       57 malloc_zone_malloc
>                                         35 __error
>                                           35 __error
>                                         17 dyld_stub___error
>                                           17 dyld_stub___error
>                                         5 cthread_set_errno_self
>                                           5 cthread_set_errno_self
>                                       24 cerror
>                                     11 send_all
>                                   36 dyld_stub_write
>                                     36 dyld_stub_write
>                                   24 dyld_stub___error
>                                     24 dyld_stub___error
>                                   6 cerror
>                                     6 cerror
>                                   2 __error
>                                     2 __error

What is the cause of these errors?


>     2337 Thread_2603
>       2337 _pthread_start
>         2337 sigwait_compat
>           2337 sigwait
>             2337 __sigwait
>               2337 __sigwait
>     2337 Thread_2703
>       2337 _pthread_start
>         2337 qemu_dummy_cpu_thread_fn
>           2337 sigwait
>             2337 __sigwait
>               2337 __sigwait
> 
> rtc-test is still blocked by the system() call apparently, and gtester
> is polling in its main loop.

Which system call?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-06-12 12:37     ` Stefano Stabellini
@ 2012-06-12 12:58       ` Andreas Färber
  2012-06-12 13:32         ` Stefano Stabellini
  0 siblings, 1 reply; 10+ messages in thread
From: Andreas Färber @ 2012-06-12 12:58 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Stefan Hajnoczi, Paolo Bonzini, qemu-devel@nongnu.org,
	Anthony Liguori, Stefan Weil

Am 12.06.2012 14:37, schrieb Stefano Stabellini:
> On Tue, 12 Jun 2012, Andreas Färber wrote:
>> Am 12.06.2012 10:24, schrieb Andreas Färber:
>>> Am 29.05.2012 15:35, schrieb Stefano Stabellini:
>>> The check-qtest-i386 qemu-system-i386 process now hangs at ~98% CPU,
> 
> Does this mean that increasing the timeout caused a busy loop somewhere
> in the test? But if we set the max timeout value to INT32_MAX doesn't
> happen?

Note that this is solely about qtest, which I never saw working
(probably didn't try before). Regular system emulation seemed to work
just fine.

Where would I try INT32_MAX for comparison?

>>> just as with my INT64_MAX hack before. How would I best debug this qtest
>>> scenario, and what should I be looking for? Since my 1.1 patch this is
>>> no longer going through any Cocoa event handling, so the only causes I
>>> can think of are timers and signals...
>>
>> Might this shed any light?
>>
>> Analysis of sampling qemu-system-i386 (pid 19531) every 1 millisecond
> 
> So I take that the call graph below repeats itself every 1m?

Copy&paste from Mac OS X v10.5.8 process analysis.

>> Call graph:
>>     2337 Thread_2503
>>       2337 0xffc
>>         2337 start
>>           2337 main
>>             2337 qemu_main
>>               2337 main_loop_wait
>>                 2337 qemu_iohandler_poll
>>                   2337 tcp_chr_read
>>                     2337 qtest_read
>>                       2337 memory_region_iorange_write
>>                         2337 rtc_change_mon_event
>>                           2337 monitor_protocol_event
>>                             2337 monitor_json_emitter
>>                               2337 monitor_puts
>>                                 2337 monitor_flush
>>                                   2177 write
>>                                     2177 write
>>                                   92 send_all
>>                                     81 cerror
>>                                       57 malloc_zone_malloc
>>                                         35 __error
>>                                           35 __error
>>                                         17 dyld_stub___error
>>                                           17 dyld_stub___error
>>                                         5 cthread_set_errno_self
>>                                           5 cthread_set_errno_self
>>                                       24 cerror
>>                                     11 send_all
>>                                   36 dyld_stub_write
>>                                     36 dyld_stub_write
>>                                   24 dyld_stub___error
>>                                     24 dyld_stub___error
>>                                   6 cerror
>>                                     6 cerror
>>                                   2 __error
>>                                     2 __error
> 
> What is the cause of these errors?

Dunno... It looks weird that qtest_read() would be calling
memory_region_iorange_write().

>>     2337 Thread_2603
>>       2337 _pthread_start
>>         2337 sigwait_compat
>>           2337 sigwait
>>             2337 __sigwait
>>               2337 __sigwait
>>     2337 Thread_2703
>>       2337 _pthread_start
>>         2337 qemu_dummy_cpu_thread_fn
>>           2337 sigwait
>>             2337 __sigwait
>>               2337 __sigwait
>>
>> rtc-test is still blocked by the system() call apparently, and gtester
>> is polling in its main loop.
> 
> Which system call?

Was summarizing the two other processes' analysis report call graphs.
`git grep "system("` makes this one likely:

tests/libqtest.c:        ret = system(command);

I'm still lacking substantial understanding of how qtest actually
works... My impression is that the libqtest code is being used in the
*-test executables, launching a regular QEMU process put into qtest mode
via -machine accel=qtest and communicating via the -qtest socket.

If that is so, then my guess about the above error is that the monitor
socket is not being drained...?

Andreas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-06-12 12:58       ` Andreas Färber
@ 2012-06-12 13:32         ` Stefano Stabellini
  0 siblings, 0 replies; 10+ messages in thread
From: Stefano Stabellini @ 2012-06-12 13:32 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Stefano Stabellini, Stefan Hajnoczi, qemu-devel@nongnu.org,
	Anthony Liguori, Stefan Weil, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 1519 bytes --]

On Tue, 12 Jun 2012, Andreas Färber wrote:
> Am 12.06.2012 14:37, schrieb Stefano Stabellini:
> > On Tue, 12 Jun 2012, Andreas Färber wrote:
> >> Am 12.06.2012 10:24, schrieb Andreas Färber:
> >>> Am 29.05.2012 15:35, schrieb Stefano Stabellini:
> >>> The check-qtest-i386 qemu-system-i386 process now hangs at ~98% CPU,
> > 
> > Does this mean that increasing the timeout caused a busy loop somewhere
> > in the test? But if we set the max timeout value to INT32_MAX doesn't
> > happen?
> 
> Note that this is solely about qtest, which I never saw working
> (probably didn't try before). Regular system emulation seemed to work
> just fine.
> 
> Where would I try INT32_MAX for comparison?

the following patch (to be applied on top of the other one) should do the trick:

diff --git a/qemu-timer.c b/qemu-timer.c
index d37a978..4fd3e1c 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -85,7 +85,7 @@ static bool qemu_timer_expired_ns(QEMUTimer *timer_head, int64_t current_time)
 
 static int64_t qemu_next_alarm_deadline(void)
 {
-    int64_t delta = INT64_MAX;
+    int64_t delta = INT32_MAX;
     int64_t rtdelta;
 
     if (!use_icount && vm_clock->enabled && vm_clock->active_timers) {
@@ -113,7 +113,7 @@ static int64_t qemu_next_alarm_deadline(void)
 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
 {
     int64_t nearest_delta_ns = qemu_next_alarm_deadline();
-    if (nearest_delta_ns < INT64_MAX) {
+    if (nearest_delta_ns < INT32_MAX) {
         t->rearm(t, nearest_delta_ns);
     }
 }

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-06-12  8:24 ` [Qemu-devel] " Andreas Färber
  2012-06-12  8:35   ` Andreas Färber
@ 2012-07-27 17:00   ` Andreas Färber
  2012-08-09 15:35     ` [Qemu-devel] [Qemu-devel for-1.2] " Andreas Färber
  1 sibling, 1 reply; 10+ messages in thread
From: Andreas Färber @ 2012-07-27 17:00 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Stefano Stabellini, Stefan Hajnoczi, qemu-stable, qemu-devel,
	Stefan Weil, Paolo Bonzini, Karl-Michael Schindler

Am 12.06.2012 10:24, schrieb Andreas Färber:
> Am 29.05.2012 15:35, schrieb Stefano Stabellini:
>> qemu_rearm_alarm_timer partially duplicates the code in
>> qemu_next_alarm_deadline to figure out if it needs to rearm the timer.
>> If it calls qemu_next_alarm_deadline, it always rearms the timer even if
>> the next deadline is INT64_MAX.
>>
>> This patch simplifies the behavior of qemu_rearm_alarm_timer and removes
>> the duplicated code, always calling qemu_next_alarm_deadline and only
>> rearming the timer if the deadline is less than INT64_MAX.
>>
>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> Tested-by: Andreas Färber <andreas.faerber@web.de>

Ping! Can the patch please be applied? Note: Patchwork apparently got
confused by the later follow-up inline patches - only the original patch
is needed.

Also cc'ing qemu-stable for stable-1.1.

Andreas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [Qemu-devel for-1.2] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-07-27 17:00   ` Andreas Färber
@ 2012-08-09 15:35     ` Andreas Färber
  2012-08-09 19:58       ` Blue Swirl
  0 siblings, 1 reply; 10+ messages in thread
From: Andreas Färber @ 2012-08-09 15:35 UTC (permalink / raw)
  To: Anthony Liguori, Blue Swirl
  Cc: Stefano Stabellini, Stefan Hajnoczi, qemu-devel, qemu-stable,
	Stefan Weil, Paolo Bonzini, Karl-Michael Schindler

Am 27.07.2012 19:00, schrieb Andreas Färber:
> Am 12.06.2012 10:24, schrieb Andreas Färber:
>> Am 29.05.2012 15:35, schrieb Stefano Stabellini:
>>> qemu_rearm_alarm_timer partially duplicates the code in
>>> qemu_next_alarm_deadline to figure out if it needs to rearm the timer.
>>> If it calls qemu_next_alarm_deadline, it always rearms the timer even if
>>> the next deadline is INT64_MAX.
>>>
>>> This patch simplifies the behavior of qemu_rearm_alarm_timer and removes
>>> the duplicated code, always calling qemu_next_alarm_deadline and only
>>> rearming the timer if the deadline is less than INT64_MAX.
>>>
>>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>>
>> Tested-by: Andreas Färber <andreas.faerber@web.de>
> 
> Ping! Can the patch please be applied? Note: Patchwork apparently got
> confused by the later follow-up inline patches - only the original patch
> is needed.

Ping^2! This didn't make it into 1.1, would be nice to have 1.2 working.

Correct Patchwork link is: http://patchwork.ozlabs.org/patch/161749/

/-F

> 
> Also cc'ing qemu-stable for stable-1.1.
> 
> Andreas
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [Qemu-devel for-1.2] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX
  2012-08-09 15:35     ` [Qemu-devel] [Qemu-devel for-1.2] " Andreas Färber
@ 2012-08-09 19:58       ` Blue Swirl
  0 siblings, 0 replies; 10+ messages in thread
From: Blue Swirl @ 2012-08-09 19:58 UTC (permalink / raw)
  To: Andreas Färber, Stefano Stabellini
  Cc: Stefan Hajnoczi, qemu-stable, qemu-devel, Anthony Liguori,
	Stefan Weil, Paolo Bonzini, Karl-Michael Schindler

Thanks, applied.

On Thu, Aug 9, 2012 at 3:35 PM, Andreas Färber <andreas.faerber@web.de> wrote:
> Am 27.07.2012 19:00, schrieb Andreas Färber:
>> Am 12.06.2012 10:24, schrieb Andreas Färber:
>>> Am 29.05.2012 15:35, schrieb Stefano Stabellini:
>>>> qemu_rearm_alarm_timer partially duplicates the code in
>>>> qemu_next_alarm_deadline to figure out if it needs to rearm the timer.
>>>> If it calls qemu_next_alarm_deadline, it always rearms the timer even if
>>>> the next deadline is INT64_MAX.
>>>>
>>>> This patch simplifies the behavior of qemu_rearm_alarm_timer and removes
>>>> the duplicated code, always calling qemu_next_alarm_deadline and only
>>>> rearming the timer if the deadline is less than INT64_MAX.
>>>>
>>>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>>>
>>> Tested-by: Andreas Färber <andreas.faerber@web.de>
>>
>> Ping! Can the patch please be applied? Note: Patchwork apparently got
>> confused by the later follow-up inline patches - only the original patch
>> is needed.
>
> Ping^2! This didn't make it into 1.1, would be nice to have 1.2 working.
>
> Correct Patchwork link is: http://patchwork.ozlabs.org/patch/161749/
>
> /-F
>
>>
>> Also cc'ing qemu-stable for stable-1.1.
>>
>> Andreas
>>
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-08-09 19:59 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <alpine.DEB.2.00.1205291426350.26786@kaball-desktop>
     [not found] ` <4FC502CE.20509@weilnetz.de>
     [not found]   ` <4FC53AAD.3010201@redhat.com>
     [not found]     ` <4FC5888D.5080902@codemonkey.ws>
2012-06-11  9:55       ` [Qemu-devel] [PATCH 1.1?] qemu_rearm_alarm_timer: do not call rearm if the next deadline is INT64_MAX Stefano Stabellini
2012-06-11 10:12         ` Andreas Färber
2012-06-12  8:24 ` [Qemu-devel] " Andreas Färber
2012-06-12  8:35   ` Andreas Färber
2012-06-12 12:37     ` Stefano Stabellini
2012-06-12 12:58       ` Andreas Färber
2012-06-12 13:32         ` Stefano Stabellini
2012-07-27 17:00   ` Andreas Färber
2012-08-09 15:35     ` [Qemu-devel] [Qemu-devel for-1.2] " Andreas Färber
2012-08-09 19:58       ` Blue Swirl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).