IB/rxe: Offload CRC calculation when possible
Use CPU ability to perform CRC calculations, by
replacing direct calls to crc32_le() with crypto_shash_updata().
The overall performance gain measured with ib_send_bw tool is 10% and it
was tested on "Intel CPU ES-2660 v2 @ 2.20Ghz" CPU.
ib_send_bw -d rxe0 -x 1 -n 9000 -e -s $((1024 * 1024 )) -l 100
---------------------------------------------------------------------------------------------
| | bytes | iterations | BW peak[MB/sec] | BW average[MB/sec] | MsgRate[Mpps] |
---------------------------------------------------------------------------------------------
| crc32_le | 1048576 | 9000 | inf | 497.60 | 0.000498 |
| CRC offload | 1048576 | 9000 | inf | 546.70 | 0.000547 |
---------------------------------------------------------------------------------------------
Fixes: 8700e3e7c4
("Soft RoCE driver")
Signed-off-by: Yonatan Cohen <yonatanc@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
@@ -50,6 +50,7 @@
|
||||
#include <rdma/ib_umem.h>
|
||||
#include <rdma/ib_cache.h>
|
||||
#include <rdma/ib_addr.h>
|
||||
#include <crypto/hash.h>
|
||||
|
||||
#include "rxe_net.h"
|
||||
#include "rxe_opcode.h"
|
||||
@@ -64,6 +65,25 @@
|
||||
|
||||
#define RXE_ROCE_V2_SPORT (0xc000)
|
||||
|
||||
static inline u32 rxe_crc32(struct rxe_dev *rxe,
|
||||
u32 crc, void *next, size_t len)
|
||||
{
|
||||
int err;
|
||||
|
||||
SHASH_DESC_ON_STACK(shash, rxe->tfm);
|
||||
|
||||
shash->tfm = rxe->tfm;
|
||||
shash->flags = 0;
|
||||
*(u32 *)shash_desc_ctx(shash) = crc;
|
||||
err = crypto_shash_update(shash, next, len);
|
||||
if (unlikely(err)) {
|
||||
pr_warn_ratelimited("failed crc calculation, err: %d\n", err);
|
||||
return crc32_le(crc, next, len);
|
||||
}
|
||||
|
||||
return *(u32 *)shash_desc_ctx(shash);
|
||||
}
|
||||
|
||||
int rxe_set_mtu(struct rxe_dev *rxe, unsigned int dev_mtu);
|
||||
|
||||
int rxe_add(struct rxe_dev *rxe, unsigned int mtu);
|
||||
|
Reference in New Issue
Block a user