qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Alexander Graf <agraf@suse.de>
Cc: Stefan Hajnoczi <stefanha@gmail.com>,
	QEMU-devel Developers <qemu-devel@nongnu.org>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Joerg Roedel <Joerg.Roedel@amd.com>,
	"tj@kernel.org" <tj@kernel.org>,
	Sebastian Herbszt <herbszt@gmx.de>,
	Roland Elek <elek.roland@gmail.com>
Subject: Re: [Qemu-devel] [PATCH 00/10] AHCI emulation support v2
Date: Fri, 19 Nov 2010 10:15:34 +0100	[thread overview]
Message-ID: <4CE64036.4040206@redhat.com> (raw)
In-Reply-To: <D17ADFDD-6147-408C-8A83-FA46AC69784D@suse.de>

Am 18.11.2010 19:43, schrieb Alexander Graf:
> 
> On 18.11.2010, at 14:26, Kevin Wolf <kwolf@redhat.com> wrote:
> 
>> Hi Alex,
>>
>> Am 18.11.2010 04:27, schrieb Alexander Graf:
>>> This patch adds support for AHCI emulation. I have tested and verified it works
>>> in Linux, OpenBSD, Windows Vista and Windows 7. This AHCI emulation supports
>>> NCQ, so multiple read or write requests can be outstanding at the same time.
>>>
>>> The code is however not fully optimized yet. I'm fairly sure that there are
>>> low hanging performance fruits to be found still :). In my simple benchmarks
>>> I achieved about 2/3rd of virtio performance.
>>>
>>> Also, this AHCI emulation layer does not support legacy mode. So if you're
>>> using a disk with this emulation, you do not get it exposed using the legacy
>>> IDE interfaces.
>>>
>>> Another nitpick is CD-ROM support in Windows. Somehow it doesn't detect a
>>> CD-ROM drive attached to AHCI. At least it doesn't list it.
>>>
>>> To attach an AHCI disk to your VM, please use
>>>
>>>  -drive file=...,if=sata
>>>
>>> This should do the trick for x86. On other platforms, you might need to add
>>> the ahci host controller using -device.
>>>
>>>
>>> This patch set is based on work done during the Google Summer of Code. I was
>>> mentoring a student, Roland Elek, who wrote most of the AHCI emulation code
>>> based on a patch from Chong Qiao. A bunch of other people were also involved,
>>> so everybody who I didn't mention - thanks a lot!
>>
>> I'm not completely sure about the relationship between the AHCI
>> emulation and our existing IDE emulation. First thing I noticed is that
>> AHCI wants to be independent and resides in hw/ instead of hw/ide/, but
>> it still include ide/internal.h. Do you think it would make sense to
>> move AHCI into hw/ide?
> 
> Both ahci and ide implement ata. I guess the best thing to do would be to completely refactor all ide code into ata and pata code, then add ahci (sata) to the game. Estimated working time: ~1 month. :)
> 
> As I would rather have something working we can base on in the tree, so whoever volunteers for the refactoring (hint!) knows how to design the interfaces, I am not sure how much is reasonable within this patch set.

I guess I have to read this as: You want to drop the code into the
repository, no matter what mess it creates, and leave the cleanup to
some volunteer that will never appear. So whoever is in the unfortunate
position of having to touch the IDE code afterwards will have the pain
because this series is doing only the half of what should be done.

I'm sure that with a working time of only a few days the result could be
substantially improved, even if a month would be needed for perfection.

> Moving the file to ide/ does sound like a good idea however.
> 
>>
>> Then I believe that core.c is now a mixture of some generic ATA code
>> (that is also used by SATA) and the Legacy IDE code. SATA doesn't seem
>> to interact with the generic code through clean interfaces, but by
>> accessing internal data structures and calls to somewhere in the middle
>> of the existing IDE emultion. I think we should get a clean abstraction
>> there and have a clean split between SATA, PATA and common code, with
>> each of them sitting in its own file in hw/ide.
>>
>> I haven't reviewed the patches in detail but just had a quick look at
>> them, so my impressions might be wrong. If so, please correct me.
> 
> No, you're completely right. We're in a chicken and egg situation. We don't have ahci, but the ide code is ugly. We would probably do a bad job at refactoring the ata code if we don't know which interfaces to design for.

That problem is solved. You have posted patches, so you're aware what
interfaces you need for AHCI. This awareness doesn't come from putting
the code into git master.

> So IMHO the only way we can really go is to implement sata, take the uglyness it adds to the already ugly ide code and use all of that for a working state we can start to refactor from.
> 
> So yes, while I agree with your obversations, I do not believe we will get there until at least 0.16 or so. And I'd rather like to see a fast default block driver in gueast sooner than later :)

Note that not doing the refactoring in this patch series means not only
that it won't happen, but also that your patches are very hard to
review. The order in which I would expect changes is to do the
refactoring and then base the SATA code on these clean interfaces - not
first creating a mess and then (maybe some time) trying to clean it up.

You always say "we" will refactor and "we" will clean up, so who is this
"we"? Will you do it or are you rather trying to put it on my todo list?
I must admit that I wouldn't be happy about the latter.

Kevin

  parent reply	other threads:[~2010-11-19  9:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-18  3:27 [Qemu-devel] [PATCH 00/10] AHCI emulation support v2 Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 01/10] ide: split ide command interpretation off Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 02/10] ide: fix whitespace gap in ide_exec_cmd Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 03/10] ide: add support for ide bus ops Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 04/10] ide: add DMA hooks to " Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 05/10] ide: add ncq identify data for ahci sata drives Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 06/10] pci: add storage class for sata Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 07/10] pci: add ich7 pci id Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 08/10] ahci: add ahci emulation Alexander Graf
2010-11-18  8:01   ` [Qemu-devel] " Gerd Hoffmann
2010-11-18 18:05     ` Alexander Graf
2010-11-19  9:12       ` Gerd Hoffmann
2010-11-19 10:08         ` Roedel, Joerg
2010-11-18  3:27 ` [Qemu-devel] [PATCH 09/10] ahci: add -drive support Alexander Graf
2010-11-18  3:27 ` [Qemu-devel] [PATCH 10/10] ahci: spawn controller on demand Alexander Graf
2010-11-18 10:00 ` [Qemu-devel] Re: [PATCH 00/10] AHCI emulation support v2 Stefan Hajnoczi
2010-11-18 13:26 ` [Qemu-devel] " Kevin Wolf
2010-11-18 18:43   ` Alexander Graf
2010-11-18 20:06     ` Ryan Harper
2010-11-18 23:24       ` Alexander Graf
2010-11-19  9:12         ` Stefan Hajnoczi
2010-11-21  2:32           ` Alexander Graf
2010-11-19  9:15     ` Kevin Wolf [this message]
2010-11-19 11:56       ` Gerd Hoffmann
2010-11-19 12:27         ` Kevin Wolf
2010-11-19 13:08       ` Alexander Graf
2010-11-19 13:46         ` Kevin Wolf
2010-11-21  2:19           ` Alexander Graf
2010-11-22  8:45             ` Kevin Wolf
2010-11-19 14:36         ` Gerd Hoffmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CE64036.4040206@redhat.com \
    --to=kwolf@redhat.com \
    --cc=Joerg.Roedel@amd.com \
    --cc=agraf@suse.de \
    --cc=elek.roland@gmail.com \
    --cc=herbszt@gmx.de \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).