* 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).