From patchwork Wed May 12 06:14:12 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerhard Wiesinger X-Patchwork-Id: 52354 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 3C1DAB7D7C for ; Wed, 12 May 2010 16:17:14 +1000 (EST) Received: from localhost ([127.0.0.1]:37688 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OC5Fl-0004Jz-DJ for incoming@patchwork.ozlabs.org; Wed, 12 May 2010 02:17:09 -0400 Received: from [140.186.70.92] (port=35022 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OC5EY-0004It-Ru for qemu-devel@nongnu.org; Wed, 12 May 2010 02:15:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OC5EW-0007Sb-4i for qemu-devel@nongnu.org; Wed, 12 May 2010 02:15:54 -0400 Received: from chello084112167138.7.11.vie.surfer.at ([84.112.167.138]:40957 helo=wiesinger.com) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OC5EV-0007HS-Bl for qemu-devel@nongnu.org; Wed, 12 May 2010 02:15:52 -0400 Received: from bbs.intern (localhost [127.0.0.1]) by wiesinger.com (8.14.4/8.14.4) with ESMTP id o4C6ED2H028518; Wed, 12 May 2010 08:14:13 +0200 Received: from localhost (gerhard@localhost) by bbs.intern (8.14.4/8.14.4/Submit) with ESMTP id o4C6ECON028513; Wed, 12 May 2010 08:14:12 +0200 Date: Wed, 12 May 2010 08:14:12 +0200 (CEST) From: Gerhard Wiesinger To: Avi Kivity Subject: Re: [Qemu-devel] Re: QEMU-KVM and video performance In-Reply-To: <4BE7B6A9.8060007@redhat.com> Message-ID: References: <4BCEBE5C.4020404@redhat.com> <20100421183357.GK27575@shareable.org> <4BCF6699.2060201@redhat.com> <4BCFF4B5.7010302@redhat.com> <4BE7B6A9.8060007@redhat.com> User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) MIME-Version: 1.0 X-MailScanner-Information-wiesinger-com: Please contact the ISP for more information X-wiesinger-com-MailScanner-ID: o4C6ED2H028518 X-MailScanner-wiesinger-com: Found to be clean X-MailScanner-SpamCheck-wiesinger-com: not spam, SpamAssassin (not cached, score=-4.399, required 4.5, autolearn=not spam, ALL_TRUSTED -1.80, BAYES_00 -2.60) X-MailScanner-From: lists@wiesinger.com X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4-2.6 Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org On Mon, 10 May 2010, Avi Kivity wrote: > On 05/09/2010 10:35 PM, Gerhard Wiesinger wrote: >>>> > > For 256 color more the first priority is to find out why direct mapping is > not used. I'd suggest tracing the code that makes this decision (in > hw/*vga.c) and seeing if it's right or not. I think this is because A000 is not initialized for KVM (see log below and logging patch attached). Switches tried without success: -vga std (log is from this one) -vga cirrus -vga vmware I tried also to force the mapping (see patch where it is commented out) but some errors occour (see 2nd log below) and performance is still low at ~1MB/s: s->lfb_vram_mapped = 1; On testing the following line occour: vga_dirty_log_start vga_dirty_log_start vga_dirty_log_start vga_dirty_log_start vga_dirty_log_start vga_dirty_log_start ... Any ideas? Can you reproduce it? Thnx. Ciao, Gerhard --- http://www.wiesinger.com/ vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_map_addr, start=0xF0000000, len=0x01000000 vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start vga_dirty_log_start_mapping_map_addr, start=0xF0000000, len=0x01000000 vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_map_addr, start=0xF0000000, len=0x01000000 vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 -------------------------------------------------------------------------------------- vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start vga_dirty_log_start_mapping_map_addr, start=0xF0000000, len=0x01000000 vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 vga_dirty_log_start BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start vga_dirty_log_start_mapping_map_addr, start=0xF0000000, len=0x01000000 vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start vga_dirty_log_start_mapping_map_addr, start=0xF0000000, len=0x01000000 vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A0000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a0000-00000000000a7fff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x000A8000, len=0x00008000 BUG: kvm_dirty_pages_log_change: invalid parameters 00000000000a8000-00000000000affff vga_dirty_log_start_mapping_lfb_vram_mapped, start=0xE0000000, len=0x01000000 diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index 571044f..68c6083 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -2581,6 +2581,7 @@ static void map_linear_vram(CirrusVGAState *s) cpu_register_physical_memory(isa_mem_base + 0xa8000, 0x8000, (s->vga.vram_offset + s->cirrus_bank_base[1]) | IO_MEM_RAM); + printf("Cirrus VGA: lfb_vram_mapped=1\n"); s->vga.lfb_vram_mapped = 1; } else { diff --git a/hw/vga.c b/hw/vga.c index a5e2387..cb8a209 100644 --- a/hw/vga.c +++ b/hw/vga.c @@ -1612,15 +1612,19 @@ static void mark_dirty(target_phys_addr_t start, target_phys_addr_t len) void vga_dirty_log_start(VGACommonState *s) { + printf("vga_dirty_log_start\n"); if (kvm_enabled() && s->map_addr) if (!s1) { + printf("vga_dirty_log_start_mapping_map_addr, start=0x%08X, len=0x%08X\n", s->map_addr, s->map_end - s->map_addr); kvm_log_start(s->map_addr, s->map_end - s->map_addr); mark_dirty(s->map_addr, s->map_end - s->map_addr); s1 = 1; } if (kvm_enabled() && s->lfb_vram_mapped) { if (!s2) { + printf("vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x%08X, len=0x%08X\n", (unsigned int)(isa_mem_base + 0xa0000), 0x8000); kvm_log_start(isa_mem_base + 0xa0000, 0x8000); + printf("vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x%08X, len=0x%08X\n", (unsigned int)(isa_mem_base + 0xa8000), 0x8000); kvm_log_start(isa_mem_base + 0xa8000, 0x8000); mark_dirty(isa_mem_base + 0xa0000, 0x10000); } @@ -1630,6 +1634,7 @@ void vga_dirty_log_start(VGACommonState *s) #ifdef CONFIG_BOCHS_VBE if (kvm_enabled() && s->vbe_mapped) { if (!s3) { + printf("vga_dirty_log_start_mapping_lfb_vram_mapped, start=0x%08X, len=0x%08X\n", VBE_DISPI_LFB_PHYSICAL_ADDRESS, s->vram_size); kvm_log_start(VBE_DISPI_LFB_PHYSICAL_ADDRESS, s->vram_size); } s3 = 1; @@ -1965,6 +1970,7 @@ void vga_common_reset(VGACommonState *s) s->map_addr = 0; s->map_end = 0; s->lfb_vram_mapped = 0; +// s->lfb_vram_mapped = 1; s->bios_offset = 0; s->bios_size = 0; s->sr_index = 0;