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: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
de42de80d7
commit
7956371ea4
|
@ -331,13 +331,6 @@ static void activate_packet_queue(struct iowait *wait, int reason)
|
|||
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,
|
||||
struct hfi1_filedata *fd)
|
||||
{
|
||||
|
@ -391,7 +384,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt,
|
|||
sizeof(struct user_sdma_txreq),
|
||||
L1_CACHE_BYTES,
|
||||
SLAB_HWCACHE_ALIGN,
|
||||
sdma_kmem_cache_ctor);
|
||||
NULL);
|
||||
if (!pq->txreq_cache) {
|
||||
dd_dev_err(dd, "[%u] Failed to allocate TxReq cache\n",
|
||||
uctxt->ctxt);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2016 Intel Corporation.
|
||||
* Copyright(c) 2016 - 2017 Intel Corporation.
|
||||
*
|
||||
* This file is provided under a dual BSD/GPLv2 license. When using or
|
||||
* redistributing this file, you may do so under either license.
|
||||
|
@ -119,13 +119,6 @@ out:
|
|||
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)
|
||||
{
|
||||
char buf[TXREQ_LEN];
|
||||
|
@ -135,7 +128,7 @@ int verbs_txreq_init(struct hfi1_ibdev *dev)
|
|||
dev->verbs_txreq_cache = kmem_cache_create(buf,
|
||||
sizeof(struct verbs_txreq),
|
||||
0, SLAB_HWCACHE_ALIGN,
|
||||
verbs_txreq_kmem_cache_ctor);
|
||||
NULL);
|
||||
if (!dev->verbs_txreq_cache)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
char buf[HFI1_VNIC_TXREQ_NAME_LEN];
|
||||
|
||||
snprintf(buf, sizeof(buf), "hfi1_%u_vnic_txreq_cache", dd->unit);
|
||||
dd->vnic.txreq_cache = kmem_cache_create(buf,
|
||||
sizeof(struct vnic_txreq),
|
||||
0, SLAB_HWCACHE_ALIGN,
|
||||
hfi1_vnic_txreq_kmem_cache_ctor);
|
||||
sizeof(struct vnic_txreq),
|
||||
0, SLAB_HWCACHE_ALIGN,
|
||||
NULL);
|
||||
if (!dd->vnic.txreq_cache)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue