TSG-14342 tsg-service-chaining-engine在空闲时调用marsio_poll_wait让出cpu供其他进程使用
This commit is contained in:
@@ -103,7 +103,7 @@ struct metadata
|
||||
* API Declaration
|
||||
******************************************************************************/
|
||||
|
||||
struct packet_io *packet_io_create(const char *profile, int thread_num);
|
||||
struct packet_io *packet_io_create(const char *profile, int thread_num, cpu_set_t *coremask);
|
||||
void packet_io_destory(struct packet_io *handle);
|
||||
|
||||
int packet_io_polling_nf_interface(struct packet_io *handle, int thread_seq, void *ctx);
|
||||
@@ -176,7 +176,7 @@ static int is_upstream_keepalive_packet(marsio_buff_t *rx_buff);
|
||||
* API Definition
|
||||
******************************************************************************/
|
||||
|
||||
struct packet_io *packet_io_create(const char *profile, int thread_num)
|
||||
struct packet_io *packet_io_create(const char *profile, int thread_num, cpu_set_t *coremask)
|
||||
{
|
||||
int opt = 1;
|
||||
struct packet_io *handle = (struct packet_io *)calloc(1, sizeof(struct packet_io));
|
||||
@@ -195,6 +195,12 @@ struct packet_io *packet_io_create(const char *profile, int thread_num)
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
if (marsio_option_set(handle->instance, MARSIO_OPT_THREAD_MASK_IN_CPUSET, coremask, sizeof(cpu_set_t)) != 0)
|
||||
{
|
||||
LOG_ERROR("%s: unable to set MARSIO_OPT_EXIT_WHEN_ERR option for marsio instance", LOG_TAG_PKTIO);
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
if (marsio_option_set(handle->instance, MARSIO_OPT_EXIT_WHEN_ERR, &opt, sizeof(opt)) != 0)
|
||||
{
|
||||
LOG_ERROR("%s: unable to set MARSIO_OPT_EXIT_WHEN_ERR option for marsio instance", LOG_TAG_PKTIO);
|
||||
@@ -289,6 +295,26 @@ void packet_io_destory(struct packet_io *handle)
|
||||
}
|
||||
}
|
||||
|
||||
int packet_io_thread_init(struct packet_io *handle, struct thread_ctx *thread_ctx)
|
||||
{
|
||||
if (marsio_thread_init(handle->instance) != 0)
|
||||
{
|
||||
LOG_ERROR("%s: unable to init marsio thread %d", LOG_TAG_PKTIO, thread_ctx->thread_index);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void packet_io_thread_wait(struct packet_io *handle, struct thread_ctx *thread_ctx, int timeout_ms)
|
||||
{
|
||||
struct mr_vdev *vdevs[] = {
|
||||
handle->dev_nf_interface.mr_dev,
|
||||
handle->dev_endpoint.mr_dev};
|
||||
|
||||
marsio_poll_wait(handle->instance, vdevs, 2, thread_ctx->thread_index, timeout_ms);
|
||||
}
|
||||
|
||||
// return n_packet_recv
|
||||
int packet_io_polling_nf_interface(struct packet_io *handle, int thread_seq, void *ctx)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user