Compare commits

...

14 Commits

Author SHA1 Message Date
Witold Kręcicki
c72a118813 Revert 64b96f029c partially 2018-11-21 11:36:38 +00:00
Witold Kręcicki
14963efdac gRevert "quantum 20 for network tasks"
This reverts commit 819edd83e3.
2018-11-21 11:35:42 +00:00
Witold Kręcicki
c74473ac64 Revert "dont kill oldest query"
This reverts commit 160c2bd81f.
2018-11-21 11:35:30 +00:00
Witold Kręcicki
ca295f9e3d Revert "Don't answer at all if we hit quota"
This reverts commit 42879fd1e9.
2018-11-21 11:35:13 +00:00
Witold Kręcicki
819edd83e3 quantum 20 for network tasks 2018-11-21 10:42:56 +00:00
Witold Kręcicki
6e3baeb0b9 Revert "Revert "Use larger quantum for network tasks""
This reverts commit 2ca2715872.
2018-11-21 10:41:59 +00:00
Witold Kręcicki
6c8651f49b Revert "Experiment: task tracing"
This reverts commit 3789dc3836.
2018-11-21 10:41:06 +00:00
Witold Kręcicki
e21ef26752 bound tasks 2018-11-21 09:50:50 +00:00
Witold Kręcicki
3789dc3836 Experiment: task tracing 2018-11-21 09:04:33 +00:00
Witold Kręcicki
42879fd1e9 Don't answer at all if we hit quota 2018-11-19 17:52:31 +00:00
Witold Kręcicki
160c2bd81f dont kill oldest query 2018-11-19 17:00:23 +00:00
Witold Kręcicki
64b96f029c task_sendto, weaker timermgr lock 2018-11-19 15:12:48 +00:00
Witold Kręcicki
7230643e15 Experiment: 'loose' workers 2018-11-19 14:39:23 +00:00
Witold Kręcicki
2ca2715872 Revert "Use larger quantum for network tasks"
This reverts commit 9a903789ed.
2018-11-19 14:15:13 +00:00
3 changed files with 32 additions and 10 deletions

View File

@@ -4382,8 +4382,8 @@ fctx_shutdown(fetchctx_t *fctx) {
*/
if (fctx->state != fetchstate_init) {
cevent = &fctx->control_event;
isc_task_send(fctx->res->buckets[fctx->bucketnum].task,
&cevent);
isc_task_sendto(fctx->res->buckets[fctx->bucketnum].task,
&cevent, fctx->bucketnum);
}
}
@@ -9925,7 +9925,7 @@ dns_resolver_create(dns_view_t *view,
if (result != ISC_R_SUCCESS)
goto cleanup_buckets;
res->buckets[i].task = NULL;
result = isc_task_create(taskmgr, 0, &res->buckets[i].task);
result = isc_task_create_bound(taskmgr, 0, &res->buckets[i].task, i);
if (result != ISC_R_SUCCESS) {
DESTROYLOCK(&res->buckets[i].lock);
goto cleanup_buckets;
@@ -10563,7 +10563,7 @@ dns_resolver_createfetch(dns_resolver_t *res, const dns_name_t *name,
DNS_EVENT_FETCHCONTROL,
fctx_start, fctx, NULL,
NULL, NULL);
isc_task_send(res->buckets[bucketnum].task, &event);
isc_task_sendto(res->buckets[bucketnum].task, &event, bucketnum);
} else {
/*
* We don't care about the result of fctx_unlink()

View File

@@ -136,6 +136,10 @@ struct isc_task {
isc_result_t
isc_task_create(isc_taskmgr_t *manager, unsigned int quantum,
isc_task_t **taskp);
isc_result_t
isc_task_create_bound(isc_taskmgr_t *manager, unsigned int quantum,
isc_task_t **taskp, int threadid);
/*%<
* Create a task.
*

View File

@@ -104,6 +104,7 @@ struct isc__task {
char name[16];
void * tag;
unsigned int threadid;
bool bound;
/* Locked by task manager lock. */
LINK(isc__task_t) link;
LINK(isc__task_t) ready_link;
@@ -243,7 +244,14 @@ task_finished(isc__task_t *task) {
isc_result_t
isc_task_create(isc_taskmgr_t *manager0, unsigned int quantum,
isc_task_t **taskp)
isc_task_t **taskp)
{
return (isc_task_create_bound(manager0, quantum, taskp, -1));
}
isc_result_t
isc_task_create_bound(isc_taskmgr_t *manager0, unsigned int quantum,
isc_task_t **taskp, int threadid)
{
isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
isc__task_t *task;
@@ -258,9 +266,15 @@ isc_task_create(isc_taskmgr_t *manager0, unsigned int quantum,
return (ISC_R_NOMEMORY);
XTRACE("isc_task_create");
task->manager = manager;
task->threadid = atomic_fetch_add_explicit(&manager->curq, 1,
memory_order_relaxed)
% manager->workers;
if (threadid == -1) {
task->bound = false;
task->threadid = atomic_fetch_add_explicit(&manager->curq, 1,
memory_order_relaxed)
% manager->workers;
} else {
task->bound = true;
task->threadid = threadid % manager->workers;
}
result = isc_mutex_init(&task->lock);
if (result != ISC_R_SUCCESS) {
isc_mem_put(manager->mctx, task, sizeof(*task));
@@ -494,7 +508,9 @@ isc_task_sendto(isc_task_t *task0, isc_event_t **eventp, int c) {
REQUIRE(VALID_TASK(task));
XTRACE("isc_task_send");
if (c < 0) {
if (task->bound) {
c = task->threadid;
} else if (c < 0) {
c = atomic_fetch_add_explicit(&task->manager->curq, 1,
memory_order_relaxed);
}
@@ -544,7 +560,9 @@ isc_task_sendtoanddetach(isc_task_t **taskp, isc_event_t **eventp, int c) {
REQUIRE(VALID_TASK(task));
XTRACE("isc_task_sendanddetach");
if (c < 0) {
if (task->bound) {
c = task->threadid;
} else if (c < 0) {
c = atomic_fetch_add_explicit(&task->manager->curq, 1,
memory_order_relaxed);
}