diff mbox

kvm: flush the dirty log when unregistering a slot

Message ID 1326637051-23920-1-git-send-email-avi@redhat.com
State New
Headers show

Commit Message

Avi Kivity Jan. 15, 2012, 2:17 p.m. UTC
Otherwise, the dirty log information is lost in the kernel forever.

Fixes opensuse-12.1 boot screen, which changes the vga windows rapidly.

Signed-off-by: Avi Kivity <avi@redhat.com>
---

This patch gives me a deja vu - I'm sure I've fixed exactly the same issue
before.

Please test.

 kvm-all.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Jan Kiszka Jan. 15, 2012, 2:26 p.m. UTC | #1
On 2012-01-15 15:17, Avi Kivity wrote:
> Otherwise, the dirty log information is lost in the kernel forever.
> 
> Fixes opensuse-12.1 boot screen, which changes the vga windows rapidly.

Confirmed, problems solved here.

Thanks,
Jan

> 
> Signed-off-by: Avi Kivity <avi@redhat.com>
> ---
> 
> This patch gives me a deja vu - I'm sure I've fixed exactly the same issue
> before.
> 
> Please test.
> 
>  kvm-all.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/kvm-all.c b/kvm-all.c
> index 3174f42..2cc4562 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -566,6 +566,10 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add)
>  
>          old = *mem;
>  
> +        if (mem->flags & KVM_MEM_LOG_DIRTY_PAGES) {
> +            kvm_physical_sync_dirty_bitmap(section);
> +        }
> +
>          /* unregister the overlapping slot */
>          mem->memory_size = 0;
>          err = kvm_set_user_memory_region(s, mem);
> -- 1.7.7.1
>
Gerhard Wiesinger Jan. 15, 2012, 2:40 p.m. UTC | #2
On Sun, 15 Jan 2012, Jan Kiszka wrote:

> On 2012-01-15 15:17, Avi Kivity wrote:
>> Otherwise, the dirty log information is lost in the kernel forever.
>>
>> Fixes opensuse-12.1 boot screen, which changes the vga windows rapidly.
>
> Confirmed, problems solved here.

Problem from: http://permalink.gmane.org/gmane.comp.emulators.qemu/131853

Confirmed to be fixed, too. Long awaited patch :-)

BTW: There is also a major difference in video performance:
1.) With Patch: 1400MB/s (MByte/s)
2.) Without Patch: 6MB/s

Any reason for that?

Ciao,
Gerhard
Avi Kivity Jan. 15, 2012, 5:01 p.m. UTC | #3
On 01/15/2012 04:40 PM, Gerhard Wiesinger wrote:
> On Sun, 15 Jan 2012, Jan Kiszka wrote:
>
>> On 2012-01-15 15:17, Avi Kivity wrote:
>>> Otherwise, the dirty log information is lost in the kernel forever.
>>>
>>> Fixes opensuse-12.1 boot screen, which changes the vga windows rapidly.
>>
>> Confirmed, problems solved here.
>
> Problem from: http://permalink.gmane.org/gmane.comp.emulators.qemu/131853
>
> Confirmed to be fixed, too. Long awaited patch :-)

Sorry, I forgot about that.  Please ping me if I do that.

>
> BTW: There is also a major difference in video performance:
> 1.) With Patch: 1400MB/s (MByte/s)
> 2.) Without Patch: 6MB/s
>
> Any reason for that?

What are you measuring exactly?
Marcelo Tosatti Jan. 17, 2012, 11:25 a.m. UTC | #4
On Sun, Jan 15, 2012 at 04:17:31PM +0200, Avi Kivity wrote:
> Otherwise, the dirty log information is lost in the kernel forever.
> 
> Fixes opensuse-12.1 boot screen, which changes the vga windows rapidly.
> 
> Signed-off-by: Avi Kivity <avi@redhat.com>
> ---
> 
> This patch gives me a deja vu - I'm sure I've fixed exactly the same issue
> before.
> 
> Please test.
> 
>  kvm-all.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)

Applied to uq/master, thanks.
Jan Kiszka Jan. 17, 2012, 12:28 p.m. UTC | #5
On 2012-01-17 12:25, Marcelo Tosatti wrote:
> On Sun, Jan 15, 2012 at 04:17:31PM +0200, Avi Kivity wrote:
>> Otherwise, the dirty log information is lost in the kernel forever.
>>
>> Fixes opensuse-12.1 boot screen, which changes the vga windows rapidly.
>>
>> Signed-off-by: Avi Kivity <avi@redhat.com>
>> ---
>>
>> This patch gives me a deja vu - I'm sure I've fixed exactly the same issue
>> before.
>>
>> Please test.
>>
>>  kvm-all.c |    4 ++++
>>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> Applied to uq/master, thanks.

It's already in qemu/master. Maybe you want to rebase uq/master at this
chance.

Jan
Gerhard Wiesinger Jan. 25, 2012, 8:15 p.m. UTC | #6
On Sun, 15 Jan 2012, Avi Kivity wrote:

> On 01/15/2012 04:40 PM, Gerhard Wiesinger wrote:
>> On Sun, 15 Jan 2012, Jan Kiszka wrote:
>>
>>> On 2012-01-15 15:17, Avi Kivity wrote:
>>>> Otherwise, the dirty log information is lost in the kernel forever.
>>>>
>>>> Fixes opensuse-12.1 boot screen, which changes the vga windows rapidly.
>>>
>>> Confirmed, problems solved here.
>>
>> Problem from: http://permalink.gmane.org/gmane.comp.emulators.qemu/131853
>>
>> Confirmed to be fixed, too. Long awaited patch :-)
>
> Sorry, I forgot about that.  Please ping me if I do that.
>
>>
>> BTW: There is also a major difference in video performance:
>> 1.) With Patch: 1400MB/s (MByte/s)
>> 2.) Without Patch: 6MB/s
>>
>> Any reason for that?
>
> What are you measuring exactly?

I'm measuring VGA video performance under DOS with own written test 
program.

What's strange, new findings: Measurement doesn't depend on the patch. 
Sometimes it is high sometimes low. I think I have to investigate further.

Any ideas?

BTW: Please merge the patch into qemu-kvm repository.

Ciao,
Gerhard

--
http://www.wiesinger.com/
Avi Kivity Jan. 26, 2012, 12:29 p.m. UTC | #7
On 01/25/2012 10:15 PM, Gerhard Wiesinger wrote:
> On Sun, 15 Jan 2012, Avi Kivity wrote:
>
>> On 01/15/2012 04:40 PM, Gerhard Wiesinger wrote:
>>> On Sun, 15 Jan 2012, Jan Kiszka wrote:
>>>
>>>> On 2012-01-15 15:17, Avi Kivity wrote:
>>>>> Otherwise, the dirty log information is lost in the kernel forever.
>>>>>
>>>>> Fixes opensuse-12.1 boot screen, which changes the vga windows
>>>>> rapidly.
>>>>
>>>> Confirmed, problems solved here.
>>>
>>> Problem from:
>>> http://permalink.gmane.org/gmane.comp.emulators.qemu/131853
>>>
>>> Confirmed to be fixed, too. Long awaited patch :-)
>>
>> Sorry, I forgot about that.  Please ping me if I do that.
>>
>>>
>>> BTW: There is also a major difference in video performance:
>>> 1.) With Patch: 1400MB/s (MByte/s)
>>> 2.) Without Patch: 6MB/s
>>>
>>> Any reason for that?
>>
>> What are you measuring exactly?
>
> I'm measuring VGA video performance under DOS with own written test
> program.
>
> What's strange, new findings: Measurement doesn't depend on the patch.
> Sometimes it is high sometimes low. I think I have to investigate
> further.
>
> Any ideas?

What vga mode are you using?  What does the test program do?
Gerhard Wiesinger Jan. 27, 2012, 6:50 a.m. UTC | #8
On Thu, 26 Jan 2012, Avi Kivity wrote:

> On 01/25/2012 10:15 PM, Gerhard Wiesinger wrote:
>> On Sun, 15 Jan 2012, Avi Kivity wrote:
>>
>>> On 01/15/2012 04:40 PM, Gerhard Wiesinger wrote:
>>>> On Sun, 15 Jan 2012, Jan Kiszka wrote:
>>>>
>>>>> On 2012-01-15 15:17, Avi Kivity wrote:
>>>>>> Otherwise, the dirty log information is lost in the kernel forever.
>>>>>>
>>>>>> Fixes opensuse-12.1 boot screen, which changes the vga windows
>>>>>> rapidly.
>>>>>
>>>>> Confirmed, problems solved here.
>>>>
>>>> Problem from:
>>>> http://permalink.gmane.org/gmane.comp.emulators.qemu/131853
>>>>
>>>> Confirmed to be fixed, too. Long awaited patch :-)
>>>
>>> Sorry, I forgot about that.  Please ping me if I do that.
>>>
>>>>
>>>> BTW: There is also a major difference in video performance:
>>>> 1.) With Patch: 1400MB/s (MByte/s)
>>>> 2.) Without Patch: 6MB/s
>>>>
>>>> Any reason for that?
>>>
>>> What are you measuring exactly?
>>
>> I'm measuring VGA video performance under DOS with own written test
>> program.
>>
>> What's strange, new findings: Measurement doesn't depend on the patch.
>> Sometimes it is high sometimes low. I think I have to investigate
>> further.
>>
>> Any ideas?
>
> What vga mode are you using?  What does the test program do?

DOS Test programs, source and binaries can be found at:
http://www.wiesinger.com/opensource/qemu/

1.) Measures page A000:0000 with videomode 4F02, see:
http://www.wiesinger.com/opensource/qemu/memperf.c

2.) Second test program measures setting and getting video bank, see:
http://www.wiesinger.com/opensource/qemu/int10per.c
We already talked about the low performance some time ago and tracked it 
down to kernel <=> userspace switching. But I benchmarked it already once 
and I think there are some optimizations possible (linear list search) 
with mapping functions (e.g. trivial hash function before)

Thnx.

Ciao,
Gerhard

--
http://www.wiesinger.com/
Avi Kivity Jan. 29, 2012, 10:15 a.m. UTC | #9
On 01/27/2012 08:50 AM, Gerhard Wiesinger wrote:
> On Thu, 26 Jan 2012, Avi Kivity wrote:
>
>> On 01/25/2012 10:15 PM, Gerhard Wiesinger wrote:
>>> On Sun, 15 Jan 2012, Avi Kivity wrote:
>>>
>>>> On 01/15/2012 04:40 PM, Gerhard Wiesinger wrote:
>>>>> On Sun, 15 Jan 2012, Jan Kiszka wrote:
>>>>>
>>>>>> On 2012-01-15 15:17, Avi Kivity wrote:
>>>>>>> Otherwise, the dirty log information is lost in the kernel forever.
>>>>>>>
>>>>>>> Fixes opensuse-12.1 boot screen, which changes the vga windows
>>>>>>> rapidly.
>>>>>>
>>>>>> Confirmed, problems solved here.
>>>>>
>>>>> Problem from:
>>>>> http://permalink.gmane.org/gmane.comp.emulators.qemu/131853
>>>>>
>>>>> Confirmed to be fixed, too. Long awaited patch :-)
>>>>
>>>> Sorry, I forgot about that.  Please ping me if I do that.
>>>>
>>>>>
>>>>> BTW: There is also a major difference in video performance:
>>>>> 1.) With Patch: 1400MB/s (MByte/s)
>>>>> 2.) Without Patch: 6MB/s
>>>>>
>>>>> Any reason for that?
>>>>
>>>> What are you measuring exactly?
>>>
>>> I'm measuring VGA video performance under DOS with own written test
>>> program.
>>>
>>> What's strange, new findings: Measurement doesn't depend on the patch.
>>> Sometimes it is high sometimes low. I think I have to investigate
>>> further.
>>>
>>> Any ideas?
>>
>> What vga mode are you using?  What does the test program do?
>
> DOS Test programs, source and binaries can be found at:
> http://www.wiesinger.com/opensource/qemu/
>

And which one is slower?

> 1.) Measures page A000:0000 with videomode 4F02, see:
> http://www.wiesinger.com/opensource/qemu/memperf.c
>
> 2.) Second test program measures setting and getting video bank, see:
> http://www.wiesinger.com/opensource/qemu/int10per.c
> We already talked about the low performance some time ago and tracked
> it down to kernel <=> userspace switching. But I benchmarked it
> already once and I think there are some optimizations possible (linear
> list search) with mapping functions (e.g. trivial hash function before)

That would be due to srcu, but recent optimizations in srcu should make
is faster than it was initially (though still slow - kvm trades off
memory map update speed for run-time memory access speed).
diff mbox

Patch

diff --git a/kvm-all.c b/kvm-all.c
index 3174f42..2cc4562 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -566,6 +566,10 @@  static void kvm_set_phys_mem(MemoryRegionSection *section, bool add)
 
         old = *mem;
 
+        if (mem->flags & KVM_MEM_LOG_DIRTY_PAGES) {
+            kvm_physical_sync_dirty_bitmap(section);
+        }
+
         /* unregister the overlapping slot */
         mem->memory_size = 0;
         err = kvm_set_user_memory_region(s, mem);