Updated networking code.
- Simplified and decoupled I/O from processing code. - Single reader with multiple workers. - Reader is bound to specific CPU for lowest possible latency. - Reverted to select() instead of fdset wrapper as epoll/kqueue could be quite slower for a single or handful of sockets. - Reader I/O calls are non-blocking. General idea is: - Reader takes free request from a rx_queue - Receives data and pushes it to the tx_queue - Worker processes the packets, sends answers and returns the request to the rx_queue Semi lock-free queue is used for communication. This is measured to be slightly better than singlethreading, as socket contention could be better predicted - the reader cannot check sockets for new events when tx_queue is full. Change-Id: Ifc40889b355404a9e78e10d77c26cb3fc4c58386
Showing
- Knot.files 2 additions, 0 deletionsKnot.files
- src/knot/common.h 1 addition, 1 deletionsrc/knot/common.h
- src/knot/ctl/knotc_main.c 1 addition, 1 deletionsrc/knot/ctl/knotc_main.c
- src/knot/ctl/remote.c 1 addition, 1 deletionsrc/knot/ctl/remote.c
- src/knot/server/server.c 8 additions, 12 deletionssrc/knot/server/server.c
- src/knot/server/server.h 1 addition, 1 deletionsrc/knot/server/server.h
- src/knot/server/socket.c 2 additions, 2 deletionssrc/knot/server/socket.c
- src/knot/server/socket.h 1 addition, 1 deletionsrc/knot/server/socket.h
- src/knot/server/udp-handler.c 232 additions, 158 deletionssrc/knot/server/udp-handler.c
- src/knot/server/udp-handler.h 12 additions, 3 deletionssrc/knot/server/udp-handler.h
- src/knot/server/xfr-handler.c 1 addition, 1 deletionsrc/knot/server/xfr-handler.c
Loading
Please register or sign in to comment