* [PATCH v3] rdma: Add bind option
@ 2017-11-08 22:47 sbates
2017-11-22 18:01 ` Stephen Bates
0 siblings, 1 reply; 8+ messages in thread
From: sbates @ 2017-11-08 22:47 UTC (permalink / raw)
To: axboe, fio, logang, elliott; +Cc: Stephen Bates
From: Stephen Bates <sbates@raithlin.com>
In certain configurations it can be useful to bind a rdma_cm to a
particular network interface. For example in multi-path or loopback.
Add a bindname option that the local rdma_cm will try and bind too.
The bind code is based off that used in rping [1].
[1] https://github.com/linux-rdma/rdma-core/blob/ \
master/librdmacm/examples/rping.c
Signed-off-by: Stephen Bates <sbates@raithlin.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>>
---
Changes since v2
Correct rmda mis-spelling in subject line
Changes since v1
Renamed ntoa to the more correct aton
Added reviewed-by tag from Logan
Removed renyufei83@yahoo.com.cn due to email bounce
engines/rdma.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 52 insertions(+), 12 deletions(-)
diff --git a/engines/rdma.c b/engines/rdma.c
index da00cba..6b173a8 100644
--- a/engines/rdma.c
+++ b/engines/rdma.c
@@ -59,6 +59,7 @@ struct rdmaio_options {
struct thread_data *td;
unsigned int port;
enum rdma_io_mode verb;
+ char *bindname;
};
static int str_hostname_cb(void *data, const char *input)
@@ -82,6 +83,16 @@ static struct fio_option options[] = {
.group = FIO_OPT_G_RDMA,
},
{
+ .name = "bindname",
+ .lname = "rdma engine bindname",
+ .type = FIO_OPT_STR_STORE,
+ .off1 = offsetof(struct rdmaio_options, bindname),
+ .help = "Bind for RDMA IO engine",
+ .def = "",
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_RDMA,
+ },
+ {
.name = "port",
.lname = "rdma engine port",
.type = FIO_OPT_INT,
@@ -1004,30 +1015,53 @@ static int fio_rdmaio_close_file(struct thread_data *td, struct fio_file *f)
return 0;
}
+static int aton(struct thread_data *td, const char *host,
+ struct sockaddr_in *addr)
+{
+ if (inet_aton(host, &addr->sin_addr) != 1) {
+ struct hostent *hent;
+
+ hent = gethostbyname(host);
+ if (!hent) {
+ td_verror(td, errno, "gethostbyname");
+ return 1;
+ }
+
+ memcpy(&addr->sin_addr, hent->h_addr, 4);
+ }
+ return 0;
+}
+
static int fio_rdmaio_setup_connect(struct thread_data *td, const char *host,
unsigned short port)
{
struct rdmaio_data *rd = td->io_ops_data;
+ struct rdmaio_options *o = td->eo;
+ struct sockaddr_storage addrb;
struct ibv_recv_wr *bad_wr;
int err;
rd->addr.sin_family = AF_INET;
rd->addr.sin_port = htons(port);
- if (inet_aton(host, &rd->addr.sin_addr) != 1) {
- struct hostent *hent;
+ err = aton(td, host, &rd->addr);
+ if (err)
+ return err;
- hent = gethostbyname(host);
- if (!hent) {
- td_verror(td, errno, "gethostbyname");
- return 1;
- }
+ /* resolve route */
+ if (strcmp(o->bindname, "") != 0) {
+ addrb.ss_family = AF_INET;
+ err = aton(td, o->bindname, (struct sockaddr_in *)&addrb);
+ if (err)
+ return err;
+ err = rdma_resolve_addr(rd->cm_id, (struct sockaddr *)&addrb,
+ (struct sockaddr *)&rd->addr, 2000);
- memcpy(&rd->addr.sin_addr, hent->h_addr, 4);
+ } else {
+ err = rdma_resolve_addr(rd->cm_id, NULL,
+ (struct sockaddr *)&rd->addr, 2000);
}
- /* resolve route */
- err = rdma_resolve_addr(rd->cm_id, NULL, (struct sockaddr *)&rd->addr, 2000);
if (err != 0) {
log_err("fio: rdma_resolve_addr: %d\n", err);
return 1;
@@ -1072,15 +1106,20 @@ static int fio_rdmaio_setup_connect(struct thread_data *td, const char *host,
static int fio_rdmaio_setup_listen(struct thread_data *td, short port)
{
struct rdmaio_data *rd = td->io_ops_data;
+ struct rdmaio_options *o = td->eo;
struct ibv_recv_wr *bad_wr;
int state = td->runstate;
td_set_runstate(td, TD_SETTING_UP);
rd->addr.sin_family = AF_INET;
- rd->addr.sin_addr.s_addr = htonl(INADDR_ANY);
rd->addr.sin_port = htons(port);
+ if (strcmp(o->bindname, "") == 0)
+ rd->addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ else
+ rd->addr.sin_addr.s_addr = htonl(*o->bindname);
+
/* rdma_listen */
if (rdma_bind_addr(rd->cm_id, (struct sockaddr *)&rd->addr) != 0) {
log_err("fio: rdma_bind_addr fail: %m\n");
@@ -1155,7 +1194,8 @@ static int compat_options(struct thread_data *td)
{
// The original RDMA engine had an ugly / seperator
// on the filename for it's options. This function
- // retains backwards compatibility with it.100
+ // retains backwards compatibility with it. Note we do not
+ // support setting the bindname option is this legacy mode.
struct rdmaio_options *o = td->eo;
char *modep, *portp;
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3] rdma: Add bind option
2017-11-08 22:47 [PATCH v3] rdma: Add bind option sbates
@ 2017-11-22 18:01 ` Stephen Bates
2017-11-22 18:10 ` Jens Axboe
2017-11-22 20:13 ` Sitsofe Wheeler
0 siblings, 2 replies; 8+ messages in thread
From: Stephen Bates @ 2017-11-22 18:01 UTC (permalink / raw)
To: axboe, fio, logang, elliott
>In certain configurations it can be useful to bind a rdma_cm to a
>particular network interface. For example in multi-path or loopback.
>
>Add a bindname option that the local rdma_cm will try and bind too.
>
>The bind code is based off that used in rping [1].
>
>[1] https://github.com/linux-rdma/rdma-core/blob/ \
> master/librdmacm/examples/rping.c
>
>Signed-off-by: Stephen Bates <sbates@raithlin.com>
>Reviewed-by: Logan Gunthorpe <logang@deltatee.com>>
Hi Jens
Do you have any concerns or issues with this patch?
Stephen
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] rdma: Add bind option
2017-11-22 18:01 ` Stephen Bates
@ 2017-11-22 18:10 ` Jens Axboe
2017-11-22 18:24 ` Stephen Bates
2017-11-22 20:13 ` Sitsofe Wheeler
1 sibling, 1 reply; 8+ messages in thread
From: Jens Axboe @ 2017-11-22 18:10 UTC (permalink / raw)
To: Stephen Bates; +Cc: fio, logang, elliott
On Wed, Nov 22 2017, Stephen Bates wrote:
> >In certain configurations it can be useful to bind a rdma_cm to a
> >particular network interface. For example in multi-path or loopback.
> >
> >Add a bindname option that the local rdma_cm will try and bind too.
> >
> >The bind code is based off that used in rping [1].
> >
> >[1] https://github.com/linux-rdma/rdma-core/blob/ \
> > master/librdmacm/examples/rping.c
> >
> >Signed-off-by: Stephen Bates <sbates@raithlin.com>
> >Reviewed-by: Logan Gunthorpe <logang@deltatee.com>>
>
> Hi Jens
>
> Do you have any concerns or issues with this patch?
No looks fine to me, seemed to have missed the original.
--
Jens Axboe
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] rdma: Add bind option
2017-11-22 18:10 ` Jens Axboe
@ 2017-11-22 18:24 ` Stephen Bates
0 siblings, 0 replies; 8+ messages in thread
From: Stephen Bates @ 2017-11-22 18:24 UTC (permalink / raw)
To: Jens Axboe; +Cc: fio, logang, elliott
> No looks fine to me, seemed to have missed the original.
Thanks Jens!
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] rdma: Add bind option
2017-11-22 18:01 ` Stephen Bates
2017-11-22 18:10 ` Jens Axboe
@ 2017-11-22 20:13 ` Sitsofe Wheeler
2017-11-22 20:15 ` Jens Axboe
1 sibling, 1 reply; 8+ messages in thread
From: Sitsofe Wheeler @ 2017-11-22 20:13 UTC (permalink / raw)
To: Stephen Bates; +Cc: axboe, fio, logang, elliott
On 22 November 2017 at 18:01, Stephen Bates <sbates@raithlin.com> wrote:
>>In certain configurations it can be useful to bind a rdma_cm to a
>>particular network interface. For example in multi-path or loopback.
>>
>>Add a bindname option that the local rdma_cm will try and bind too.
>>
>>The bind code is based off that used in rping [1].
>>
>>[1] https://github.com/linux-rdma/rdma-core/blob/ \
>> master/librdmacm/examples/rping.c
>>
>>Signed-off-by: Stephen Bates <sbates@raithlin.com>
>>Reviewed-by: Logan Gunthorpe <logang@deltatee.com>>
>
> Hi Jens
>
> Do you have any concerns or issues with this patch?
One quick suggestion - any chance you could update the HOWTO and fio.1
documentation to include the new ioengine parameter?
--
Sitsofe | http://sucs.org/~sits/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] rdma: Add bind option
2017-11-22 20:13 ` Sitsofe Wheeler
@ 2017-11-22 20:15 ` Jens Axboe
2017-11-22 20:22 ` Stephen Bates
0 siblings, 1 reply; 8+ messages in thread
From: Jens Axboe @ 2017-11-22 20:15 UTC (permalink / raw)
To: Sitsofe Wheeler, Stephen Bates; +Cc: fio, logang, elliott
On 11/22/2017 01:13 PM, Sitsofe Wheeler wrote:
> On 22 November 2017 at 18:01, Stephen Bates <sbates@raithlin.com> wrote:
>>> In certain configurations it can be useful to bind a rdma_cm to a
>>> particular network interface. For example in multi-path or loopback.
>>>
>>> Add a bindname option that the local rdma_cm will try and bind too.
>>>
>>> The bind code is based off that used in rping [1].
>>>
>>> [1] https://github.com/linux-rdma/rdma-core/blob/ \
>>> master/librdmacm/examples/rping.c
>>>
>>> Signed-off-by: Stephen Bates <sbates@raithlin.com>
>>> Reviewed-by: Logan Gunthorpe <logang@deltatee.com>>
>>
>> Hi Jens
>>
>> Do you have any concerns or issues with this patch?
>
> One quick suggestion - any chance you could update the HOWTO and fio.1
> documentation to include the new ioengine parameter?
Thanks Sitsofe, I somehow missed this. Yes, those options should be added
to the engine specific options in both those files.
--
Jens Axboe
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] rdma: Add bind option
2017-11-22 20:15 ` Jens Axboe
@ 2017-11-22 20:22 ` Stephen Bates
2017-11-22 20:25 ` Jens Axboe
0 siblings, 1 reply; 8+ messages in thread
From: Stephen Bates @ 2017-11-22 20:22 UTC (permalink / raw)
To: Jens Axboe, Sitsofe Wheeler; +Cc: fio, logang, elliott
>> One quick suggestion - any chance you could update the HOWTO and fio.1
>> documentation to include the new ioengine parameter?
>
> Thanks Sitsofe, I somehow missed this. Yes, those options should be added
> to the engine specific options in both those files.
I did look at this but saw that there was no description for any of the existing rdma ioengine options. If you like I can submit a follow-on patch adding some information for both the new bind option and the older options for rdma ioengine? I will try and get that in the next couple of days.
Stephen
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3] rdma: Add bind option
2017-11-22 20:22 ` Stephen Bates
@ 2017-11-22 20:25 ` Jens Axboe
0 siblings, 0 replies; 8+ messages in thread
From: Jens Axboe @ 2017-11-22 20:25 UTC (permalink / raw)
To: Stephen Bates, Sitsofe Wheeler; +Cc: fio, logang, elliott
On 11/22/2017 01:22 PM, Stephen Bates wrote:
>>> One quick suggestion - any chance you could update the HOWTO and fio.1
>>> documentation to include the new ioengine parameter?
>>
>> Thanks Sitsofe, I somehow missed this. Yes, those options should be added
>> to the engine specific options in both those files.
>
> I did look at this but saw that there was no description for any of
> the existing rdma ioengine options. If you like I can submit a
> follow-on patch adding some information for both the new bind option
> and the older options for rdma ioengine? I will try and get that in
> the next couple of days.
That'd be awesome, that's definitely an oversight. The engine private
options should all be documented in there.
--
Jens Axboe
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-11-22 20:25 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-08 22:47 [PATCH v3] rdma: Add bind option sbates
2017-11-22 18:01 ` Stephen Bates
2017-11-22 18:10 ` Jens Axboe
2017-11-22 18:24 ` Stephen Bates
2017-11-22 20:13 ` Sitsofe Wheeler
2017-11-22 20:15 ` Jens Axboe
2017-11-22 20:22 ` Stephen Bates
2017-11-22 20:25 ` Jens Axboe
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.