[PATCH] replay: notify the main loop when there are no instructions

Pavel Dovgalyuk posted 1 patch 3 years, 11 months ago
Test docker-mingw@fedora passed
Test checkpatch passed
Test asan passed
Test docker-quick@centos7 failed
Test FreeBSD passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/159013007895.28110.2020104406699709721.stgit@pasha-ThinkPad-X280
Maintainers: Richard Henderson <rth@twiddle.net>, Paolo Bonzini <pbonzini@redhat.com>
0 files changed
[PATCH] replay: notify the main loop when there are no instructions
Posted by Pavel Dovgalyuk 3 years, 11 months ago
When QEMU is executed in console mode without any external event sources,
main loop may sleep for a very long time. But in case of replay
there is another event source - event log.
This patch adds main loop notification when the vCPU loop has nothing
to do and main loop should process the inputs from the event log.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
---
 0 files changed

diff --git a/cpus.c b/cpus.c
index 7ce0d569b3..b4d0d9f21b 100644
--- a/cpus.c
+++ b/cpus.c
@@ -1362,6 +1362,13 @@ static int64_t tcg_get_icount_limit(void)
     }
 }
 
+static void notify_aio_contexts(void)
+{
+    /* Wake up other AioContexts.  */
+    qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
+    qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
+}
+
 static void handle_icount_deadline(void)
 {
     assert(qemu_in_vcpu_thread());
@@ -1370,9 +1377,7 @@ static void handle_icount_deadline(void)
                                                       QEMU_TIMER_ATTR_ALL);
 
         if (deadline == 0) {
-            /* Wake up other AioContexts.  */
-            qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
-            qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
+            notify_aio_contexts();
         }
     }
 }
@@ -1395,6 +1400,10 @@ static void prepare_icount_for_run(CPUState *cpu)
         cpu->icount_extra = cpu->icount_budget - insns_left;
 
         replay_mutex_lock();
+
+        if (cpu->icount_budget == 0 && replay_has_checkpoint()) {
+            notify_aio_contexts();
+        }
     }
 }
 


Re: [PATCH] replay: notify the main loop when there are no instructions
Posted by Pavel Dovgalyuk 3 years, 10 months ago
ping

On 22.05.2020 09:47, Pavel Dovgalyuk wrote:
> When QEMU is executed in console mode without any external event sources,
> main loop may sleep for a very long time. But in case of replay
> there is another event source - event log.
> This patch adds main loop notification when the vCPU loop has nothing
> to do and main loop should process the inputs from the event log.
>
> Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
> ---
>   0 files changed
>
> diff --git a/cpus.c b/cpus.c
> index 7ce0d569b3..b4d0d9f21b 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -1362,6 +1362,13 @@ static int64_t tcg_get_icount_limit(void)
>       }
>   }
>   
> +static void notify_aio_contexts(void)
> +{
> +    /* Wake up other AioContexts.  */
> +    qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
> +    qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
> +}
> +
>   static void handle_icount_deadline(void)
>   {
>       assert(qemu_in_vcpu_thread());
> @@ -1370,9 +1377,7 @@ static void handle_icount_deadline(void)
>                                                         QEMU_TIMER_ATTR_ALL);
>   
>           if (deadline == 0) {
> -            /* Wake up other AioContexts.  */
> -            qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
> -            qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
> +            notify_aio_contexts();
>           }
>       }
>   }
> @@ -1395,6 +1400,10 @@ static void prepare_icount_for_run(CPUState *cpu)
>           cpu->icount_extra = cpu->icount_budget - insns_left;
>   
>           replay_mutex_lock();
> +
> +        if (cpu->icount_budget == 0 && replay_has_checkpoint()) {
> +            notify_aio_contexts();
> +        }
>       }
>   }
>   
>

Re: [PATCH] replay: notify the main loop when there are no instructions
Posted by Paolo Bonzini 3 years, 10 months ago
On 01/06/20 12:35, Pavel Dovgalyuk wrote:
> ping
> 
> On 22.05.2020 09:47, Pavel Dovgalyuk wrote:
>> When QEMU is executed in console mode without any external event sources,
>> main loop may sleep for a very long time. But in case of replay
>> there is another event source - event log.
>> This patch adds main loop notification when the vCPU loop has nothing
>> to do and main loop should process the inputs from the event log.
>>
>> Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>

It's a long weekend here today but I should get a QEMU pull request
submitted on Wednesday.

Paolo

>>   0 files changed
>>
>> diff --git a/cpus.c b/cpus.c
>> index 7ce0d569b3..b4d0d9f21b 100644
>> --- a/cpus.c
>> +++ b/cpus.c
>> @@ -1362,6 +1362,13 @@ static int64_t tcg_get_icount_limit(void)
>>       }
>>   }
>>   +static void notify_aio_contexts(void)
>> +{
>> +    /* Wake up other AioContexts.  */
>> +    qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
>> +    qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
>> +}
>> +
>>   static void handle_icount_deadline(void)
>>   {
>>       assert(qemu_in_vcpu_thread());
>> @@ -1370,9 +1377,7 @@ static void handle_icount_deadline(void)
>>                                                        
>> QEMU_TIMER_ATTR_ALL);
>>             if (deadline == 0) {
>> -            /* Wake up other AioContexts.  */
>> -            qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
>> -            qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
>> +            notify_aio_contexts();
>>           }
>>       }
>>   }
>> @@ -1395,6 +1400,10 @@ static void prepare_icount_for_run(CPUState *cpu)
>>           cpu->icount_extra = cpu->icount_budget - insns_left;
>>             replay_mutex_lock();
>> +
>> +        if (cpu->icount_budget == 0 && replay_has_checkpoint()) {
>> +            notify_aio_contexts();
>> +        }
>>       }
>>   }
>>  
> 


Re: [PATCH] replay: notify the main loop when there are no instructions
Posted by Pavel Dovgalyuk 3 years, 10 months ago
On 01.06.2020 17:01, Paolo Bonzini wrote:
> On 01/06/20 12:35, Pavel Dovgalyuk wrote:
>> ping
>>
>> On 22.05.2020 09:47, Pavel Dovgalyuk wrote:
>>> When QEMU is executed in console mode without any external event sources,
>>> main loop may sleep for a very long time. But in case of replay
>>> there is another event source - event log.
>>> This patch adds main loop notification when the vCPU loop has nothing
>>> to do and main loop should process the inputs from the event log.
>>>
>>> Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
> It's a long weekend here today but I should get a QEMU pull request
> submitted on Wednesday.

Thanks, but this patch and "replay: synchronize on every virtual timer 
callback" were not included.

Replay tests are succeeded only with these patches.


>
> Paolo
>
>>>    0 files changed
>>>
>>> diff --git a/cpus.c b/cpus.c
>>> index 7ce0d569b3..b4d0d9f21b 100644
>>> --- a/cpus.c
>>> +++ b/cpus.c
>>> @@ -1362,6 +1362,13 @@ static int64_t tcg_get_icount_limit(void)
>>>        }
>>>    }
>>>    +static void notify_aio_contexts(void)
>>> +{
>>> +    /* Wake up other AioContexts.  */
>>> +    qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
>>> +    qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
>>> +}
>>> +
>>>    static void handle_icount_deadline(void)
>>>    {
>>>        assert(qemu_in_vcpu_thread());
>>> @@ -1370,9 +1377,7 @@ static void handle_icount_deadline(void)
>>>                                                         
>>> QEMU_TIMER_ATTR_ALL);
>>>              if (deadline == 0) {
>>> -            /* Wake up other AioContexts.  */
>>> -            qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
>>> -            qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
>>> +            notify_aio_contexts();
>>>            }
>>>        }
>>>    }
>>> @@ -1395,6 +1400,10 @@ static void prepare_icount_for_run(CPUState *cpu)
>>>            cpu->icount_extra = cpu->icount_budget - insns_left;
>>>              replay_mutex_lock();
>>> +
>>> +        if (cpu->icount_budget == 0 && replay_has_checkpoint()) {
>>> +            notify_aio_contexts();
>>> +        }
>>>        }
>>>    }
>>>   

Re: [PATCH] replay: notify the main loop when there are no instructions
Posted by Paolo Bonzini 3 years, 10 months ago
On 15/06/20 07:39, Pavel Dovgalyuk wrote:
>>
> 
> Thanks, but this patch and "replay: synchronize on every virtual timer
> callback" were not included.
> 
> Replay tests are succeeded only with these patches.

Added back both.  I'll be faster this time, promised.

Paolo


Re: [PATCH] replay: notify the main loop when there are no instructions
Posted by no-reply@patchew.org 3 years, 10 months ago
Patchew URL: https://patchew.org/QEMU/159013007895.28110.2020104406699709721.stgit@pasha-ThinkPad-X280/



Hi,

This series failed the docker-quick@centos7 build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.

=== TEST SCRIPT BEGIN ===
#!/bin/bash
make docker-image-centos7 V=1 NETWORK=1
time make docker-test-quick@centos7 SHOW_ENV=1 J=14 NETWORK=1
=== TEST SCRIPT END ===

qemu-system-aarch64: cannot set up guest memory 'cubieboard.ram': Cannot allocate memory
Broken pipe
/tmp/qemu-test/src/tests/qtest/libqtest.c:166: kill_qemu() tried to terminate QEMU process but encountered exit status 1 (expected 0)
ERROR - too few tests run (expected 67, got 19)
make: *** [check-qtest-aarch64] Error 1
Traceback (most recent call last):
  File "./tests/docker/docker.py", line 664, in <module>
    sys.exit(main())
---
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=7ed21bd09cfe4abb91aa69bcf8295719', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-8uoujxs2/src/docker-src.2020-05-22-08.42.20.23794:/var/tmp/qemu:z,ro', 'qemu:centos7', '/var/tmp/qemu/run', 'test-quick']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=7ed21bd09cfe4abb91aa69bcf8295719
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-8uoujxs2/src'
make: *** [docker-run-test-quick@centos7] Error 2

real    18m3.909s
user    0m8.461s


The full log is available at
http://patchew.org/logs/159013007895.28110.2020104406699709721.stgit@pasha-ThinkPad-X280/testing.docker-quick@centos7/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com