Re: xio-rados-firefly branch update

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A few days later than I wanted, but I got through various pieces of
this today. It wasn't a thorough review but more a "shape of things"
check, but I have a bunch of notes.

On Tue, Apr 22, 2014 at 2:50 PM, Matt W. Benjamin <matt@xxxxxxxxxxxx> wrote:
> Hi Greg,
>
> Sure.  I'm interested in all feedback you come up with, but for starters,
> it would be helpful to have feedback on
>
> 1. the Messenger reorg in general, and perhaps specifically how to think
> about the throttle ideas that I shoved into SimplePolicyMessenger

The re-org mostly looks fine.
I notice you're adding a few more "friend" declarations though, and I
don't think those should be necessary — Connection can label stuff as
protected instead of private to help with that.
PipeConnection should probably live with Pipe or SimpleMessenger
instead of Connection? Certainly don't want the backwards knowledge
that "friend class PipeConnection" implies.
It would be better if we didn't need to add members to the shared
classes in order to allow one implementation but not the other
(looking particularly at bi::list_member_hook<> dispatch_q).

SimplePolicyMessenger seems a bit weird — it's just a
shared-implementation class, but it doesn't hide any of the meaning of
the policies away from you or provide interfaces to do the work for
you. In particular, it doesn't look like the Xio stuff is actually
following any of the throttle rules about how much data is allowed in
from clients, and SimplePolicyMessenger isn't helping it do so.


> 2. about the completion mechanisms--with the addition of claim_data, this
> is provisionally complete

Can you talk about this a bit in general before I comment? I want to
make sure I understand what's going on here, particularly with the way
you're doing memory allocation in the mempools and handling the
refcounting.

> 3. about DispatchStrategy and non-prio queueing, and how the way we're doing
> things relates to your parallel work with SimpleMessenger

This looks a bit problematic. In particular, the standard
SimpleMessenger interface is responsible for delivery fairness between
different peers, and none of your examples provide that. I suppose
they do have the information needed to do so as part of the
Message::connection member.
My work on speeding up the SimpleMessenger introduces "fast dispatch"
for specific types of messages, and shifts responsibility for fairness
onto the Dispatcher. It's essentially your "FastStrategy" but via
separate delivery interfaces (so the daemon can do less locking, etc).

Other notes of varying import:
XioMessenger doesn't implement any of the mark_down stuff. I realize
that those interfaces are a bit weird for a "persistent-in-hardware"
connection, but we need some way of simulating them — the Dispatcher
uses those interfaces to toss everything out and start over, making
sure messages don't survive from one daemon invocation to another. (A
separate daemon invocation from the cluster's perspective might still
be the same daemon on the local machine, if it went unresponsive for
some reason.)

Is MDataPing just for your messenger testing bits?

The buffer changes appear to have some unnecessary Xio class
declarations in buffer.h, and it’d be nice if all of that was guarded
by HAVE_XIO blocks.
Do you actually want the only exposed interface to be create_msg()? It
might become convenient to be able to allocate xio memory space
elsewhere and give it to the messenger (for instance, reading data off
disk for transmission to a client).

Is "new (bp) xio_msg_buffer(m_hook, buf, len);” some syntax I’m
unaware of, or a merge/rebase issue? (Seriously, no idea. :)

What is CEPH_ENTITY_TYPE_GENERIC_SERVER for?

Looking at your example setups in OSD and Monitor, I'm not entirely
thrilled with adding new parameters for an XioMessenger in addition to
SimpleMessenger. I'd rather we came up with some interface so this was
all transparent to the daemon code and endpoint selection was handled
in the messenger layer.
This is also introducing some difficulties with monitor identification
— they are pretty much identified by IP:port, and having two separate
addresses for a single monitor is going to get weird.
I notice that (for the OSD) you’re setting the “poison pill” on
ms_public twice rather than adding it to ms_xio_public.

Thanks!
-Greg
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux