Skip to content

Commit

Permalink
app/crypto-perf: honour min headroom/tailroom
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Anoob Joseph authored and pablodelara committed Jul 11, 2018
1 parent db10602 commit c1670ae
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 11 deletions.
2 changes: 2 additions & 0 deletions app/test-crypto-perf/cperf_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
33 changes: 22 additions & 11 deletions app/test-crypto-perf/cperf_test_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -99,18 +102,21 @@ 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 */
if (params->dst_buf_offset) {
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;
Expand Down Expand Up @@ -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
Expand Down
17 changes: 17 additions & 0 deletions app/test-crypto-perf/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit c1670ae

Please sign in to comment.