From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@redhat.com>
Cc: Cam Macdonell <cam@cs.ualberta.ca>,
qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: [Qemu-devel] Re: [PATCH v5 4/5] Inter-VM shared memory PCI device
Date: Tue, 11 May 2010 08:10:03 -0500 [thread overview]
Message-ID: <4BE9572B.3010104@codemonkey.ws> (raw)
In-Reply-To: <4BE90E6D.7070007@redhat.com>
On 05/11/2010 02:59 AM, Avi Kivity wrote:
>> (Replying again to list)
>>
>> What data structure would you use? For a lockless ring queue, you
>> can only support a single producer and consumer. To achieve
>> bidirectional communication in virtio, we always use two queues.
>
>
> You don't have to use a lockless ring queue. You can use locks
> (spinlocks without interrupt support, full mutexes with interrupts)
> and any data structure you like. Say a hash table + LRU for a shared
> cache.
Yeah, the mailslot enables this.
I think the question boils down to whether we can support transparent
peer connections and disconnections. I think that's important in order
to support transparent live migration.
If you have two peers that are disconnected and then connect to each
other, there's simply no way to choose who's content gets preserved.
It's necessary to designate one peer as a master in order to break the tie.
So this could simply involve an additional option to the shared memory
driver: role=master|peer. If role=master, when a new shared memory
segment is mapped, the contents of the BAR ram is memcpy()'d to the
shared memory segment. In either case, the contents of the shared
memory segment should be memcpy()'d to the BAR ram whenever the shared
memory segment is disconnected.
I believe role=master should be default because I think a relationship
of master/slave is going to be much more common than peering.
>>
>> If you're adding additional queues to support other levels of
>> communication, you can always use different areas of shared memory.
>
> You'll need O(n^2) shared memory areas (n=peer count), and it is a lot
> less flexible that real shared memory. Consider using threading where
> the only communication among threads is a pipe (erlang?)
I can't think of a use of multiple peers via shared memory today with
virtualization. I know lots of master/slave uses of shared memory
though. I agree that it's useful to support from an academic
perspective but I don't believe it's going to be the common use.
Regards,
Anthony Liguori
next prev parent reply other threads:[~2010-05-11 13:10 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-21 17:53 [Qemu-devel] [PATCH v5 0/5] PCI Shared Memory device Cam Macdonell
2010-04-21 17:53 ` [Qemu-devel] [PATCH v5 1/5] Device specification for shared memory PCI device Cam Macdonell
2010-04-21 17:53 ` [Qemu-devel] [PATCH v5 2/5] Support adding a file to qemu's ram allocation Cam Macdonell
2010-04-21 17:53 ` [Qemu-devel] [PATCH v5 3/5] Add functions for assigning ioeventfd and irqfds Cam Macdonell
2010-04-21 17:53 ` [Qemu-devel] [PATCH v5 4/5] Inter-VM shared memory PCI device Cam Macdonell
2010-04-21 18:00 ` [Qemu-devel] [PATCH v5 5/5] shared memory server for inter-VM shared memory Cam Macdonell
2010-05-05 16:57 ` [Qemu-devel] [PATCH v5 4/5] RESEND: Inter-VM shared memory PCI device Cam Macdonell
2010-05-06 17:32 ` [Qemu-devel] Re: [PATCH v5 4/5] " Anthony Liguori
2010-05-06 17:59 ` Cam Macdonell
2010-05-10 11:59 ` Avi Kivity
2010-05-10 15:22 ` Cam Macdonell
2010-05-10 15:28 ` Avi Kivity
2010-05-10 15:38 ` Anthony Liguori
2010-05-10 16:20 ` Cam Macdonell
2010-05-10 16:52 ` Anthony Liguori
2010-05-18 16:58 ` Cam Macdonell
2010-05-18 17:27 ` Avi Kivity
2010-05-10 16:59 ` Avi Kivity
2010-05-10 17:25 ` Anthony Liguori
2010-05-10 17:43 ` Cam Macdonell
2010-05-10 17:52 ` Anthony Liguori
2010-05-10 18:01 ` Cam Macdonell
2010-05-11 7:59 ` Avi Kivity
2010-05-11 13:10 ` Anthony Liguori [this message]
2010-05-11 14:03 ` Avi Kivity
2010-05-11 14:17 ` Cam Macdonell
2010-05-11 14:53 ` Avi Kivity
2010-05-11 15:51 ` Anthony Liguori
2010-05-11 16:39 ` Cam Macdonell
2010-05-11 17:05 ` Anthony Liguori
2010-05-11 17:50 ` Cam Macdonell
2010-05-11 18:13 ` Avi Kivity
2010-05-12 15:32 ` Cam Macdonell
2010-05-12 15:48 ` Avi Kivity
2010-05-11 18:09 ` Avi Kivity
2010-05-11 7:55 ` Avi Kivity
2010-05-10 15:41 ` Cam Macdonell
2010-05-10 16:40 ` Avi Kivity
2010-05-10 16:48 ` Cam Macdonell
2010-05-12 15:49 ` Avi Kivity
2010-05-12 16:14 ` Cam Macdonell
2010-05-12 16:45 ` Avi Kivity
2010-05-10 23:17 ` Cam Macdonell
2010-05-11 8:03 ` Avi Kivity
2010-05-13 21:10 ` Cam Macdonell
2010-05-15 6:05 ` Avi Kivity
2010-05-10 10:43 ` [Qemu-devel] Re: [PATCH v5 3/5] Add functions for assigning ioeventfd and irqfds Avi Kivity
2010-05-10 15:13 ` Cam Macdonell
2010-05-10 15:17 ` Avi Kivity
2010-05-10 10:39 ` [Qemu-devel] Re: [PATCH v5 2/5] Support adding a file to qemu's ram allocation Avi Kivity
2010-05-10 15:32 ` Cam Macdonell
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=4BE9572B.3010104@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=avi@redhat.com \
--cc=cam@cs.ualberta.ca \
--cc=kvm@vger.kernel.org \
--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 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).