app/crypto-perf: honour min headroom/tailroom
Crypto dev would specify its headroom and tailroom requirement and the application is expected to honour this while creating buffers. Signed-off-by: Anoob Joseph <anoob.joseph@caviumnetworks.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
parent
db10602b76
commit
c1670ae002
@ -76,6 +76,8 @@ struct cperf_options {
|
||||
|
||||
uint32_t pool_sz;
|
||||
uint32_t total_ops;
|
||||
uint32_t headroom_sz;
|
||||
uint32_t tailroom_sz;
|
||||
uint32_t segment_sz;
|
||||
uint32_t test_buffer_size;
|
||||
uint32_t *imix_buffer_sizes;
|
||||
|
@ -11,12 +11,15 @@ struct obj_params {
|
||||
uint32_t src_buf_offset;
|
||||
uint32_t dst_buf_offset;
|
||||
uint16_t segment_sz;
|
||||
uint16_t headroom_sz;
|
||||
uint16_t data_len;
|
||||
uint16_t segments_nb;
|
||||
};
|
||||
|
||||
static void
|
||||
fill_single_seg_mbuf(struct rte_mbuf *m, struct rte_mempool *mp,
|
||||
void *obj, uint32_t mbuf_offset, uint16_t segment_sz)
|
||||
void *obj, uint32_t mbuf_offset, uint16_t segment_sz,
|
||||
uint16_t headroom, uint16_t data_len)
|
||||
{
|
||||
uint32_t mbuf_hdr_size = sizeof(struct rte_mbuf);
|
||||
|
||||
@ -26,10 +29,10 @@ fill_single_seg_mbuf(struct rte_mbuf *m, struct rte_mempool *mp,
|
||||
m->buf_iova = rte_mempool_virt2iova(obj) +
|
||||
mbuf_offset + mbuf_hdr_size;
|
||||
m->buf_len = segment_sz;
|
||||
m->data_len = segment_sz;
|
||||
m->data_len = data_len;
|
||||
|
||||
/* No headroom needed for the buffer */
|
||||
m->data_off = 0;
|
||||
/* Use headroom specified for the buffer */
|
||||
m->data_off = headroom;
|
||||
|
||||
/* init some constant fields */
|
||||
m->pool = mp;
|
||||
@ -42,7 +45,7 @@ fill_single_seg_mbuf(struct rte_mbuf *m, struct rte_mempool *mp,
|
||||
static void
|
||||
fill_multi_seg_mbuf(struct rte_mbuf *m, struct rte_mempool *mp,
|
||||
void *obj, uint32_t mbuf_offset, uint16_t segment_sz,
|
||||
uint16_t segments_nb)
|
||||
uint16_t headroom, uint16_t data_len, uint16_t segments_nb)
|
||||
{
|
||||
uint16_t mbuf_hdr_size = sizeof(struct rte_mbuf);
|
||||
uint16_t remaining_segments = segments_nb;
|
||||
@ -57,10 +60,10 @@ fill_multi_seg_mbuf(struct rte_mbuf *m, struct rte_mempool *mp,
|
||||
m->buf_iova = next_seg_phys_addr;
|
||||
next_seg_phys_addr += mbuf_hdr_size + segment_sz;
|
||||
m->buf_len = segment_sz;
|
||||
m->data_len = segment_sz;
|
||||
m->data_len = data_len;
|
||||
|
||||
/* No headroom needed for the buffer */
|
||||
m->data_off = 0;
|
||||
/* Use headroom specified for the buffer */
|
||||
m->data_off = headroom;
|
||||
|
||||
/* init some constant fields */
|
||||
m->pool = mp;
|
||||
@ -99,10 +102,12 @@ mempool_obj_init(struct rte_mempool *mp,
|
||||
op->sym->m_src = m;
|
||||
if (params->segments_nb == 1)
|
||||
fill_single_seg_mbuf(m, mp, obj, params->src_buf_offset,
|
||||
params->segment_sz);
|
||||
params->segment_sz, params->headroom_sz,
|
||||
params->data_len);
|
||||
else
|
||||
fill_multi_seg_mbuf(m, mp, obj, params->src_buf_offset,
|
||||
params->segment_sz, params->segments_nb);
|
||||
params->segment_sz, params->headroom_sz,
|
||||
params->data_len, params->segments_nb);
|
||||
|
||||
|
||||
/* Set destination buffer */
|
||||
@ -110,7 +115,8 @@ mempool_obj_init(struct rte_mempool *mp,
|
||||
m = (struct rte_mbuf *) ((uint8_t *) obj +
|
||||
params->dst_buf_offset);
|
||||
fill_single_seg_mbuf(m, mp, obj, params->dst_buf_offset,
|
||||
params->segment_sz);
|
||||
params->segment_sz, params->headroom_sz,
|
||||
params->data_len);
|
||||
op->sym->m_dst = m;
|
||||
} else
|
||||
op->sym->m_dst = NULL;
|
||||
@ -172,6 +178,11 @@ cperf_alloc_common_memory(const struct cperf_options *options,
|
||||
|
||||
struct obj_params params = {
|
||||
.segment_sz = options->segment_sz,
|
||||
.headroom_sz = options->headroom_sz,
|
||||
/* Data len = segment size - (headroom + tailroom) */
|
||||
.data_len = options->segment_sz -
|
||||
options->headroom_sz -
|
||||
options->tailroom_sz,
|
||||
.segments_nb = segments_nb,
|
||||
.src_buf_offset = crypto_op_total_size_padded,
|
||||
.dst_buf_offset = 0
|
||||
|
@ -149,6 +149,23 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
|
||||
.nb_descriptors = opts->nb_descriptors
|
||||
};
|
||||
|
||||
/**
|
||||
* Device info specifies the min headroom and tailroom
|
||||
* requirement for the crypto PMD. This need to be honoured
|
||||
* by the application, while creating mbuf.
|
||||
*/
|
||||
if (opts->headroom_sz < cdev_info.min_mbuf_headroom_req) {
|
||||
/* Update headroom */
|
||||
opts->headroom_sz = cdev_info.min_mbuf_headroom_req;
|
||||
}
|
||||
if (opts->tailroom_sz < cdev_info.min_mbuf_tailroom_req) {
|
||||
/* Update tailroom */
|
||||
opts->tailroom_sz = cdev_info.min_mbuf_tailroom_req;
|
||||
}
|
||||
|
||||
/* Update segment size to include headroom & tailroom */
|
||||
opts->segment_sz += (opts->headroom_sz + opts->tailroom_sz);
|
||||
|
||||
uint32_t dev_max_nb_sess = cdev_info.sym.max_nb_sessions;
|
||||
/*
|
||||
* Two sessions objects are required for each session
|
||||
|
Loading…
x
Reference in New Issue
Block a user