win,tcp,udp: remove "active streams" optimization
It has been disabled for 11 years, I guess it should remain that way.
This commit is contained in:
parent
c880de3004
commit
2b4b293ebb
@ -343,9 +343,9 @@ typedef struct {
|
|||||||
uv_idle_t* next_idle_handle; \
|
uv_idle_t* next_idle_handle; \
|
||||||
/* This handle holds the peer sockets for the fast variant of uv_poll_t */ \
|
/* This handle holds the peer sockets for the fast variant of uv_poll_t */ \
|
||||||
SOCKET poll_peer_sockets[UV_MSAFD_PROVIDER_COUNT]; \
|
SOCKET poll_peer_sockets[UV_MSAFD_PROVIDER_COUNT]; \
|
||||||
/* Counter to keep track of active tcp streams */ \
|
/* No longer used. */ \
|
||||||
unsigned int active_tcp_streams; \
|
unsigned int active_tcp_streams; \
|
||||||
/* Counter to keep track of active udp streams */ \
|
/* No longer used. */ \
|
||||||
unsigned int active_udp_streams; \
|
unsigned int active_udp_streams; \
|
||||||
/* Counter to started timer */ \
|
/* Counter to started timer */ \
|
||||||
uint64_t timer_counter; \
|
uint64_t timer_counter; \
|
||||||
|
|||||||
@ -279,9 +279,6 @@ int uv_loop_init(uv_loop_t* loop) {
|
|||||||
|
|
||||||
memset(&loop->poll_peer_sockets, 0, sizeof loop->poll_peer_sockets);
|
memset(&loop->poll_peer_sockets, 0, sizeof loop->poll_peer_sockets);
|
||||||
|
|
||||||
loop->active_tcp_streams = 0;
|
|
||||||
loop->active_udp_streams = 0;
|
|
||||||
|
|
||||||
loop->timer_counter = 0;
|
loop->timer_counter = 0;
|
||||||
loop->stop_flag = 0;
|
loop->stop_flag = 0;
|
||||||
|
|
||||||
|
|||||||
@ -29,14 +29,6 @@
|
|||||||
#include "req-inl.h"
|
#include "req-inl.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Threshold of active tcp streams for which to preallocate tcp read buffers.
|
|
||||||
* (Due to node slab allocator performing poorly under this pattern,
|
|
||||||
* the optimization is temporarily disabled (threshold=0). This will be
|
|
||||||
* revisited once node allocator is improved.)
|
|
||||||
*/
|
|
||||||
const unsigned int uv_active_tcp_streams_threshold = 0;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Number of simultaneous pending AcceptEx calls.
|
* Number of simultaneous pending AcceptEx calls.
|
||||||
*/
|
*/
|
||||||
@ -273,7 +265,6 @@ void uv__tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uv__handle_close(handle);
|
uv__handle_close(handle);
|
||||||
loop->active_tcp_streams--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -483,26 +474,9 @@ static void uv__tcp_queue_read(uv_loop_t* loop, uv_tcp_t* handle) {
|
|||||||
req = &handle->read_req;
|
req = &handle->read_req;
|
||||||
memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped));
|
memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped));
|
||||||
|
|
||||||
/*
|
handle->flags |= UV_HANDLE_ZERO_READ;
|
||||||
* Preallocate a read buffer if the number of active streams is below
|
buf.base = (char*) &uv_zero_;
|
||||||
* the threshold.
|
buf.len = 0;
|
||||||
*/
|
|
||||||
if (loop->active_tcp_streams < uv_active_tcp_streams_threshold) {
|
|
||||||
handle->flags &= ~UV_HANDLE_ZERO_READ;
|
|
||||||
handle->tcp.conn.read_buffer = uv_buf_init(NULL, 0);
|
|
||||||
handle->alloc_cb((uv_handle_t*) handle, 65536, &handle->tcp.conn.read_buffer);
|
|
||||||
if (handle->tcp.conn.read_buffer.base == NULL ||
|
|
||||||
handle->tcp.conn.read_buffer.len == 0) {
|
|
||||||
handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &handle->tcp.conn.read_buffer);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
assert(handle->tcp.conn.read_buffer.base != NULL);
|
|
||||||
buf = handle->tcp.conn.read_buffer;
|
|
||||||
} else {
|
|
||||||
handle->flags |= UV_HANDLE_ZERO_READ;
|
|
||||||
buf.base = (char*) &uv_zero_;
|
|
||||||
buf.len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Prepare the overlapped structure. */
|
/* Prepare the overlapped structure. */
|
||||||
memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped));
|
memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped));
|
||||||
@ -715,8 +689,6 @@ int uv__tcp_accept(uv_tcp_t* server, uv_tcp_t* client) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loop->active_tcp_streams++;
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1247,7 +1219,6 @@ void uv__process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle,
|
|||||||
0) == 0) {
|
0) == 0) {
|
||||||
uv__connection_init((uv_stream_t*)handle);
|
uv__connection_init((uv_stream_t*)handle);
|
||||||
handle->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE;
|
handle->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE;
|
||||||
loop->active_tcp_streams++;
|
|
||||||
} else {
|
} else {
|
||||||
err = WSAGetLastError();
|
err = WSAGetLastError();
|
||||||
}
|
}
|
||||||
@ -1330,7 +1301,6 @@ int uv__tcp_xfer_import(uv_tcp_t* tcp,
|
|||||||
tcp->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE;
|
tcp->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
tcp->loop->active_tcp_streams++;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
106
src/win/udp.c
106
src/win/udp.c
@ -29,11 +29,6 @@
|
|||||||
#include "req-inl.h"
|
#include "req-inl.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Threshold of active udp streams for which to preallocate udp read buffers.
|
|
||||||
*/
|
|
||||||
const unsigned int uv_active_udp_streams_threshold = 0;
|
|
||||||
|
|
||||||
/* A zero-size buffer for use by uv_udp_read */
|
/* A zero-size buffer for use by uv_udp_read */
|
||||||
static char uv_zero_[] = "";
|
static char uv_zero_[] = "";
|
||||||
int uv_udp_getpeername(const uv_udp_t* handle,
|
int uv_udp_getpeername(const uv_udp_t* handle,
|
||||||
@ -276,84 +271,35 @@ static void uv__udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) {
|
|||||||
req = &handle->recv_req;
|
req = &handle->recv_req;
|
||||||
memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped));
|
memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped));
|
||||||
|
|
||||||
/*
|
handle->flags |= UV_HANDLE_ZERO_READ;
|
||||||
* Preallocate a read buffer if the number of active streams is below
|
|
||||||
* the threshold.
|
|
||||||
*/
|
|
||||||
if (loop->active_udp_streams < uv_active_udp_streams_threshold) {
|
|
||||||
handle->flags &= ~UV_HANDLE_ZERO_READ;
|
|
||||||
|
|
||||||
handle->recv_buffer = uv_buf_init(NULL, 0);
|
buf.base = (char*) uv_zero_;
|
||||||
handle->alloc_cb((uv_handle_t*) handle, UV__UDP_DGRAM_MAXSIZE, &handle->recv_buffer);
|
buf.len = 0;
|
||||||
if (handle->recv_buffer.base == NULL || handle->recv_buffer.len == 0) {
|
flags = MSG_PEEK;
|
||||||
handle->recv_cb(handle, UV_ENOBUFS, &handle->recv_buffer, NULL, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
assert(handle->recv_buffer.base != NULL);
|
|
||||||
|
|
||||||
buf = handle->recv_buffer;
|
result = handle->func_wsarecv(handle->socket,
|
||||||
memset(&handle->recv_from, 0, sizeof handle->recv_from);
|
(WSABUF*) &buf,
|
||||||
handle->recv_from_len = sizeof handle->recv_from;
|
1,
|
||||||
flags = 0;
|
&bytes,
|
||||||
|
&flags,
|
||||||
result = handle->func_wsarecvfrom(handle->socket,
|
&req->u.io.overlapped,
|
||||||
(WSABUF*) &buf,
|
NULL);
|
||||||
1,
|
|
||||||
&bytes,
|
|
||||||
&flags,
|
|
||||||
(struct sockaddr*) &handle->recv_from,
|
|
||||||
&handle->recv_from_len,
|
|
||||||
&req->u.io.overlapped,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) {
|
|
||||||
/* Process the req without IOCP. */
|
|
||||||
handle->flags |= UV_HANDLE_READ_PENDING;
|
|
||||||
req->u.io.overlapped.InternalHigh = bytes;
|
|
||||||
handle->reqs_pending++;
|
|
||||||
uv__insert_pending_req(loop, req);
|
|
||||||
} else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) {
|
|
||||||
/* The req will be processed with IOCP. */
|
|
||||||
handle->flags |= UV_HANDLE_READ_PENDING;
|
|
||||||
handle->reqs_pending++;
|
|
||||||
} else {
|
|
||||||
/* Make this req pending reporting an error. */
|
|
||||||
SET_REQ_ERROR(req, WSAGetLastError());
|
|
||||||
uv__insert_pending_req(loop, req);
|
|
||||||
handle->reqs_pending++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) {
|
||||||
|
/* Process the req without IOCP. */
|
||||||
|
handle->flags |= UV_HANDLE_READ_PENDING;
|
||||||
|
req->u.io.overlapped.InternalHigh = bytes;
|
||||||
|
handle->reqs_pending++;
|
||||||
|
uv__insert_pending_req(loop, req);
|
||||||
|
} else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) {
|
||||||
|
/* The req will be processed with IOCP. */
|
||||||
|
handle->flags |= UV_HANDLE_READ_PENDING;
|
||||||
|
handle->reqs_pending++;
|
||||||
} else {
|
} else {
|
||||||
handle->flags |= UV_HANDLE_ZERO_READ;
|
/* Make this req pending reporting an error. */
|
||||||
|
SET_REQ_ERROR(req, WSAGetLastError());
|
||||||
buf.base = (char*) uv_zero_;
|
uv__insert_pending_req(loop, req);
|
||||||
buf.len = 0;
|
handle->reqs_pending++;
|
||||||
flags = MSG_PEEK;
|
|
||||||
|
|
||||||
result = handle->func_wsarecv(handle->socket,
|
|
||||||
(WSABUF*) &buf,
|
|
||||||
1,
|
|
||||||
&bytes,
|
|
||||||
&flags,
|
|
||||||
&req->u.io.overlapped,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) {
|
|
||||||
/* Process the req without IOCP. */
|
|
||||||
handle->flags |= UV_HANDLE_READ_PENDING;
|
|
||||||
req->u.io.overlapped.InternalHigh = bytes;
|
|
||||||
handle->reqs_pending++;
|
|
||||||
uv__insert_pending_req(loop, req);
|
|
||||||
} else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) {
|
|
||||||
/* The req will be processed with IOCP. */
|
|
||||||
handle->flags |= UV_HANDLE_READ_PENDING;
|
|
||||||
handle->reqs_pending++;
|
|
||||||
} else {
|
|
||||||
/* Make this req pending reporting an error. */
|
|
||||||
SET_REQ_ERROR(req, WSAGetLastError());
|
|
||||||
uv__insert_pending_req(loop, req);
|
|
||||||
handle->reqs_pending++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,7 +322,6 @@ int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb,
|
|||||||
|
|
||||||
handle->flags |= UV_HANDLE_READING;
|
handle->flags |= UV_HANDLE_READING;
|
||||||
INCREASE_ACTIVE_COUNT(loop, handle);
|
INCREASE_ACTIVE_COUNT(loop, handle);
|
||||||
loop->active_udp_streams++;
|
|
||||||
|
|
||||||
handle->recv_cb = recv_cb;
|
handle->recv_cb = recv_cb;
|
||||||
handle->alloc_cb = alloc_cb;
|
handle->alloc_cb = alloc_cb;
|
||||||
@ -393,7 +338,6 @@ int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb,
|
|||||||
int uv__udp_recv_stop(uv_udp_t* handle) {
|
int uv__udp_recv_stop(uv_udp_t* handle) {
|
||||||
if (handle->flags & UV_HANDLE_READING) {
|
if (handle->flags & UV_HANDLE_READING) {
|
||||||
handle->flags &= ~UV_HANDLE_READING;
|
handle->flags &= ~UV_HANDLE_READING;
|
||||||
handle->loop->active_udp_streams--;
|
|
||||||
DECREASE_ACTIVE_COUNT(loop, handle);
|
DECREASE_ACTIVE_COUNT(loop, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user