diff options
Diffstat (limited to 'app/nginx/src/tldk/tldk_event.c')
-rw-r--r-- | app/nginx/src/tldk/tldk_event.c | 276 |
1 files changed, 0 insertions, 276 deletions
diff --git a/app/nginx/src/tldk/tldk_event.c b/app/nginx/src/tldk/tldk_event.c deleted file mode 100644 index 4630326..0000000 --- a/app/nginx/src/tldk/tldk_event.c +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (c) 2017 Intel Corporation. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <ngx_tldk.h> -#include <tldk_sock.h> - -#include <rte_cycles.h> - -#include "be.h" -#include "debug.h" - -#define EVENT_BULK 32 - -enum { - EV_ACCEPT, - EV_RECV, - EV_SEND, - EV_ERR, - EV_NUM -}; - -struct tldk_event_stat { - uint64_t nb_get[EV_NUM]; - uint64_t nb_post[EV_NUM]; -}; - -static struct tldk_event_stat event_stat; - -extern ngx_event_module_t tldk_event_module; - -/* - * TLDK event module implementation - */ - -static ngx_int_t -tldk_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags) -{ - struct tldk_sock *ts; - ngx_connection_t *c; - - c = ev->data; - - FE_TRACE("%s(ev=%p,event=%#lx,flags=%#lx): fd=%d;\n", - __func__, ev, event, flags, c->fd); - - ts = sd_to_sock(c->fd); - if (ts == NULL) - return NGX_OK; - - if (event == NGX_READ_EVENT) { - tle_event_active(ts->rxev, TLE_SEV_DOWN); - tle_event_active(ts->erev, TLE_SEV_DOWN); - ts->rev = ev; - } else if (event == NGX_WRITE_EVENT) { - tle_event_active(ts->txev, TLE_SEV_DOWN); - tle_event_active(ts->erev, TLE_SEV_DOWN); - ts->wev = ev; - } - - ev->active = 1; - return NGX_OK; -} - -static ngx_int_t -tldk_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags) -{ - struct tldk_sock *ts; - ngx_connection_t *c; - - c = ev->data; - - FE_TRACE("%s(ev=%p,event=%#lx,flags=%#lx): fd=%d;\n", - __func__, ev, event, flags, c->fd); - - ev->active = 0; - if ((flags & NGX_CLOSE_EVENT) != 0) - return NGX_OK; - - ts = sd_to_sock(c->fd); - if (ts == NULL) - return NGX_OK; - - if (event == NGX_READ_EVENT) { - tle_event_down(ts->rxev); - tle_event_down(ts->erev); - ts->rev = NULL; - } else if (event == NGX_WRITE_EVENT) { - tle_event_down(ts->txev); - tle_event_down(ts->erev); - ts->wev = NULL; - } - - return NGX_OK; -} - -static inline void -post_event(ngx_event_t *ev, ngx_queue_t *q, ngx_uint_t flags, uint32_t type) -{ - if (ev != NULL && ev->active == 1) { - ev->ready = 1; - event_stat.nb_post[type]++; - if ((flags & NGX_POST_EVENTS) != 0) { - ngx_post_event(ev, q); - } else - ev->handler(ev); - } -} - -static ngx_int_t -tldk_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags) -{ - uint32_t i, n, ne, nr, ns, nt; - uint64_t tme, tms, tmw; - struct tldk_sock *te[EVENT_BULK]; - struct tldk_sock *tr[EVENT_BULK]; - struct tldk_sock *ts[EVENT_BULK]; - struct tldk_sock *tt[EVENT_BULK]; - struct tldk_ctx *tcx; - - FE_TRACE("%s(cycle=%p,timer=%lu,flags=%#lx);\n", - __func__, cycle, timer, flags); - - tcx = wrk2ctx + ngx_worker; - - tms = rte_get_tsc_cycles(); - tme = (timer == NGX_TIMER_INFINITE) ? timer : - timer * (rte_get_tsc_hz() + MS_PER_S - 1) / MS_PER_S; - tmw = 0; - n = 0; - - do { - if (tcx->cf->be_in_worker != 0) - be_lcore_tcp(tcx); - - ns = tle_evq_get(stbl.syneq, (const void **)(uintptr_t)ts, - RTE_DIM(ts)); - nr = tle_evq_get(stbl.rxeq, (const void **)(uintptr_t)tr, - RTE_DIM(tr)); - nt = tle_evq_get(stbl.txeq, (const void **)(uintptr_t)tt, - RTE_DIM(tt)); - ne = tle_evq_get(stbl.ereq, (const void **)(uintptr_t)te, - RTE_DIM(te)); - n = ne + nr + ns + nt; - - if (n != 0) { - event_stat.nb_get[EV_ACCEPT] += ns; - event_stat.nb_get[EV_RECV] += nr; - event_stat.nb_get[EV_SEND] += nt; - event_stat.nb_get[EV_ERR] += ne; - break; - } - - if (tcx->cf->be_in_worker == 0) - //sched_yield(); - rte_delay_us(1); - - tmw += rte_get_tsc_cycles() - tms; - - } while (tmw < tme && ngx_quit == 0 && ngx_terminate == 0); - - if ((flags & NGX_UPDATE_TIME) != 0 || ngx_event_timer_alarm) - ngx_time_update(); - - if (n == 0) - return NGX_OK; - - for (i = 0; i != ns; i++) - post_event(ts[i]->rev, &ngx_posted_accept_events, flags, - EV_ACCEPT); - - for (i = 0; i != nr; i++) - post_event(tr[i]->rev, &ngx_posted_events, flags, EV_RECV); - - for (i = 0; i != nt; i++) - post_event(tt[i]->wev, &ngx_posted_events, flags, EV_SEND); - - for (i = 0; i != ne; i++) { - te[i]->posterr++; - post_event(te[i]->rev, &ngx_posted_events, flags, EV_ERR); - post_event(te[i]->wev, &ngx_posted_events, flags, EV_ERR); - } - - return NGX_OK; -} - -static ngx_int_t -tldk_init_events(ngx_cycle_t *cycle, ngx_msec_t timer) -{ - FE_TRACE("%s(cycle=%p,timer=%lu);\n", - __func__, cycle, timer); - - /* overwrite event actions for worker process */ - ngx_event_actions = tldk_event_module.actions; - ngx_event_flags = NGX_USE_LEVEL_EVENT; - - ngx_io = ngx_os_io; - return NGX_OK; -} - -void -tldk_dump_event_stats(void) -{ - static const char * const name[EV_NUM] = { - "ACCEPT", - "RECV", - "SEND", - "ERR", - }; - - uint32_t i; - - RTE_LOG(NOTICE, USER1, "%s(worker=%lu)={\n", __func__, ngx_worker); - for (i = 0; i != RTE_DIM(name); i++) - RTE_LOG(NOTICE, USER1, - "%s[GET, POST]={%" PRIu64 ", %" PRIu64 "};\n", - name[i], event_stat.nb_get[i], event_stat.nb_post[i]); - RTE_LOG(NOTICE, USER1, "};\n"); -} - -static void -tldk_done_events(ngx_cycle_t *cycle) -{ -} - -static ngx_str_t tldk_name = ngx_string("tldk"); - -ngx_event_module_t tldk_event_module = { - .name = &tldk_name, - .actions = { - .add = tldk_add_event, - .del = tldk_del_event, - .enable = tldk_add_event, - .disable = tldk_del_event, - .process_events = tldk_process_events, - .init = tldk_init_events, - .done = tldk_done_events, - }, -}; - -ngx_module_t ngx_tldk_event_module = { - NGX_MODULE_V1, - &tldk_event_module, /* module context */ - NULL, /* module directives */ - NGX_EVENT_MODULE, /* module type */ - NULL, /* init master */ - NULL, /* init module */ - NULL, /* init process */ - NULL, /* init thread */ - NULL, /* exit thread */ - NULL, /* exit process */ - NULL, /* exit master */ - NGX_MODULE_V1_PADDING -}; |