app/compress-perf: support force process termination

This patch adds a possibility to force controlled process termination
as a result of two signals: SIGTERM and SIGINT

Signed-off-by: Tomasz Jozwiak <tomaszx.jozwiak@intel.com>
Acked-by: Artur Trybula <arturx.trybula@intel.com>
Acked-by: Shally Verma <shallyv@marvell.com>
This commit is contained in:
Tomasz Jozwiak 2019-07-08 20:16:18 +02:00 committed by Akhil Goyal
parent 1b3268a326
commit d6cec11311
4 changed files with 52 additions and 2 deletions

View File

@ -67,6 +67,7 @@ struct comp_test_data {
double ratio; double ratio;
enum cleanup_st cleanup; enum cleanup_st cleanup;
int perf_comp_force_stop;
}; };
int int

View File

@ -184,6 +184,9 @@ main_loop(struct cperf_benchmark_ctx *ctx, enum rte_comp_xform_type type)
ops[op_id]->private_xform = priv_xform; ops[op_id]->private_xform = priv_xform;
} }
if (unlikely(test_data->perf_comp_force_stop))
goto end;
num_enq = rte_compressdev_enqueue_burst(dev_id, num_enq = rte_compressdev_enqueue_burst(dev_id,
mem->qp_id, ops, mem->qp_id, ops,
num_ops); num_ops);
@ -242,6 +245,9 @@ main_loop(struct cperf_benchmark_ctx *ctx, enum rte_comp_xform_type type)
/* Dequeue the last operations */ /* Dequeue the last operations */
while (total_deq_ops < total_ops) { while (total_deq_ops < total_ops) {
if (unlikely(test_data->perf_comp_force_stop))
goto end;
num_deq = rte_compressdev_dequeue_burst(dev_id, num_deq = rte_compressdev_dequeue_burst(dev_id,
mem->qp_id, mem->qp_id,
deq_ops, deq_ops,
@ -306,6 +312,13 @@ main_loop(struct cperf_benchmark_ctx *ctx, enum rte_comp_xform_type type)
rte_mempool_put_bulk(mem->op_pool, (void **)ops, allocated); rte_mempool_put_bulk(mem->op_pool, (void **)ops, allocated);
rte_compressdev_private_xform_free(dev_id, priv_xform); rte_compressdev_private_xform_free(dev_id, priv_xform);
rte_free(ops); rte_free(ops);
if (test_data->perf_comp_force_stop) {
RTE_LOG(ERR, USER1,
"lcore: %d Perf. test has been aborted by user\n",
mem->lcore_id);
res = -1;
}
return res; return res;
} }

View File

@ -188,6 +188,9 @@ main_loop(struct cperf_verify_ctx *ctx, enum rte_comp_xform_type type)
ops[op_id]->private_xform = priv_xform; ops[op_id]->private_xform = priv_xform;
} }
if (unlikely(test_data->perf_comp_force_stop))
goto end;
num_enq = rte_compressdev_enqueue_burst(dev_id, num_enq = rte_compressdev_enqueue_burst(dev_id,
mem->qp_id, ops, mem->qp_id, ops,
num_ops); num_ops);
@ -268,6 +271,9 @@ main_loop(struct cperf_verify_ctx *ctx, enum rte_comp_xform_type type)
/* Dequeue the last operations */ /* Dequeue the last operations */
while (total_deq_ops < total_ops) { while (total_deq_ops < total_ops) {
if (unlikely(test_data->perf_comp_force_stop))
goto end;
num_deq = rte_compressdev_dequeue_burst(dev_id, num_deq = rte_compressdev_dequeue_burst(dev_id,
mem->qp_id, mem->qp_id,
deq_ops, deq_ops,
@ -346,6 +352,14 @@ main_loop(struct cperf_verify_ctx *ctx, enum rte_comp_xform_type type)
rte_mempool_put_bulk(mem->op_pool, (void **)ops, allocated); rte_mempool_put_bulk(mem->op_pool, (void **)ops, allocated);
rte_compressdev_private_xform_free(dev_id, priv_xform); rte_compressdev_private_xform_free(dev_id, priv_xform);
rte_free(ops); rte_free(ops);
if (test_data->perf_comp_force_stop) {
RTE_LOG(ERR, USER1,
"lcore: %d Perf. test has been aborted by user\n",
mem->lcore_id);
res = -1;
}
return res; return res;
} }

View File

@ -2,6 +2,10 @@
* Copyright(c) 2018 Intel Corporation * Copyright(c) 2018 Intel Corporation
*/ */
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <rte_malloc.h> #include <rte_malloc.h>
#include <rte_eal.h> #include <rte_eal.h>
#include <rte_log.h> #include <rte_log.h>
@ -36,6 +40,8 @@ static const struct cperf_test cperf_testmap[] = {
} }
}; };
static struct comp_test_data *test_data;
static int static int
comp_perf_check_capabilities(struct comp_test_data *test_data, uint8_t cdev_id) comp_perf_check_capabilities(struct comp_test_data *test_data, uint8_t cdev_id)
{ {
@ -277,12 +283,24 @@ comp_perf_dump_input_data(struct comp_test_data *test_data)
return ret; return ret;
} }
static void
comp_perf_cleanup_on_signal(int signalNumber __rte_unused)
{
test_data->perf_comp_force_stop = 1;
}
static void
comp_perf_register_cleanup_on_signal(void)
{
signal(SIGTERM, comp_perf_cleanup_on_signal);
signal(SIGINT, comp_perf_cleanup_on_signal);
}
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
uint8_t level_idx = 0; uint8_t level_idx = 0;
int ret, i; int ret, i;
struct comp_test_data *test_data;
void *ctx[RTE_MAX_LCORE] = {}; void *ctx[RTE_MAX_LCORE] = {};
uint8_t enabled_cdevs[RTE_COMPRESS_MAX_DEVS]; uint8_t enabled_cdevs[RTE_COMPRESS_MAX_DEVS];
int nb_compressdevs = 0; int nb_compressdevs = 0;
@ -304,6 +322,8 @@ main(int argc, char **argv)
rte_exit(EXIT_FAILURE, "Cannot reserve memory in socket %d\n", rte_exit(EXIT_FAILURE, "Cannot reserve memory in socket %d\n",
rte_socket_id()); rte_socket_id());
comp_perf_register_cleanup_on_signal();
ret = EXIT_SUCCESS; ret = EXIT_SUCCESS;
test_data->cleanup = ST_TEST_DATA; test_data->cleanup = ST_TEST_DATA;
comp_perf_options_default(test_data); comp_perf_options_default(test_data);
@ -424,8 +444,10 @@ main(int argc, char **argv)
/* fallthrough */ /* fallthrough */
case ST_COMPDEV: case ST_COMPDEV:
for (i = 0; i < nb_compressdevs && for (i = 0; i < nb_compressdevs &&
i < RTE_COMPRESS_MAX_DEVS; i++) i < RTE_COMPRESS_MAX_DEVS; i++) {
rte_compressdev_stop(enabled_cdevs[i]); rte_compressdev_stop(enabled_cdevs[i]);
rte_compressdev_close(enabled_cdevs[i]);
}
/* fallthrough */ /* fallthrough */
case ST_TEST_DATA: case ST_TEST_DATA:
rte_free(test_data); rte_free(test_data);