All of lore.kernel.org
 help / color / mirror / Atom feed
From: jerome Arbez-Gindre <jerome.arbez-gindre@laposte.net>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] need advice on PCI board emulation
Date: Fri, 08 Dec 2006 17:57:38 +0100	[thread overview]
Message-ID: <1165597058.9321.13.camel@bibi> (raw)
In-Reply-To: <200612081507.40975.paul@codesourcery.com>

On Fri, 2006-12-08 at 15:07 +0000, Paul Brook wrote:
> On Friday 08 December 2006 10:52, jerome Arbez-Gindre wrote:
> > Hi,
> >
> > I'm working on a modem PCI board emulation inside Qemu.
> 
> Qemu already emulates a reasonably modern PCI system.
> 

I'm emulating a MODEM (not modern;-)) pci board ... and for this, i'm
using the Qemu API.

> > My emulation is neerly functionnaly complete, but I have some doubt on
> > my technical choices :
> >  - to emulate dma transfers, I launch one thread for each dma channel.
> 
> Does this really provide any significant speedup? ie. does qemu spend 
> significant amounts of time doing dma transfers?

My aim is to be as near as possible of the real system behavior.
In fact I'm speeding down the dma transfers, and I wan let Qemu (and my
driver) working during this time.

> 
> >  - to emulate posponed starting behaviors (board self tests), I launch a
> > thread with a sleep and then board status changes.
> 
> You should just use timers.

Why not, but it does not resolve mutual exclusion problems.

> 
> >  - to emulate demodulated incoming data, I launch one thread waiting
> > with blocking reads on a UDP socket.
> 
> Again, why use threads?

To wait incoming data.

> 
> > Because I had some toubles (segfaults in tb_reset_jump_recursive2
> > (exec.c)), I have serilized my calls to pci_set_irq with the help of a
> > new thread.
> >
> > So, my question is :
> > 	Is it reasonable to use threads to emulate parallel behaviors ?
> 
> Maybe. With the possible exception of processing graphics, I wouldn't expect 
> there to be very limited scope for parallelism in peripheral emulation. Most 
> things are limited by the speed of the underlying device, or how fast the 
> guest CPU can process the data.
> 
> You're liable to spend more time fighting for locks and waiting for cache 
> flushes bouncing data between different CPUs than you gain from using 
> multiple cores. On single cpu systems (which are still common in low-end 
> machines) using threads is almost certainly going to slow things down.

My Qemu is running on a multi-processor machine.

> 
> If you look at the current code, you'll notice that most of the operations 
> that can block for a long time waiting for external inputs (IDE/SCSI/USB) 
> already operate asynchronously, and network is fairly asynchronous anyway.

I've looked in the current code. But I don't understand how asynchronous
mechanisms are taking the hand back.
Perhaps I should look deeper ;-)

> 
> Paul

Jérôme

  reply	other threads:[~2006-12-08 16:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-08 10:52 [Qemu-devel] need advice on PCI board emulation jerome Arbez-Gindre
2006-12-08 15:07 ` Paul Brook
2006-12-08 16:57   ` jerome Arbez-Gindre [this message]
2006-12-08 15:22 ` Paul Brook
2006-12-08 17:06   ` jerome Arbez-Gindre

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=1165597058.9321.13.camel@bibi \
    --to=jerome.arbez-gindre@laposte.net \
    --cc=qemu-devel@nongnu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.