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:
parent
1b3268a326
commit
d6cec11311
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user