[Gluster-devel] Suggestion needed to make use of iobuf_pool as rdma buffer.

Ben England bengland at redhat.com
Tue Jan 13 14:48:06 UTC 2015


Rafi,

it totally makes sense to me that you need to pre-allocate i/o buffers that will be used by RDMA, and you don't want to constantly change (i.e. allocate and deallocate) these buffers.  Since a remote RDMA controller can be reading and writing to them, we have to be very careful about deallocating in particular.  So an "arena" of pre-registered RDMA buffers makes perfect sense.

Am I understanding you correctly that io-cache translator is soaking up all the RDMA-related buffers?   How important is io-cache translator to Gluster performance at this point?  Given that FUSE caching is now enabled, it seems to me that io-cache translator would accomplish very little.  Should we have it disabled by default?  If so, would that solve your problem?

So how do read-ahead translator and write-behind translator interact with RDMA buffering?

-ben

----- Original Message -----
> From: "Mohammed Rafi K C" <rkavunga at redhat.com>
> To: gluster-devel at gluster.org
> Sent: Tuesday, January 13, 2015 9:29:56 AM
> Subject: [Gluster-devel] Suggestion needed to make use of iobuf_pool as rdma	buffer.
> 
> Hi All,
> 
> When using RDMA protocol, we need to register the buffer which is going
> to send through rdma with rdma device. In fact, it is a costly
> operation, and a performance killer if it happened in I/O path. So our
> current plan is to register pre-allocated iobuf_arenas from  iobuf_pool
> with rdma when rdma is getting initialized. The problem comes when all
> the iobufs are exhausted, then we need to dynamically allocate new
> arenas from libglusterfs module. Since it is created in libglusterfs, we
> can't make a call to rdma from libglusterfs. So we will force to
> register each of the iobufs from the newly created arenas with rdma in
> I/O path. If io-cache is turned on in client stack, then all the
> pre-registred arenas will use by io-cache as cache buffer. so we have to
> do the registration in rdma for each i/o call for every iobufs,
> eventually we cannot make use of pre registered arenas.
> 
> To address the issue, we have two approaches in mind,
> 
>  1) Register each dynamically created buffers in iobuf by bringing
> transport layer together with libglusterfs.
> 
>  2) create a separate buffer for caching and offload the data from the
> read response to the cache buffer in background.
> 
> If we could make use of preregister memory for every rdma call, then we
> will have approximately 20% increment for write and 25% of increment for
> read.
> 
> Please give your thoughts to address the issue.
> 
> Thanks & Regards
> Rafi KC
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at gluster.org
> http://www.gluster.org/mailman/listinfo/gluster-devel
> 


More information about the Gluster-devel mailing list