Re: read/write on RADOS using external buffer

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

 



On Wed, 20 Oct 2010, Colin McCabe wrote:
> > SimpleMessenger will change no matter what, because the core problem that
> > we're trying to solve is that it allocates a new buffer when a message is
> > being read off the wire.  See SimpleMessenger::read_message().  Somehow
> > that needs to discover and use the user provided buffer instead.  That
> > will invariably involve a callback of some sort to find the user buffer.
> > And some means of yanking the buffer away to deal with the corner issue
> > above.
> 
> I can see now that we're always allocating a new bufferlist in
> SimpleMessenger. I can see why we want this feature.
> 
> I wish we didn't have to have a callback just to get the buffer we're
> trying to write into. It feels like that should somehow be grouped
> with the rest of the transaction data. Why can't we add it to
> Objector::Op's constructor, for example. There must be some obvious
> reason but I don't see it yet.

Well, we could push it into the Objecter.  We could also try to push it 
all the way down into the messenger, my maintaining a map of <type,tid> to 
buffer or something.  Mainly I want to avoid changing too much of the 
intervening interfaces if we can avoid it.  That may be possible, though.  
If the Objecter::read() is given a non-empty bufferlist* to read into, it 
could advertise that buffer to the messenger and the messenger could 
handle it all.

But the same problem comes up: we need to also have an interface to take 
the buffer back, which will mean some interesting interaction with the 
reader threads.

The kernel messenger avoids this, btw, because it is event driven: we wake 
up when there is socket activity and do non-blocking reads/writes, so we 
can lock the buffers while doing that IO.  The SimpleMessenger 
implementation uses threads, and IIRC the pthread locking  
and select/poll interfaces don't play well together.

sage
 

[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