Commit 7956371e authored by Michael J. Ruhl's avatar Michael J. Ruhl Committed by Doug Ledford

IB/hfi1: Improve local kmem_cache_alloc performance

Performance analysis shows that the cache callback function
sdma_kmem_cache_ctor contributes to 1/2 of the kmem_cache_allocs
time.

Since all of the fields in the allocated data structure are initialized
in the code path, remove the _ctor function.
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent de42de80
...@@ -331,13 +331,6 @@ static void activate_packet_queue(struct iowait *wait, int reason) ...@@ -331,13 +331,6 @@ static void activate_packet_queue(struct iowait *wait, int reason)
wake_up(&wait->wait_dma); wake_up(&wait->wait_dma);
}; };
static void sdma_kmem_cache_ctor(void *obj)
{
struct user_sdma_txreq *tx = obj;
memset(tx, 0, sizeof(*tx));
}
int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt, int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,
struct hfi1_filedata *fd) struct hfi1_filedata *fd)
{ {
...@@ -391,7 +384,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt, ...@@ -391,7 +384,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,
sizeof(struct user_sdma_txreq), sizeof(struct user_sdma_txreq),
L1_CACHE_BYTES, L1_CACHE_BYTES,
SLAB_HWCACHE_ALIGN, SLAB_HWCACHE_ALIGN,
sdma_kmem_cache_ctor); NULL);
if (!pq->txreq_cache) { if (!pq->txreq_cache) {
dd_dev_err(dd, "[%u] Failed to allocate TxReq cache\n", dd_dev_err(dd, "[%u] Failed to allocate TxReq cache\n",
uctxt->ctxt); uctxt->ctxt);
......
/* /*
* Copyright(c) 2016 Intel Corporation. * Copyright(c) 2016 - 2017 Intel Corporation.
* *
* This file is provided under a dual BSD/GPLv2 license. When using or * This file is provided under a dual BSD/GPLv2 license. When using or
* redistributing this file, you may do so under either license. * redistributing this file, you may do so under either license.
...@@ -119,13 +119,6 @@ struct verbs_txreq *__get_txreq(struct hfi1_ibdev *dev, ...@@ -119,13 +119,6 @@ struct verbs_txreq *__get_txreq(struct hfi1_ibdev *dev,
return tx; return tx;
} }
static void verbs_txreq_kmem_cache_ctor(void *obj)
{
struct verbs_txreq *tx = (struct verbs_txreq *)obj;
memset(tx, 0, sizeof(*tx));
}
int verbs_txreq_init(struct hfi1_ibdev *dev) int verbs_txreq_init(struct hfi1_ibdev *dev)
{ {
char buf[TXREQ_LEN]; char buf[TXREQ_LEN];
...@@ -135,7 +128,7 @@ int verbs_txreq_init(struct hfi1_ibdev *dev) ...@@ -135,7 +128,7 @@ int verbs_txreq_init(struct hfi1_ibdev *dev)
dev->verbs_txreq_cache = kmem_cache_create(buf, dev->verbs_txreq_cache = kmem_cache_create(buf,
sizeof(struct verbs_txreq), sizeof(struct verbs_txreq),
0, SLAB_HWCACHE_ALIGN, 0, SLAB_HWCACHE_ALIGN,
verbs_txreq_kmem_cache_ctor); NULL);
if (!dev->verbs_txreq_cache) if (!dev->verbs_txreq_cache)
return -ENOMEM; return -ENOMEM;
return 0; return 0;
......
...@@ -303,22 +303,15 @@ void hfi1_vnic_sdma_init(struct hfi1_vnic_vport_info *vinfo) ...@@ -303,22 +303,15 @@ void hfi1_vnic_sdma_init(struct hfi1_vnic_vport_info *vinfo)
} }
} }
static void hfi1_vnic_txreq_kmem_cache_ctor(void *obj)
{
struct vnic_txreq *tx = (struct vnic_txreq *)obj;
memset(tx, 0, sizeof(*tx));
}
int hfi1_vnic_txreq_init(struct hfi1_devdata *dd) int hfi1_vnic_txreq_init(struct hfi1_devdata *dd)
{ {
char buf[HFI1_VNIC_TXREQ_NAME_LEN]; char buf[HFI1_VNIC_TXREQ_NAME_LEN];
snprintf(buf, sizeof(buf), "hfi1_%u_vnic_txreq_cache", dd->unit); snprintf(buf, sizeof(buf), "hfi1_%u_vnic_txreq_cache", dd->unit);
dd->vnic.txreq_cache = kmem_cache_create(buf, dd->vnic.txreq_cache = kmem_cache_create(buf,
sizeof(struct vnic_txreq), sizeof(struct vnic_txreq),
0, SLAB_HWCACHE_ALIGN, 0, SLAB_HWCACHE_ALIGN,
hfi1_vnic_txreq_kmem_cache_ctor); NULL);
if (!dd->vnic.txreq_cache) if (!dd->vnic.txreq_cache)
return -ENOMEM; return -ENOMEM;
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment