MUST call fast_timer_remove after ioevent_detach
parent
9fad04f3f9
commit
3c7ebd14d9
34
src/sf_nio.c
34
src/sf_nio.c
|
|
@ -732,8 +732,20 @@ static int calc_iops_and_trigger_polling(struct fast_task_info *task)
|
||||||
task->polling.in_queue = true;
|
task->polling.in_queue = true;
|
||||||
result = ioevent_detach(&task->thread_data->
|
result = ioevent_detach(&task->thread_data->
|
||||||
ev_puller, task->event.fd);
|
ev_puller, task->event.fd);
|
||||||
|
fast_timer_remove(&task->thread_data->timer,
|
||||||
|
&task->event.timer);
|
||||||
|
|
||||||
|
if (fc_list_empty(&task->thread_data->polling_queue)) {
|
||||||
|
ioevent_set_timeout(&task->thread_data->
|
||||||
|
ev_puller, 0);
|
||||||
|
}
|
||||||
fc_list_add_tail(&task->polling.dlink,
|
fc_list_add_tail(&task->polling.dlink,
|
||||||
&task->thread_data->polling_queue);
|
&task->thread_data->polling_queue);
|
||||||
|
|
||||||
|
logInfo("file: "__FILE__", line: %d, client: %s:%u, "
|
||||||
|
"trigger polling iops: %"PRId64, __LINE__,
|
||||||
|
task->client_ip, task->port, (task->req_count -
|
||||||
|
task->polling.last_req_count) / time_distance);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (task->polling.continuous_count > 0) {
|
if (task->polling.continuous_count > 0) {
|
||||||
|
|
@ -741,9 +753,6 @@ static int calc_iops_and_trigger_polling(struct fast_task_info *task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logInfo("====== trigger_polling iops: %"PRId64, (task->req_count -
|
|
||||||
task->polling.last_req_count) / time_distance);
|
|
||||||
|
|
||||||
task->polling.last_calc_time = g_current_time;
|
task->polling.last_calc_time = g_current_time;
|
||||||
task->polling.last_req_count = task->req_count;
|
task->polling.last_req_count = task->req_count;
|
||||||
}
|
}
|
||||||
|
|
@ -768,8 +777,17 @@ static int calc_iops_and_remove_polling(struct fast_task_info *task)
|
||||||
task->polling.continuous_count = 0;
|
task->polling.continuous_count = 0;
|
||||||
task->polling.in_queue = false;
|
task->polling.in_queue = false;
|
||||||
fc_list_del_init(&task->polling.dlink);
|
fc_list_del_init(&task->polling.dlink);
|
||||||
|
if (fc_list_empty(&task->thread_data->polling_queue)) {
|
||||||
|
ioevent_set_timeout(&task->thread_data->ev_puller,
|
||||||
|
task->thread_data->timeout_ms);
|
||||||
|
}
|
||||||
result = sf_ioevent_add(task, (IOEventCallback)
|
result = sf_ioevent_add(task, (IOEventCallback)
|
||||||
sf_client_sock_read, task->network_timeout);
|
sf_client_sock_read, task->network_timeout);
|
||||||
|
|
||||||
|
logInfo("file: "__FILE__", line: %d, client: %s:%u, "
|
||||||
|
"remove polling iops: %"PRId64, __LINE__,
|
||||||
|
task->client_ip, task->port, (task->req_count -
|
||||||
|
task->polling.last_req_count) / time_distance);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (task->polling.continuous_count > 0) {
|
if (task->polling.continuous_count > 0) {
|
||||||
|
|
@ -777,9 +795,6 @@ static int calc_iops_and_remove_polling(struct fast_task_info *task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logInfo("@@@@@ remove_polling iops: %"PRId64, (task->req_count -
|
|
||||||
task->polling.last_req_count) / time_distance);
|
|
||||||
|
|
||||||
task->polling.last_calc_time = g_current_time;
|
task->polling.last_calc_time = g_current_time;
|
||||||
task->polling.last_req_count = task->req_count;
|
task->polling.last_req_count = task->req_count;
|
||||||
}
|
}
|
||||||
|
|
@ -797,16 +812,15 @@ int sf_rdma_busy_polling_callback(struct nio_thread_data *thread_data)
|
||||||
fc_list_for_each_entry_safe(task, tmp, &thread_data->
|
fc_list_for_each_entry_safe(task, tmp, &thread_data->
|
||||||
polling_queue, polling.dlink)
|
polling_queue, polling.dlink)
|
||||||
{
|
{
|
||||||
|
if (task->canceled) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ((bytes=task->handler->recv_data(task, &action)) < 0) {
|
if ((bytes=task->handler->recv_data(task, &action)) < 0) {
|
||||||
ioevent_add_to_deleted_list(task);
|
ioevent_add_to_deleted_list(task);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action == sf_comm_action_finish) {
|
if (action == sf_comm_action_finish) {
|
||||||
fast_timer_modify(&task->thread_data->timer,
|
|
||||||
&task->event.timer, g_current_time +
|
|
||||||
task->network_timeout);
|
|
||||||
|
|
||||||
task->req_count++;
|
task->req_count++;
|
||||||
task->nio_stages.current = SF_NIO_STAGE_SEND;
|
task->nio_stages.current = SF_NIO_STAGE_SEND;
|
||||||
if (SF_CTX->deal_task(task, SF_NIO_STAGE_SEND) < 0) { //fatal error
|
if (SF_CTX->deal_task(task, SF_NIO_STAGE_SEND) < 0) { //fatal error
|
||||||
|
|
|
||||||
|
|
@ -187,6 +187,7 @@ int sf_service_init_ex2(SFContext *sf_context, const char *name,
|
||||||
for (thread_data=sf_context->thread_data,thread_ctx=thread_contexts;
|
for (thread_data=sf_context->thread_data,thread_ctx=thread_contexts;
|
||||||
thread_data<data_end; thread_data++,thread_ctx++)
|
thread_data<data_end; thread_data++,thread_ctx++)
|
||||||
{
|
{
|
||||||
|
thread_data->timeout_ms = net_timeout_ms;
|
||||||
FC_INIT_LIST_HEAD(&thread_data->polling_queue);
|
FC_INIT_LIST_HEAD(&thread_data->polling_queue);
|
||||||
if (sf_context->smart_polling.enabled) {
|
if (sf_context->smart_polling.enabled) {
|
||||||
thread_data->busy_polling_callback =
|
thread_data->busy_polling_callback =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue