Introduce an IB device's scatter end padding capability
Subsystems (2)
cover Introduce an IB device's scatter end padding capability
There are PCIe root complex that are able to optimize their performance when incoming data is multiple full cache lines.
Expose the device capability to pad the ending of incoming packets (scatter) to full cache line such that the last upstream write generated by the incoming packet will be a full cache line.
The patches are available in the git repository at:
git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git tags/rdma-next-2017-10-17-2
Thanks
---------------------------------------
Noa Osherovich (2):
IB/core: Add scatter end padding flags for WQ and QP IB/mlx5: Add scatter end padding support
drivers/infiniband/core/uverbs_cmd.c | 3 ++- drivers/infiniband/hw/mlx5/main.c | 3 +++ drivers/infiniband/hw/mlx5/mlx5_ib.h | 2 ++ drivers/infiniband/hw/mlx5/qp.c | 36 +++++++++++++++++++++++++++++++++--- include/rdma/ib_verbs.h | 4 ++++ 5 files changed, 44 insertions(+), 4 deletions(-)
Signature · 6 lines
2.14.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20171017151857.11934-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 1/2 IB/core: Add scatter end padding flags for WQ and QP
From: Noa Osherovich <noaos-VPRAkNaXOzVWk0Htik3J/[email protected]>
There are root complexes that are able to optimize their performance when incoming data is multiple full cache lines.
Scatter end padding is the device's ability to pad the ending of incoming packets (scatter) to full cache line such that the last upstream write generated by an incoming packet will be a full cache line.
Add a relevant entry to ib_device_cap_flags to report scatter end padding capability of an RDMA device.
Add the QP and WQ create flags with an entry for scatter end padding:
* A QP/WQ created with a scatter end padding flag will cause HW to pad the last upstream write generated by a packet to cache line.
User should consider several factors before activating this feature:
- In case of high CPU memory load (which may cause PCI back pressure in turn), if a large percent of the writes are partial cache line, this feature should be checked as an optional solution.
- This feature might reduce performance if most packets are between one and two cache lines and PCIe throughput has reached its maximum capacity. E.g. 65B packet from the network port will lead to 128B write on PCIe, which may cause traffic on PCIe to reach high throughput.
--- drivers/infiniband/core/uverbs_cmd.c | 3 ++- include/rdma/ib_verbs.h | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-)
drivers/infiniband/core/uverbs_cmd.c +2 -1
@@ -1491,7 +1491,8 @@ static int create_qp(struct ib_uverbs_file *file, IB_QP_CREATE_MANAGED_RECV | IB_QP_CREATE_SCATTER_FCS | IB_QP_CREATE_CVLAN_STRIPPING | - IB_QP_CREATE_SOURCE_QPN)) { + IB_QP_CREATE_SOURCE_QPN | + IB_QP_CREATE_SCATTER_END_PADDING)) { ret = -EINVAL ; goto err_put; }
include/rdma/ib_verbs.h +4 -0
@@ -229,6 +229,8 @@ enum ib_device_cap_flags {/* Deprecated. Please use IB_RAW_PACKET_CAP_SCATTER_FCS. */ IB_DEVICE_RAW_SCATTER_FCS = (1ULL <<34 ),IB_DEVICE_RDMA_NETDEV_OPA_VNIC = (1ULL <<35 ), +/* The device supports padding incoming writes to cacheline. */ + IB_DEVICE_SCATTER_END_PADDING = (1ULL << 36), }; enum ib_signature_prot_cap {
@@ -1098,6 +1100,7 @@ enum ib_qp_create_flags {IB_QP_CREATE_SCATTER_FCS =1 <<8 ,IB_QP_CREATE_CVLAN_STRIPPING =1 <<9 ,IB_QP_CREATE_SOURCE_QPN =1 <<10 , +IB_QP_CREATE_SCATTER_END_PADDING =1 <<11 ,/* reserve bits 26-31 for low level drivers' internal use */ IB_QP_CREATE_RESERVED_START =1 <<26 , IB_QP_CREATE_RESERVED_END = 1 << 31,
@@ -1621,6 +1624,7 @@ enum ib_wq_flags {IB_WQ_FLAGS_CVLAN_STRIPPING =1 <<0 ,IB_WQ_FLAGS_SCATTER_FCS =1 <<1 ,IB_WQ_FLAGS_DELAY_DROP =1 <<2 , + IB_WQ_FLAGS_SCATTER_END_PADDING = 1 << 3, }; struct ib_wq_init_attr {
Signature · 6 lines
2.14.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20171017151857.11934-2-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Re: [PATCH rdma-next 1/2] IB/core: Add scatter end padding flags for WQ and QP
Quoted 7 lines · Leon Romanovsky
From: Noa Osherovich <noaos-VPRAkNaXOzVWk0Htik3J/[email protected]>
There are root complexes that are able to optimize their performance when incoming data is multiple full cache lines.
Scatter end padding is the device's ability to pad the ending of incoming packets (scatter)
I hate this naming. I'm sure people inside of Mellanox have gotten used to it, but this feature really has no bearing on scatter/gather at all. This is merely final write padding. You might have a scatter/gather list, you might have a single buffer. Either way, the PCI root complex couldn't care less about scatter/gather or not, it's all a byte stream to it. I would be much happier with a name that reflected what this really does.
Quoted 39 lines
to full cache line such that the last
upstream write generated by an incoming packet will be a full cache line.Add a relevant entry to
ib_device_cap_flagsto report scatter end padding capability of an RDMA device.Add the QP and WQ create flags with an entry for scatter end padding:
* A QP/WQ created with a scatter end padding flag will cause HW to pad the last upstream write generated by a packet to cache
line.User should consider several factors before activating this feature:
- In case of high CPU memory load (which may cause PCI back pressure in
turn), if a large percent of the writes are partial cache line,
this
feature should be checked as an optional solution.
- This feature might reduce performance if most packets are between one
and two cache lines and PCIe throughput has reached its maximum capacity. E.g. 65B packet from the network port will lead to 128B write on PCIe, which may cause traffic on PCIe to reach high throughput.Signed-off-by Leon Romanovsky <[email protected]>--- drivers/infiniband/core/uverbs_cmd.c | 3 ++- include/rdma/ib_verbs.h | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-)drivers/infiniband/core/uverbs_cmd.c +0
-0
drivers/infiniband/core/uverbs_cmd.c static int create_qp(struct ib_uverbs_file · line 1496
Quoted 7 lines
drivers/infiniband/core/uverbs_cmd.c +2
-1@@ -1491,7 +1491,8 @@ static int create_qp(struct ib_uverbs_file *file,IB_QP_CREATE_MANAGED_RECV |IB_QP_CREATE_SCATTER_FCS |IB_QP_CREATE_CVLAN_STRIPPING | - IB_QP_CREATE_SOURCE_QPN)) { +IB_QP_CREATE_SOURCE_QPN | + IB_QP_CREATE_SCATTER_END_PADDING)) {
Maybe IB_QP_CREATE_PCI_WRITE_PAD?
Quoted 8 lines
drivers/infiniband/core/uverbs_cmd.c +0
-0ret = -EINVAL ; goto err_put;drivers/infiniband/core/uverbs_cmd.c +0
-0}include/rdma/ib_verbs.h +0
-0
include/rdma/ib_verbs.h enum ib_device_cap_flags { · line 234
Quoted 6 lines
include/rdma/ib_verbs.h +1
-0@@ -229,6 +229,8 @@ enum ib_device_cap_flags {/* Deprecated. Please use IB_RAW_PACKET_CAP_SCATTER_FCS. */ IB_DEVICE_RAW_SCATTER_FCS = (1ULL <<34 ),IB_DEVICE_RDMA_NETDEV_OPA_VNIC = (1ULL << 35), +/* The device supports padding incoming writes to cacheline. */
/* The device supports padding the final write of a PCI write transaction to a cacheline boundry so that the PCI root complex can optimize its memory accesses */
Quoted 20 lines
include/rdma/ib_verbs.h +1
-0+ IB_DEVICE_SCATTER_END_PADDING = (1ULL << 36), };enum
ib_signature_prot_cap{include/rdma/ib_verbs.h +2
-0@@ -1098,6 +1100,7 @@ enum ib_qp_create_flags {IB_QP_CREATE_SCATTER_FCS =1 <<8 ,IB_QP_CREATE_CVLAN_STRIPPING =1 <<9 ,IB_QP_CREATE_SOURCE_QPN =1 <<10 , +IB_QP_CREATE_SCATTER_END_PADDING =1 <<11 ,/* reserve bits 26-31 for low level drivers' internal use */ IB_QP_CREATE_RESERVED_START =1 <<26 , IB_QP_CREATE_RESERVED_END = 1 << 31,@@ -1621,6 +1624,7 @@ enum ib_wq_flags {IB_WQ_FLAGS_CVLAN_STRIPPING =1 <<0 ,IB_WQ_FLAGS_SCATTER_FCS =1 <<1 ,IB_WQ_FLAGS_DELAY_DROP =1 <<2 , + IB_WQ_FLAGS_SCATTER_END_PADDING = 1 << 3, }; struct ib_wq_init_attr {
Signature · 8 lines
Doug Ledford <[email protected]> GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [PATCH rdma-next 1/2] IB/core: Add scatter end padding flags for WQ and QP
Quoted 9 lines · Doug Ledford
Quoted 7 lines · Leon Romanovsky
From: Noa Osherovich <noaos-VPRAkNaXOzVWk0Htik3J/[email protected]>
There are root complexes that are able to optimize their performance when incoming data is multiple full cache lines.
Scatter end padding is the device's ability to pad the ending of incoming packets (scatter)
Quoted 7 lines
I hate this naming. I'm sure people inside of Mellanox have gotten used to it, but this feature really has no bearing on scatter/gather at all. This is merely final write padding. You might have a scatter/gather list, you might have a single buffer. Either way, the PCI root complex couldn't care less about scatter/gather or not, it's all a byte stream to it. I would be much happier with a name that reflected what this really does.
Scatter has more broad meaning than "scatter/gather list". The name here came from statistical meaning of "scatter", I'll try to come into something more descriptive.
Quoted 93 lines
Quoted 41 lines
to full cache line such that the last
upstream write generated by an incoming packet will be a full cache line.Add a relevant entry to
ib_device_cap_flagsto report scatter end padding capability of an RDMA device.Add the QP and WQ create flags with an entry for scatter end padding:
* A QP/WQ created with a scatter end padding flag will cause HW to pad the last upstream write generated by a packet to cache
line.User should consider several factors before activating this feature:
- In case of high CPU memory load (which may cause PCI back pressure in
turn), if a large percent of the writes are partial cache line,
this
feature should be checked as an optional solution.
- This feature might reduce performance if most packets are between one
and two cache lines and PCIe throughput has reached its maximum capacity. E.g. 65B packet from the network port will lead to 128B write on PCIe, which may cause traffic on PCIe to reach high throughput.Signed-off-by Leon Romanovsky <[email protected]>--- drivers/infiniband/core/uverbs_cmd.c | 3 ++- include/rdma/ib_verbs.h | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-)drivers/infiniband/core/uverbs_cmd.c +0
-0drivers/infiniband/core/uverbs_cmd.c static int create_qp(struct ib_uverbs_file · line 1496
Quoted 7 lines
drivers/infiniband/core/uverbs_cmd.c +2
-1@@ -1491,7 +1491,8 @@ static int create_qp(struct ib_uverbs_file *file,IB_QP_CREATE_MANAGED_RECV |IB_QP_CREATE_SCATTER_FCS |IB_QP_CREATE_CVLAN_STRIPPING | - IB_QP_CREATE_SOURCE_QPN)) { +IB_QP_CREATE_SOURCE_QPN | + IB_QP_CREATE_SCATTER_END_PADDING)) {Maybe
IB_QP_CREATE_PCI_WRITE_PAD?Quoted 8 lines
drivers/infiniband/core/uverbs_cmd.c +0
-0ret = -EINVAL ; goto err_put;drivers/infiniband/core/uverbs_cmd.c +0
-0}include/rdma/ib_verbs.h +0
-0include/rdma/ib_verbs.h enum ib_device_cap_flags { · line 234
Quoted 6 lines
include/rdma/ib_verbs.h +1
-0@@ -229,6 +229,8 @@ enum ib_device_cap_flags {/* Deprecated. Please use IB_RAW_PACKET_CAP_SCATTER_FCS. */ IB_DEVICE_RAW_SCATTER_FCS = (1ULL <<34 ),IB_DEVICE_RDMA_NETDEV_OPA_VNIC = (1ULL << 35), +/* The device supports padding incoming writes to cacheline. */ /* The device supports padding the final write of a PCI write transaction to a cacheline boundry so that the PCI root complex can optimize its memory accesses */
Quoted 13 lines
include/rdma/ib_verbs.h +1
-0+ IB_DEVICE_SCATTER_END_PADDING = (1ULL << 36), };enum
ib_signature_prot_cap{include/rdma/ib_verbs.h +1
-0@@ -1098,6 +1100,7 @@ enum ib_qp_create_flags {IB_QP_CREATE_SCATTER_FCS =1 <<8 ,IB_QP_CREATE_CVLAN_STRIPPING =1 <<9 ,IB_QP_CREATE_SOURCE_QPN =1 <<10 , +IB_QP_CREATE_SCATTER_END_PADDING =1 <<11 ,/* reserve bits 26-31 for low level drivers' internal use */ IB_QP_CREATE_RESERVED_START =1 <<26 , IB_QP_CREATE_RESERVED_END = 1 << 31,include/rdma/ib_verbs.h enum ib_wq_flags { · line 1630
Quoted 7 lines
include/rdma/ib_verbs.h +1
-0@@ -1621,6 +1624,7 @@ enum ib_wq_flags {IB_WQ_FLAGS_CVLAN_STRIPPING =1 <<0 ,IB_WQ_FLAGS_SCATTER_FCS =1 <<1 ,IB_WQ_FLAGS_DELAY_DROP =1 <<2 , + IB_WQ_FLAGS_SCATTER_END_PADDING = 1 << 3, }; struct ib_wq_init_attr {--
Doug Ledford <[email protected]>GPG KeyID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD
A message that is not in the archive (sent off-list or not yet received): 20171025190352.GW16127-U/[email protected]
Re: [PATCH rdma-next 1/2] IB/core: Add scatter end padding flags for WQ and QP
Quoted 18 lines · Leon Romanovsky
Quoted 9 lines · Doug Ledford
Quoted 7 lines · Leon Romanovsky
From: Noa Osherovich <noaos-VPRAkNaXOzVWk0Htik3J/[email protected]>
There are root complexes that are able to optimize their performance when incoming data is multiple full cache lines.
Scatter end padding is the device's ability to pad the ending of incoming packets (scatter)
Quoted 7 lines
I hate this naming. I'm sure people inside of Mellanox have gotten used to it, but this feature really has no bearing on scatter/gather at all. This is merely final write padding. You might have a scatter/gather list, you might have a single buffer. Either way, the PCI root complex couldn't care less about scatter/gather or not, it's all a byte stream to it. I would be much happier with a name that reflected what this really does.
Quoted 3 lines
Scatter has more broad meaning than "scatter/gather list". The name here came from statistical meaning of "scatter", I'll try to come into something more descriptive.
I don't like it either.. We usually call this 'alignment padding' in CS.
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20171025195311.GD998-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Re: [PATCH rdma-next 1/2] IB/core: Add scatter end padding flags for WQ and QP
Quoted 19 lines · Jason Gunthorpe
Quoted 18 lines · Leon Romanovsky
Quoted 16 lines · Doug Ledford
Quoted 7 lines · Leon Romanovsky
From: Noa Osherovich <noaos-VPRAkNaXOzVWk0Htik3J/[email protected]>
There are root complexes that are able to optimize their performance when incoming data is multiple full cache lines.
Scatter end padding is the device's ability to pad the ending of incoming packets (scatter)
I hate this naming. I'm sure people inside of Mellanox have gotten used to it, but this feature really has no bearing on scatter/gather at all. This is merely final write padding. You might have a scatter/gather list, you might have a single buffer. Either way, the PCI root complex couldn't care less about scatter/gather or not, it's all a byte stream to it. I would be much happier with a name that reflected what this really does.
Quoted 5 lines
Quoted 3 lines
Scatter has more broad meaning than "scatter/gather list". The name here came from statistical meaning of "scatter", I'll try to come into something more descriptive.
I don't like it either.. We usually call this 'alignment padding' in CS.
We can return to our initial internal name - "RX end padding". I'll consult with architecture tomorrow to hear their suggestion.
Thanks
Quoted 2 lines
Jason
PATCH 2/2 IB/mlx5: Add scatter end padding support
In reply to a message not in the archiveFrom: Noa Osherovich <noaos-VPRAkNaXOzVWk0Htik3J/[email protected]>
Add the scatter end padding flag to device_cap_flags enum and set it during mlx5_ib_query_device so it will be reported to user-space.
During WQ/QP creation, set the scatter end padding capability for WQ/QP if user requested it and HW supports it.
Scatter end padding modification is not supported for now. There's no such flag for a QP but for a WQ, create and modify use the same flag. Return an error if scatter end padding flag is set during modify_wq.
--- drivers/infiniband/hw/mlx5/main.c | 3 +++ drivers/infiniband/hw/mlx5/mlx5_ib.h | 2 ++ drivers/infiniband/hw/mlx5/qp.c | 36 +++++++++++++++++++++++++++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-)
drivers/infiniband/hw/mlx5/main.c +3 -0
@@ -715,6 +715,9 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,if (mlx5_get_flow_namespace (dev->mdev,MLX5_FLOW_NAMESPACE_BYPASS )) props->device_cap_flags |=IB_DEVICE_MANAGED_FLOW_STEERING ; +if (MLX5_CAP_GEN (mdev, end_pad)) + props->device_cap_flags |=IB_DEVICE_SCATTER_END_PADDING ; + props->vendor_part_id = mdev->pdev->device; props->hw_ver = mdev->pdev->revision;
drivers/infiniband/hw/mlx5/mlx5_ib.h +2 -0
@@ -228,6 +228,7 @@ struct wr_list {enum mlx5_ib_rq_flags {MLX5_IB_RQ_CVLAN_STRIPPING =1 <<0 , +MLX5_IB_RQ_SCATTER_END_PADDING =1 <<1 , };struct mlx5_ib_wq {
@@ -420,6 +421,7 @@ enum mlx5_ib_qp_flags {MLX5_IB_QP_RSS =1 <<8 ,MLX5_IB_QP_CVLAN_STRIPPING =1 <<9 ,MLX5_IB_QP_UNDERLAY =1 <<10 , + MLX5_IB_QP_SCATTER_END_PADDING = 1 << 11, }; struct mlx5_umr_wr {
drivers/infiniband/hw/mlx5/qp.c +33 -3
@@ -1178,8 +1178,8 @@ static int create_raw_packet_qp_rq(struct mlx5_ib_dev *dev, wq =MLX5_ADDR_OF (rqc, rqc, wq);MLX5_SET (wq, wq, wq_type,MLX5_WQ_TYPE_CYCLIC ); -MLX5_SET (wq, wq, end_padding_mode, -MLX5_GET (qpc, qpc, end_padding_mode)); +if (rq->flags &MLX5_IB_RQ_SCATTER_END_PADDING ) +MLX5_SET (wq, wq, end_padding_mode,MLX5_WQ_END_PAD_MODE_ALIGN );MLX5_SET (wq, wq, page_offset,MLX5_GET (qpc, qpc, page_offset));MLX5_SET (wq, wq, pd,MLX5_GET (qpc, qpc, pd));MLX5_SET64 (wq, wq, dbr_addr,MLX5_GET64 (qpc, qpc, dbr_addr));
@@ -1266,6 +1266,8 @@ static int create_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,if (qp->flags &MLX5_IB_QP_CVLAN_STRIPPING ) rq->flags |=MLX5_IB_RQ_CVLAN_STRIPPING ; +if (qp->flags &MLX5_IB_QP_SCATTER_END_PADDING ) + rq->flags |=MLX5_IB_RQ_SCATTER_END_PADDING ; err =create_raw_packet_qp_rq (dev, rq, in);if (err) goto err_destroy_sq;
@@ -1781,6 +1783,19 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, qp->flags |=MLX5_IB_QP_LSO ; } +if (init_attr->create_flags &IB_QP_CREATE_SCATTER_END_PADDING ) { +if (!MLX5_CAP_GEN (dev->mdev, end_pad)) { +mlx5_ib_dbg (dev,"scatter end padding is not supported\n" ); + err = -EOPNOTSUPP ; + goto err; + }else if (init_attr->qp_type !=IB_QPT_RAW_PACKET ) { +MLX5_SET (qpc, qpc, end_padding_mode, +MLX5_WQ_END_PAD_MODE_ALIGN ); + }else { + qp->flags |=MLX5_IB_QP_SCATTER_END_PADDING ; + } + } +if (init_attr->qp_type ==IB_QPT_RAW_PACKET || qp->flags &MLX5_IB_QP_UNDERLAY ) { qp->raw_packet_qp.sq.ubuffer.buf_addr = ucmd.sq_buf_addr;
@@ -1825,6 +1840,7 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,else if (qp->create_type ==MLX5_QP_KERNEL )destroy_qp_kernel (dev, qp); +err:kvfree (in);return err; }
@@ -4709,7 +4725,15 @@ static int create_rq(struct mlx5_ib_rwq *rwq, struct ib_pd *pd,MLX5_SET (wq, wq, wq_type, rwq->create_flags &MLX5_IB_WQ_FLAGS_STRIDING_RQ ?MLX5_WQ_TYPE_CYCLIC_STRIDING_RQ :MLX5_WQ_TYPE_CYCLIC ); -MLX5_SET (wq, wq, end_padding_mode,MLX5_WQ_END_PAD_MODE_ALIGN ); +if (init_attr->create_flags &IB_WQ_FLAGS_SCATTER_END_PADDING ) { +if (!MLX5_CAP_GEN (dev->mdev, end_pad)) { +mlx5_ib_dbg (dev,"Scatter end padding is not supported\n" ); + err = -EOPNOTSUPP ; + goto out; + }else { +MLX5_SET (wq, wq, end_padding_mode,MLX5_WQ_END_PAD_MODE_ALIGN ); + } + }MLX5_SET (wq, wq, log_wq_stride, rwq->log_rq_stride);if (rwq->create_flags &MLX5_IB_WQ_FLAGS_STRIDING_RQ ) {MLX5_SET (wq, wq, two_byte_shift_en, rwq->two_byte_shift_en);
@@ -5089,6 +5113,12 @@ int mlx5_ib_modify_wq(struct ib_wq *wq, struct ib_wq_attr *wq_attr,MLX5_SET (rqc, rqc, vsd, (wq_attr->flags &IB_WQ_FLAGS_CVLAN_STRIPPING ) ?0 :1 ); } + +if (wq_attr->flags_mask &IB_WQ_FLAGS_SCATTER_END_PADDING ) { +mlx5_ib_dbg (dev,"Modifying scatter end padding is not supported\n" ); + err = -EOPNOTSUPP ; + goto out; + } }if (curr_wq_state ==IB_WQS_RESET && wq_state ==IB_WQS_RDY ) {
Signature · 6 lines
2.14.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20171017151857.11934-3-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
RE: [PATCH rdma-next 2/2] IB/mlx5: Add scatter end padding support
Hi Leon, Noa,
Quoted 7 lines
drivers/infiniband/hw/mlx5/qp.c +3
-0@@ -1781,6 +1783,19 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, qp->flags |=MLX5_IB_QP_LSO ; } +if (init_attr->create_flags &IB_QP_CREATE_SCATTER_END_PADDING ) { +if (!MLX5_CAP_GEN (dev->mdev, end_pad)) { +mlx5_ib_dbg (dev,"scatter end padding is not supported\n" );
drivers/infiniband/hw/mlx5/qp.c static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, · line 1798
Quoted 10 lines
drivers/infiniband/hw/mlx5/qp.c +10
-0+ err = -EOPNOTSUPP ; + goto err; + }else if (init_attr->qp_type !=IB_QPT_RAW_PACKET ) { +MLX5_SET (qpc, qpc, end_padding_mode, +MLX5_WQ_END_PAD_MODE_ALIGN ); + }else { + qp->flags |=MLX5_IB_QP_SCATTER_END_PADDING ; + } + } +
What's the feature associated with MLX5_WQ_END_PAD_MODE_ALIGN? It seems it was there before this patch series and bears a similar name.
Thanks,
Ram
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): BN3PR07MB25787107C19B694BB0BA39B4F84D0-EldUQEzkDQfpW3VS/[email protected]
Re: [PATCH rdma-next 2/2] IB/mlx5: Add scatter end padding support
Hi Ram,
Quoted 6 lines · Ram
Hi Leon, Noa,
Quoted 4 lines
drivers/infiniband/hw/mlx5/qp.c +0
-0@@ -1781,6 +1783,19 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, qp->flags |=MLX5_IB_QP_LSO ; }
Quoted 15 lines
drivers/infiniband/hw/mlx5/qp.c static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, · line 1798
Quoted 13 lines
drivers/infiniband/hw/mlx5/qp.c +13
-0+if (init_attr->create_flags &IB_QP_CREATE_SCATTER_END_PADDING ) { +if (!MLX5_CAP_GEN (dev->mdev, end_pad)) { +mlx5_ib_dbg (dev,"scatter end padding is not supported\n" ); + err = -EOPNOTSUPP ; + goto err; + }else if (init_attr->qp_type !=IB_QPT_RAW_PACKET ) { +MLX5_SET (qpc, qpc, end_padding_mode, +MLX5_WQ_END_PAD_MODE_ALIGN ); + }else { + qp->flags |=MLX5_IB_QP_SCATTER_END_PADDING ; + } + } +What's the feature associated with
MLX5_WQ_END_PAD_MODE_ALIGN? It seems it was there before this patch series and bears a similar name.
Right, this series exposes this already existing feature to the user.
Quoted 2 lines
Thanks,
Ram
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 7d53f1e2-239b-0415-5b28-875f1710c11a-VPRAkNaXOzVWk0Htik3J/[email protected]
RE: [PATCH rdma-next 2/2] IB/mlx5: Add scatter end padding support
PiA+IFdoYXQncyB0aGUgZmVhdHVyZSBhc3NvY2lhdGVkIHdpdGggTUxYNV9XUV9FTkRfUEFEX01P REVfQUxJR04/DQo+ID4gSXQgc2VlbXMgaXQgd2FzIHRoZXJlIGJlZm9yZSB0aGlzIHBhdGNoIHNl cmllcyBhbmQgYmVhcnMgYSBzaW1pbGFyIG5hbWUuDQo+IA0KPiBSaWdodCwgdGhpcyBzZXJpZXMg ZXhwb3NlcyB0aGlzIGFscmVhZHkgZXhpc3RpbmcgZmVhdHVyZSB0byB0aGUgdXNlci4NCg0KSSdt IHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhleSBhcmUgc29tZXdoYXQgZGlmZmVyZW50IChw ZXIgUVAgdHlwZT8/KSBmcm9tIHRoaXMgY29kZToNCg0KKwlpZiAoaW5pdF9hdHRyLT5jcmVhdGVf ZmxhZ3MgJiBJQl9RUF9DUkVBVEVfU0NBVFRFUl9FTkRfUEFERElORykgew0KKwkJaWYgKCFNTFg1 X0NBUF9HRU4oZGV2LT5tZGV2LCBlbmRfcGFkKSkgew0KKwkJCW1seDVfaWJfZGJnKGRldiwgInNj YXR0ZXIgZW5kIHBhZGRpbmcgaXMgbm90IHN1cHBvcnRlZFxuIik7DQorCQkJZXJyID0gLUVPUE5P VFNVUFA7DQorCQkJZ290byBlcnI7DQorCQl9IGVsc2UgaWYgKGluaXRfYXR0ci0+cXBfdHlwZSAh PSBJQl9RUFRfUkFXX1BBQ0tFVCkgew0KKwkJCU1MWDVfU0VUKHFwYywgcXBjLCBlbmRfcGFkZGlu Z19tb2RlLA0KKwkJCQkgTUxYNV9XUV9FTkRfUEFEX01PREVfQUxJR04pOw0KKwkJfSBlbHNlIHsN CisJCQlxcC0+ZmxhZ3MgfD0gTUxYNV9JQl9RUF9TQ0FUVEVSX0VORF9QQURESU5HOw0KKwkJfQ0K Kwl9DQorDQoNCkJ1dCBpZiBpbmRlZWQgdGhleSBhcmUgdGhlIHNhbWUgdGhlbiBwbGVhc2UgY29u c2lkZXIgdXNpbmcgdGhlIHNhbWUgbmFtZXMgdG8gaW5jcmVhc2UgcmVhZGFiaWxpdHkuDQoNClRo YW5rcywNClJhbQ0KDQo=
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): BN3PR07MB2578139CB1C38C5228B395F6F8420-EldUQEzkDQfpW3VS/[email protected]
Re: [PATCH rdma-next 2/2] IB/mlx5: Add scatter end padding support
Hi Ram,
Quoted 19 lines · Ram
Quoted 3 lines
Quoted 2 lines
What's the feature associated with
MLX5_WQ_END_PAD_MODE_ALIGN? It seems it was there before this patch series and bears a similar name.Right, this series exposes this already existing feature to the user.
I'm under the impression that they are somewhat different (per QP type??) from this code:
(quoted diff) +13
-0+ if (init_attr->create_flags & IB_QP_CREATE_SCATTER_END_PADDING) { + if (!MLX5_CAP_GEN(dev->mdev, end_pad)) { + mlx5_ib_dbg(dev, "scatter end padding is not supported\n"); + err = -EOPNOTSUPP; + goto err; + } else if (init_attr->qp_type != IB_QPT_RAW_PACKET) { + MLX5_SET(qpc, qpc, end_padding_mode, + MLX5_WQ_END_PAD_MODE_ALIGN); + } else { + qp->flags |= MLX5_IB_QP_SCATTER_END_PADDING; + } + } +
Quoted 1 line
But if indeed they are the same then please consider using the same names to increase readability.
Raw Packet QP is implemented by a WQ, so its flow is different from that of other QP types.
Eventually, its receive WQ context's field will be set to MLX5_WQ_END_PAD_MODE_ALIGN as well.
Quoted 2 lines
Thanks,
Ram
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 70f59192-fcd8-95b9-72f0-edda9ac6c287-VPRAkNaXOzVWk0Htik3J/[email protected]
RE: [PATCH rdma-next 2/2] IB/mlx5: Add scatter end padding support
PiBSYXcgUGFja2V0IFFQIGlzIGltcGxlbWVudGVkIGJ5IGEgV1EsIHNvIGl0cyBmbG93IGlzIGRp ZmZlcmVudCBmcm9tIHRoYXQgb2YNCj4gb3RoZXIgUVAgdHlwZXMuDQo+IEV2ZW50dWFsbHksIGl0 cyByZWNlaXZlIFdRIGNvbnRleHQncyBmaWVsZCB3aWxsIGJlIHNldCB0byBNTFg1X1dRX0VORF9Q QURfTU9ERV9BTElHTg0KPiBhcyB3ZWxsLg0KDQpUaGFua3MsDQpSYW0NCg0K
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 6 lines · Leon Romanovsky
There are PCIe root complex that are able to optimize their performance when incoming data is multiple full cache lines.
Expose the device capability to pad the ending of incoming packets (scatter) to full cache line such that the last upstream write generated by the incoming packet will be a full cache line.
Any why would this be a user controller option? Isn't this something that the kernel should set up automatically instead of needing arcane tribal knowledge in the ULPs and applications?
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi,
Quoted 10 lines · Christoph Hellwig
Quoted 6 lines · Leon Romanovsky
There are PCIe root complex that are able to optimize their performance when incoming data is multiple full cache lines.
Expose the device capability to pad the ending of incoming packets (scatter) to full cache line such that the last upstream write generated by the incoming packet will be a full cache line.
Any why would this be a user controller option? Isn't this something that the kernel should set up automatically instead of needing arcane tribal knowledge in the ULPs and applications?
User should consider several factors before activating this feature:
- In case of high CPU memory load (which may cause PCI backpressure in turn), if a large percent of the writes are partial cache line, this feature should be checked as an optional solution.
- This feature might reduce performance if most packets are between one and two cache lines and PCIe throughput has reached its maximum capacity. E.g. 65B packet from the network port will lead to 128B write on PCIe, which may cause trafiic on PCIe to reach high throughput.
Userspace series will follow.
Thanks,
Noa
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html