Message ID | 20220105221237.2659462-6-yanjun.zhu@linux.dev (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Generate UDP src port with flow label or lqpn/rqpn | expand |
On Wed, Jan 05, 2022 at 05:12:37PM -0500, yanjun.zhu@linux.dev wrote: > From: Zhu Yanjun <yanjun.zhu@linux.dev> > > Since the UDP source port is modified in rxe_modify_qp, the randomization > for UDP source port is redundant in this function. So remove it. > > Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev> > --- > drivers/infiniband/sw/rxe/rxe_qp.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c > index 54b8711321c1..84d6ffe7350a 100644 > --- a/drivers/infiniband/sw/rxe/rxe_qp.c > +++ b/drivers/infiniband/sw/rxe/rxe_qp.c > @@ -210,15 +210,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, > return err; > qp->sk->sk->sk_user_data = qp; > > - /* pick a source UDP port number for this QP based on > - * the source QPN. this spreads traffic for different QPs > - * across different NIC RX queues (while using a single > - * flow for a given QP to maintain packet order). > - * the port number must be in the Dynamic Ports range > - * (0xc000 - 0xffff). > + /* Source UDP port number for this QP is modified in rxe_qp_modify. > */ This makes me wonder why do we set this src_port here? Are we using this field before modify QP? Thanks > - qp->src_port = RXE_ROCE_V2_SPORT + > - (hash_32_generic(qp_num(qp), 14) & 0x3fff); > + qp->src_port = RXE_ROCE_V2_SPORT; > qp->sq.max_wr = init->cap.max_send_wr; > > /* These caps are limited by rxe_qp_chk_cap() done by the caller */ > -- > 2.27.0 >
January 5, 2022 3:49 PM, "Leon Romanovsky" <leon@kernel.org> wrote: > On Wed, Jan 05, 2022 at 05:12:37PM -0500, yanjun.zhu@linux.dev wrote: > >> From: Zhu Yanjun <yanjun.zhu@linux.dev> >> >> Since the UDP source port is modified in rxe_modify_qp, the randomization >> for UDP source port is redundant in this function. So remove it. >> >> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev> >> --- >> drivers/infiniband/sw/rxe/rxe_qp.c | 10 ++-------- >> 1 file changed, 2 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c >> index 54b8711321c1..84d6ffe7350a 100644 >> --- a/drivers/infiniband/sw/rxe/rxe_qp.c >> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c >> @@ -210,15 +210,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, >> return err; >> qp->sk->sk->sk_user_data = qp; >> >> - /* pick a source UDP port number for this QP based on >> - * the source QPN. this spreads traffic for different QPs >> - * across different NIC RX queues (while using a single >> - * flow for a given QP to maintain packet order). >> - * the port number must be in the Dynamic Ports range >> - * (0xc000 - 0xffff). >> + /* Source UDP port number for this QP is modified in rxe_qp_modify. >> */ > > This makes me wonder why do we set this src_port here? > Are we using this field before modify QP? The commit d3c04a3a6870 ("IB/rxe: vary the source udp port for receive scaling") sets this src_port here. The advantage of setting src_port here is: before rxe_modify_qp, the src port is randomized, not 0xc000. So after/before rxe_modify_qp, the src port is the same value. If the src port is changed in rxe_modify_qp, before rxe_modify_qp, the src port is 0xc000, after rxe_modify_qp, the src port is randomized, for example, src port is 0xF043. So when the new method is adopted, I removed this. Zhu Yanjun > > Thanks > >> - qp->src_port = RXE_ROCE_V2_SPORT + >> - (hash_32_generic(qp_num(qp), 14) & 0x3fff); >> + qp->src_port = RXE_ROCE_V2_SPORT; >> qp->sq.max_wr = init->cap.max_send_wr; >> >> /* These caps are limited by rxe_qp_chk_cap() done by the caller */ >> -- >> 2.27.0
On Wed, Jan 05, 2022 at 08:42:03AM +0000, yanjun.zhu@linux.dev wrote: > January 5, 2022 3:49 PM, "Leon Romanovsky" <leon@kernel.org> wrote: > > > On Wed, Jan 05, 2022 at 05:12:37PM -0500, yanjun.zhu@linux.dev wrote: > > > >> From: Zhu Yanjun <yanjun.zhu@linux.dev> > >> > >> Since the UDP source port is modified in rxe_modify_qp, the randomization > >> for UDP source port is redundant in this function. So remove it. > >> > >> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev> > >> --- > >> drivers/infiniband/sw/rxe/rxe_qp.c | 10 ++-------- > >> 1 file changed, 2 insertions(+), 8 deletions(-) > >> > >> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c > >> index 54b8711321c1..84d6ffe7350a 100644 > >> --- a/drivers/infiniband/sw/rxe/rxe_qp.c > >> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c > >> @@ -210,15 +210,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, > >> return err; > >> qp->sk->sk->sk_user_data = qp; > >> > >> - /* pick a source UDP port number for this QP based on > >> - * the source QPN. this spreads traffic for different QPs > >> - * across different NIC RX queues (while using a single > >> - * flow for a given QP to maintain packet order). > >> - * the port number must be in the Dynamic Ports range > >> - * (0xc000 - 0xffff). > >> + /* Source UDP port number for this QP is modified in rxe_qp_modify. > >> */ > > > > This makes me wonder why do we set this src_port here? > > Are we using this field before modify QP? > > The commit d3c04a3a6870 ("IB/rxe: vary the source udp port for receive scaling") sets this src_port here. > > The advantage of setting src_port here is: before rxe_modify_qp, the src port is randomized, not 0xc000. > So after/before rxe_modify_qp, the src port is the same value. > > If the src port is changed in rxe_modify_qp, before rxe_modify_qp, the src port is 0xc000, after rxe_modify_qp, > the src port is randomized, for example, src port is 0xF043. I'm asking if you use qp->src_port between this line and rxe_modify_qp? Thanks > > So when the new method is adopted, I removed this. > > Zhu Yanjun > > > > > Thanks > > > >> - qp->src_port = RXE_ROCE_V2_SPORT + > >> - (hash_32_generic(qp_num(qp), 14) & 0x3fff); > >> + qp->src_port = RXE_ROCE_V2_SPORT; > >> qp->sq.max_wr = init->cap.max_send_wr; > >> > >> /* These caps are limited by rxe_qp_chk_cap() done by the caller */ > >> -- > >> 2.27.0
January 5, 2022 4:56 PM, "Leon Romanovsky" <leon@kernel.org> wrote: > On Wed, Jan 05, 2022 at 08:42:03AM +0000, yanjun.zhu@linux.dev wrote: > >> January 5, 2022 3:49 PM, "Leon Romanovsky" <leon@kernel.org> wrote: >> >> On Wed, Jan 05, 2022 at 05:12:37PM -0500, yanjun.zhu@linux.dev wrote: >> >> From: Zhu Yanjun <yanjun.zhu@linux.dev> >> >> Since the UDP source port is modified in rxe_modify_qp, the randomization >> for UDP source port is redundant in this function. So remove it. >> >> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev> >> --- >> drivers/infiniband/sw/rxe/rxe_qp.c | 10 ++-------- >> 1 file changed, 2 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c >> index 54b8711321c1..84d6ffe7350a 100644 >> --- a/drivers/infiniband/sw/rxe/rxe_qp.c >> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c >> @@ -210,15 +210,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, >> return err; >> qp->sk->sk->sk_user_data = qp; >> >> - /* pick a source UDP port number for this QP based on >> - * the source QPN. this spreads traffic for different QPs >> - * across different NIC RX queues (while using a single >> - * flow for a given QP to maintain packet order). >> - * the port number must be in the Dynamic Ports range >> - * (0xc000 - 0xffff). >> + /* Source UDP port number for this QP is modified in rxe_qp_modify. >> */ >> >> This makes me wonder why do we set this src_port here? >> Are we using this field before modify QP? >> >> The commit d3c04a3a6870 ("IB/rxe: vary the source udp port for receive scaling") sets this src_port >> here. >> >> The advantage of setting src_port here is: before rxe_modify_qp, the src port is randomized, not >> 0xc000. >> So after/before rxe_modify_qp, the src port is the same value. >> >> If the src port is changed in rxe_modify_qp, before rxe_modify_qp, the src port is 0xc000, after >> rxe_modify_qp, >> the src port is randomized, for example, src port is 0xF043. > > I'm asking if you use qp->src_port between this line and rxe_modify_qp? There are only 2 udp packets between this line and rxe_modify_qp. Zhu Yanjun > > Thanks > >> So when the new method is adopted, I removed this. >> >> Zhu Yanjun >> >> Thanks >> >> - qp->src_port = RXE_ROCE_V2_SPORT + >> - (hash_32_generic(qp_num(qp), 14) & 0x3fff); >> + qp->src_port = RXE_ROCE_V2_SPORT; >> qp->sq.max_wr = init->cap.max_send_wr; >> >> /* These caps are limited by rxe_qp_chk_cap() done by the caller */ >> -- >> 2.27.0
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c index 54b8711321c1..84d6ffe7350a 100644 --- a/drivers/infiniband/sw/rxe/rxe_qp.c +++ b/drivers/infiniband/sw/rxe/rxe_qp.c @@ -210,15 +210,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, return err; qp->sk->sk->sk_user_data = qp; - /* pick a source UDP port number for this QP based on - * the source QPN. this spreads traffic for different QPs - * across different NIC RX queues (while using a single - * flow for a given QP to maintain packet order). - * the port number must be in the Dynamic Ports range - * (0xc000 - 0xffff). + /* Source UDP port number for this QP is modified in rxe_qp_modify. */ - qp->src_port = RXE_ROCE_V2_SPORT + - (hash_32_generic(qp_num(qp), 14) & 0x3fff); + qp->src_port = RXE_ROCE_V2_SPORT; qp->sq.max_wr = init->cap.max_send_wr; /* These caps are limited by rxe_qp_chk_cap() done by the caller */